export default class IframeReference { private static targetOrigin: string | null = null; private static iframeUrl: string | null = null; private static iframe: HTMLIFrameElement | null = null; private constructor() { } public static setTargetOrigin(targetOrigin: string): void { if (this.targetOrigin) { console.debug("targetOrigin is already set"); return; } try { new URL(targetOrigin); this.targetOrigin = targetOrigin; } catch { throw new Error(`Invalid targetOrigin: ${targetOrigin}`); } } public static getTargetOrigin(): string { if (!this.targetOrigin) { throw new Error("targetOrigin is not set"); } return this.targetOrigin; } public static setIframeUrl(iframeUrl: string): void { if (this.iframeUrl) { console.debug("iframeUrl is already set"); return; } try { // Validate and normalize URL const url = new URL(iframeUrl); this.iframeUrl = url.toString(); } catch { throw new Error(`Invalid iframeUrl: ${iframeUrl}`); } } public static getIframeUrl(): string { if (!this.iframeUrl) { throw new Error("iframeUrl is not set"); } return this.iframeUrl; } public static setIframe(iframe: HTMLIFrameElement | null): void { if (iframe !== null && !(iframe instanceof HTMLIFrameElement)) { throw new Error("setIframe expects an HTMLIFrameElement or null"); } this.iframe = iframe; } public static getIframe(): HTMLIFrameElement { if (!this.iframe) { throw new Error("iframe is not set"); } return this.iframe; } }