import { BRIDGE_CONFIG, isRecord, isTrustedOrigin } from './policy'; // Only the top frame of the configured demo origin can call the isolated-world bridge. if (window === window.top && isTrustedOrigin(location.origin)) { const reply = (message: object) => window.postMessage({ source: 'pma-ext', ...message }, location.origin); window.addEventListener('message', (event) => { const message: unknown = event.data; if (event.source !== window || event.origin !== location.origin || !isRecord(message)) return; if (message.source !== 'pma-page') return; if (message.kind === 'ping' && typeof message.id === 'string') { reply({ kind: 'pong', id: message.id, provider: BRIDGE_CONFIG.provider, version: BRIDGE_CONFIG.version, sso: true, }); return; } if (message.kind === 'fetch' && typeof message.id === 'string') { chrome.runtime.sendMessage( { namespace: 'pma-bridge', kind: 'fetch', url: message.url, options: message.options }, (response) => { const error = chrome.runtime.lastError; reply({ kind: 'fetch', id: message.id, response: error || !response ? { ok: false, error: 'Extension bridge unavailable' } : response, }); }, ); return; } if (message.kind === 'sso' && typeof message.flowId === 'string') { chrome.runtime.sendMessage( { namespace: 'pma-bridge', kind: 'sso', flowId: message.flowId, url: message.url, redirectPrefix: message.redirectPrefix, }, (response) => { const error = chrome.runtime.lastError; if (error || response?.error) reply({ kind: 'ssoCode', flowId: message.flowId, error: response?.error ?? 'Extension bridge unavailable', }); }, ); return; } if (message.kind === 'ssoCancel' && typeof message.flowId === 'string') { chrome.runtime.sendMessage( { namespace: 'pma-bridge', kind: 'ssoCancel', flowId: message.flowId }, () => { void chrome.runtime.lastError; }, ); } }); chrome.runtime.onMessage.addListener((message: unknown, sender) => { if ( sender.id !== chrome.runtime.id || !isRecord(message) || message.namespace !== 'pma-bridge' || message.kind !== 'ssoCode' ) return; reply({ kind: 'ssoCode', flowId: message.flowId, url: message.url, error: message.error }); }); }