@juspay-tech/hyperswitch-control-center-embed-core 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -265,6 +265,7 @@ class Hyperswitch {
265
265
  return;
266
266
  }
267
267
  setTimeout(() => {
268
+ var _a;
268
269
  try {
269
270
  const contentWindow = iframe.contentWindow;
270
271
  if (!contentWindow) {
@@ -288,13 +289,11 @@ class Hyperswitch {
288
289
  error: 'No token available'
289
290
  }, '*');
290
291
  }
291
- // Send init_config (if available) as a separate message
292
- if (this.initConfig) {
293
- contentWindow.postMessage({
294
- type: 'INIT_CONFIG',
295
- init_config: this.initConfig
296
- }, '*');
297
- }
292
+ // Always send init_config. If merchant doesn't provide it, send an empty object.
293
+ contentWindow.postMessage({
294
+ type: 'INIT_CONFIG',
295
+ init_config: (_a = this.initConfig) !== null && _a !== void 0 ? _a : {}
296
+ }, '*');
298
297
  }
299
298
  catch (error) {
300
299
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/init-config.ts","../src/hyperswitch.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Send init_config (if available) as a separate message\n if (this.initConfig) {\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig\n }, '*');\n }\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/init-config.ts","../src/hyperswitch.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Always send init_config. If merchant doesn't provide it, send an empty object.\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig ?? {}\n }, '*');\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser"],"mappings":"AAGA,MAAMA,WAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAEhD,MAAe,kBAAkB,CAAA;IAQ/B,WAAY,CAAA,QAAqB,EAAE,OAAwB,EAAA;AACzD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;;;;QAIhC,IAAI,CAACA,WAAS,EAAE;YACd,OAAO;SACR;QAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;KAC9D;IAEO,YAAY,GAAA;QAClB,IAAI,CAACA,WAAS,EAAE;YACd,OAAO;SACR;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,uBAAuB,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACtF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAEhE,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAA,MAAA,CAAA,MAAA,CAAA,EAC9B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,EACnC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,EACtC,QAAQ,EAAE,QAAQ,EAAA,GACd,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,GAC5B,CAAC;KACJ;IAEO,WAAW,GAAA;QACjB,IAAI,CAACA,WAAS,EAAE;YACd,OAAO;SACR;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAe,YAAA,EAAA,IAAI,CAAC,cAAc,EAAE,CAAA,CAAE,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,4DAA4D,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,0GAA0G,CAAC,CAAC;QAEhJ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACvC;AAEO,IAAA,aAAa,CAAC,KAAmB,EAAA;;QACvC,IAAI,CAACA,WAAS,EAAE;YACd,OAAO;SACR;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACpC;QAED,IAAI,CAAA,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,0CAAE,IAAI,MAAK,2BAA2B,EAAE;AACpD,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACpC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AAEpD,YAAA,IAAI,gBAAgB,KAAK,IAAI,CAAC,cAAc,EAAE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE;gBAChG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,SAAS,CAAA,EAAA,CAAI,CAAC;AAE7C,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzB,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpB,wBAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;AAC/B,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,CAAC,CAAC;iBACJ;aACF;SACF;KACF;AAED,IAAA,KAAK,CAAC,OAA6B,EAAA;QACjC,IAAI,CAACA,WAAS,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;SACzF;AAED,QAAA,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,QAAQ;AACxC,cAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;cAC/B,OAAO,CAAC;QAEZ,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAA,CAAE,CAAC,CAAC;SACpD;AAED,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,GAAA;QACL,IAAI,CAACA,WAAS,EAAE;YACd,OAAO;SACR;AACD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACjE;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnD;KACF;IAKM,SAAS,GAAA;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AACF;;AC5HK,MAAO,+BAAgC,SAAQ,kBAAkB,CAAA;IACrE,WAAY,CAAA,QAAqB,EAAE,OAAwB,EAAA;AACzD,QAAA,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC1B;IAES,cAAc,GAAA;AACtB,QAAA,OAAO,YAAY,CAAC;KACrB;IAES,YAAY,GAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,uBAAuB,CAAC;QAC5D,OAAO,CAAA,EAAG,OAAO,CAAA,oBAAA,CAAsB,CAAC;KACzC;AACF;;ACiDD;;;;;AAKG;AACG,SAAU,eAAe,CAAC,aAA+C,EAAA;;AAC7E,IAAA,MAAM,SAAS,GAAG,aAAa,IAAI,EAAE,CAAC;IAEtC,OAAO;AACL,QAAA,QAAQ,EAAE;AACR,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,YAAY,mCAAI,IAAI;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,UAAU,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,eAAe,mCAAI,IAAI;AAC9C,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,OAAO,EAAE;AACP,gBAAA,OAAO,EAAE;AACP,oBAAA,eAAe,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AACpE,oBAAA,SAAS,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AACxD,oBAAA,oBAAoB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,oBAAoB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AAC/E,iBAAA;AACD,gBAAA,SAAS,EAAE;AACT,oBAAA,eAAe,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AACtE,oBAAA,SAAS,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AAC1D,oBAAA,oBAAoB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,SAAS,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,oBAAoB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI;AACjF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;KACF,CAAC;AACJ;;ACnGA,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;AAEhD,MAAM,WAAW,CAAA;AASf,IAAA,WAAA,CAAY,OAA+B,EAAA;QARnC,IAAK,CAAA,KAAA,GAAkB,IAAI,CAAC;QAE5B,IAAU,CAAA,UAAA,GAAsB,IAAI,CAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAwC,IAAI,GAAG,EAAE,CAAC;QAChE,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QAEnC,IAAU,CAAA,UAAA,GAAkB,IAAI,CAAC;QAGvC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE;AACxD,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;SAC5E;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AACnF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAEO,iBAAiB,GAAA;AACvB,QAAA,MAAM,iBAAiB,GAAG,CAAC,MAAK;AAC9B,YAAA,IAAI;AACF,gBAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;aAC1B;YAAC,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC9B;SACF,GAAG,CAAC;AAEL,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;YACtC,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;aACpB;iBAAM;AACL,gBAAA,IAAI,CAAC,UAAU,GAAG,0DAA0D,CAAC;aAC9E;AACH,SAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;YACjB,IAAI,CAAC,UAAU,GAAG,CAAA,uBAAA,EAA0B,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACvG,SAAC,CAAC,CAAC;KACJ;IAEO,iBAAiB,GAAA;QACvB,IAAI,CAAC,SAAS,EAAE;;;;YAId,OAAO;SACR;QAED,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,KAAK,KAAI;;YACjD,IAAI,CAAA,MAAA,KAAK,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,MAAK,eAAe,IAAI,CAAA,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAK,IAAI,EAAE;AACtE,gBAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACvC;iBAAM,IAAI,CAAA,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,0CAAE,IAAI,MAAK,uBAAuB,EAAE;;gBAEvD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACtC,oBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;AACnC,oBAAA,IAAI,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,aAAa,MAAK,KAAK,CAAC,MAAM,EAAE;AAC1C,wBAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;qBACrC;AACH,iBAAC,CAAC,CAAC;aACJ;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO;SACR;AAED,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAE9B,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAEzC,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,KAAI;AACjD,oBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;oBACnC,IAAI,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,aAAa,EAAE;AACzB,wBAAA,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;AAC/B,4BAAA,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,IAAI,CAAC,KAAK;yBAClB,EAAE,GAAG,CAAC,CAAC;qBACT;AACH,iBAAC,CAAC,CAAC;aACJ;iBAAM;AACL,gBAAA,IAAI,CAAC,UAAU,GAAG,4DAA4D,CAAC;AAC/E,gBAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACjD;SACF;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,UAAU,GAAG,CAAA,yBAAA,EAA4B,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACvG,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACjD;gBAAS;AACR,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;SAChC;KACF;AAEO,IAAA,yBAAyB,CAAC,YAAoB,EAAA;QACpD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,MAAM,aAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,aAAa,EAAE;AACzB,gBAAA,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC;AAC/B,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,KAAK,EAAE,YAAY;iBACpB,EAAE,GAAG,CAAC,CAAC;aACT;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,MAAM,CAAC,IAAY,EAAE,OAAa,EAAA;AACvC,QAAA,IAAI,OAA2B,CAAC;QAEhC,QAAQ,IAAI;AACV,YAAA,KAAK,YAAY;gBACf,OAAO,GAAG,IAAI,+BAA+B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC7D,MAAM;AACR,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAA,CAAE,CAAC,CAAC;SACpD;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAEtD,QAAA,OAAO,OAAO,CAAC;KAChB;AAEM,IAAA,qBAAqB,CAAC,OAA2B,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAK;AACzB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,EAAC,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,aAAa,CAAA,EAAE;gBAC1B,OAAO;aACR;YAED,UAAU,CAAC,MAAK;;AACd,gBAAA,IAAI;AACF,oBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;oBAC3C,IAAI,CAAC,aAAa,EAAE;wBAClB,OAAO;qBACR;AAED,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,aAAa,CAAC,WAAW,CAAC;AACxB,4BAAA,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,IAAI,CAAC,UAAU;yBACvB,EAAE,GAAG,CAAC,CAAC;qBACT;AAAM,yBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;wBACrB,aAAa,CAAC,WAAW,CAAC;AACxB,4BAAA,IAAI,EAAE,YAAY;4BAClB,KAAK,EAAE,IAAI,CAAC,KAAK;yBAClB,EAAE,GAAG,CAAC,CAAC;qBACT;yBAAM;wBACL,aAAa,CAAC,WAAW,CAAC;AACxB,4BAAA,IAAI,EAAE,YAAY;AAClB,4BAAA,KAAK,EAAE,oBAAoB;yBAC5B,EAAE,GAAG,CAAC,CAAC;qBACT;;oBAGD,aAAa,CAAC,WAAW,CAAC;AACxB,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,WAAW,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;qBACnC,EAAE,GAAG,CAAC,CAAC;iBACT;gBAAC,OAAO,KAAK,EAAE;iBACf;aACF,EAAE,GAAG,CAAC,CAAC;AACV,SAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAI;AACjB,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,aAAa,CAAC;YAC5C,IAAI,aAAa,EAAE;gBACjB,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI;wBACF,aAAa,CAAC,WAAW,CAAC;AACxB,4BAAA,IAAI,EAAE,YAAY;AAClB,4BAAA,KAAK,EAAE,CAAgC,6BAAA,EAAA,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAE,CAAA;yBAChG,EAAE,GAAG,CAAC,CAAC;qBACT;AAAC,oBAAA,OAAA,EAAA,EAAM;qBACP;iBACF,EAAE,GAAG,CAAC,CAAC;aACT;AACH,SAAC,CAAC,CAAC;KACJ;AACF,CAAA;AAEK,SAAU,eAAe,CAAC,OAA+B,EAAA;AAC7D,IAAA,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC;;ACzLO,MAAM,OAAO,GAAG;;;;"}
package/dist/index.js CHANGED
@@ -269,6 +269,7 @@ class Hyperswitch {
269
269
  return;
270
270
  }
271
271
  setTimeout(() => {
272
+ var _a;
272
273
  try {
273
274
  const contentWindow = iframe.contentWindow;
274
275
  if (!contentWindow) {
@@ -292,13 +293,11 @@ class Hyperswitch {
292
293
  error: 'No token available'
293
294
  }, '*');
294
295
  }
295
- // Send init_config (if available) as a separate message
296
- if (this.initConfig) {
297
- contentWindow.postMessage({
298
- type: 'INIT_CONFIG',
299
- init_config: this.initConfig
300
- }, '*');
301
- }
296
+ // Always send init_config. If merchant doesn't provide it, send an empty object.
297
+ contentWindow.postMessage({
298
+ type: 'INIT_CONFIG',
299
+ init_config: (_a = this.initConfig) !== null && _a !== void 0 ? _a : {}
300
+ }, '*');
302
301
  }
303
302
  catch (error) {
304
303
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/init-config.ts","../src/hyperswitch.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Send init_config (if available) as a separate message\n if (this.initConfig) {\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig\n }, '*');\n }\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/init-config.ts","../src/hyperswitch.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Always send init_config. If merchant doesn't provide it, send an empty object.\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig ?? {}\n }, '*');\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser"],"mappings":"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"}
package/dist/index.min.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Hyperswitch={})}(this,function(e){"use strict";const t="undefined"!=typeof window;class n{constructor(e,n){this.instance=e,this.options=n||{},this._internalId=`hyper-el-${Math.random().toString(36).substring(7)}`,this.boundMessageHandler=null,t&&(this.element=document.createElement("div"),this.iframe=document.createElement("iframe"),this.boundMessageHandler=this.handleMessage.bind(this),this.setupElement(),this.setupIframe(),window.addEventListener("message",this.boundMessageHandler))}setupElement(){t&&(this.element.className=`hyperswitch-element ${this.options.className||""}`.trim(),this.element.dataset.hyperswitchElement=this.getElementType(),Object.assign(this.element.style,Object.assign({width:this.options.width||"100%",height:this.options.height||"500px",overflow:"hidden"},this.options.style||{})))}setupIframe(){t&&(this.iframe.src=this.getIframeSrc(),this.iframe.style.border="none",this.iframe.style.width="100%",this.iframe.style.height="100%",this.iframe.title=`Hyperswitch ${this.getElementType()}`,this.iframe.setAttribute("allow","clipboard-read; clipboard-write; clipboard-sanitized-write"),this.iframe.setAttribute("sandbox","allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads"),this.element.appendChild(this.iframe))}handleMessage(e){var n;if(t&&(this.options.onMessage&&this.options.onMessage(e.data),"EMBEDDED_COMPONENT_RESIZE"===(null===(n=e.data)||void 0===n?void 0:n.type))){const t=e.data.height;(e.data.component||"")===this.getElementType()&&"number"==typeof t&&t>0&&(this.element.style.height=`${t}px`,this.options.onResize&&this.options.onResize({width:this.element.clientWidth,height:t}))}}mount(e){if(!t)throw new Error("HyperswitchElement.mount can only be called in a browser environment");const n="string"==typeof e?document.querySelector(e):e;if(!n)throw new Error(`Invalid mount point: ${e}`);return n.appendChild(this.element),this}destroy(){t&&(this.boundMessageHandler&&window.removeEventListener("message",this.boundMessageHandler),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element))}getIframe(){return this.iframe}}class o extends n{constructor(e,t){super(e,t)}getElementType(){return"connectors"}getIframeSrc(){return`${this.options.url||"http://localhost:9000"}/embedded/connectors`}}const i="undefined"!=typeof window;class s{constructor(e){if(this.token=null,this.initConfig=null,this.activeElements=new Map,this.isRefetchingToken=!1,this.tokenError=null,!e||"function"!=typeof e.fetchToken)throw new Error("loadHyperswitch requires a fetchToken callback function");this.fetchToken=e.fetchToken,this.initConfig=e.initConfig?function(e){var t,n,o,i,s,r,l,a,d,h,c,u,m,f,p,g,v,E,y,w;const k=e||{};return{settings:{colors:{primary:null!==(t=k.primaryColor)&&void 0!==t?t:null,secondary:null,background:null!==(n=k.backgroundColor)&&void 0!==n?n:null},sidebar:null,typography:null,buttons:{primary:{backgroundColor:null!==(s=null===(i=null===(o=k.buttons)||void 0===o?void 0:o.primary)||void 0===i?void 0:i.backgroundColor)&&void 0!==s?s:null,textColor:null!==(a=null===(l=null===(r=k.buttons)||void 0===r?void 0:r.primary)||void 0===l?void 0:l.textColor)&&void 0!==a?a:null,hoverBackgroundColor:null!==(c=null===(h=null===(d=k.buttons)||void 0===d?void 0:d.primary)||void 0===h?void 0:h.hoverBackgroundColor)&&void 0!==c?c:null},secondary:{backgroundColor:null!==(f=null===(m=null===(u=k.buttons)||void 0===u?void 0:u.secondary)||void 0===m?void 0:m.backgroundColor)&&void 0!==f?f:null,textColor:null!==(v=null===(g=null===(p=k.buttons)||void 0===p?void 0:p.secondary)||void 0===g?void 0:g.textColor)&&void 0!==v?v:null,hoverBackgroundColor:null!==(w=null===(y=null===(E=k.buttons)||void 0===E?void 0:E.secondary)||void 0===y?void 0:y.hoverBackgroundColor)&&void 0!==w?w:null}},borders:null,spacing:null},urls:{faviconUrl:null,logoUrl:null}}}(e.initConfig):null,this.initPromise=this.fetchInitialToken(),this.listenForMessages()}fetchInitialToken(){return(()=>{try{return this.fetchToken()}catch(e){return Promise.reject(e)}})().then(e=>{e?this.token=e:this.tokenError="Failed to fetch token: Token returned empty or undefined"}).catch(e=>{this.tokenError=`Failed to fetch token: ${e instanceof Error?e.message:String(e)}`})}listenForMessages(){i&&window.addEventListener("message",async e=>{var t,n,o;"TOKEN_EXPIRED"===(null===(t=e.data)||void 0===t?void 0:t.type)&&!0===(null===(n=e.data)||void 0===n?void 0:n.value)?await this.refetchAndBroadcastToken():"EMBEDDED_IFRAME_READY"===(null===(o=e.data)||void 0===o?void 0:o.type)&&this.activeElements.forEach(t=>{const n=t.getIframe();(null==n?void 0:n.contentWindow)===e.source&&this.onElementIframeLoaded(t)})})}async refetchAndBroadcastToken(){if(!this.isRefetchingToken){this.isRefetchingToken=!0;try{const e=await this.fetchToken();e?(this.token=e,this.tokenError=null,this.activeElements.forEach((e,t)=>{const n=e.getIframe();(null==n?void 0:n.contentWindow)&&n.contentWindow.postMessage({type:"AUTH_TOKEN",token:this.token},"*")})):(this.tokenError="Failed to refetch token: Token returned empty or undefined",this.sendErrorToActiveElements(this.tokenError))}catch(e){this.tokenError=`Failed to refetch token: ${e instanceof Error?e.message:String(e)}`,this.sendErrorToActiveElements(this.tokenError)}finally{this.isRefetchingToken=!1}}}sendErrorToActiveElements(e){this.activeElements.forEach(t=>{const n=t.getIframe();(null==n?void 0:n.contentWindow)&&n.contentWindow.postMessage({type:"AUTH_ERROR",error:e},"*")})}create(e,t){let n;if("connectors"!==e)throw new Error(`Unknown element type: ${e}`);return n=new o(this,t),this.activeElements.set(n._internalId,n),n}onElementIframeLoaded(e){this.initPromise.then(()=>{const t=e.getIframe();(null==t?void 0:t.contentWindow)&&setTimeout(()=>{try{const e=t.contentWindow;if(!e)return;this.tokenError?e.postMessage({type:"AUTH_ERROR",error:this.tokenError},"*"):this.token?e.postMessage({type:"AUTH_TOKEN",token:this.token},"*"):e.postMessage({type:"AUTH_ERROR",error:"No token available"},"*"),this.initConfig&&e.postMessage({type:"INIT_CONFIG",init_config:this.initConfig},"*")}catch(e){}},100)}).catch(t=>{const n=e.getIframe(),o=null==n?void 0:n.contentWindow;o&&setTimeout(()=>{try{o.postMessage({type:"AUTH_ERROR",error:`Token initialization failed: ${t instanceof Error?t.message:String(t)}`},"*")}catch(e){}},100)})}}e.ConnectorConfigurationComponent=o,e.Hyperswitch=s,e.HyperswitchElement=n,e.VERSION="1.0.0",e.loadHyperswitch=function(e){return new s(e)},Object.defineProperty(e,"__esModule",{value:!0})});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Hyperswitch={})}(this,function(e){"use strict";const t="undefined"!=typeof window;class n{constructor(e,n){this.instance=e,this.options=n||{},this._internalId=`hyper-el-${Math.random().toString(36).substring(7)}`,this.boundMessageHandler=null,t&&(this.element=document.createElement("div"),this.iframe=document.createElement("iframe"),this.boundMessageHandler=this.handleMessage.bind(this),this.setupElement(),this.setupIframe(),window.addEventListener("message",this.boundMessageHandler))}setupElement(){t&&(this.element.className=`hyperswitch-element ${this.options.className||""}`.trim(),this.element.dataset.hyperswitchElement=this.getElementType(),Object.assign(this.element.style,Object.assign({width:this.options.width||"100%",height:this.options.height||"500px",overflow:"hidden"},this.options.style||{})))}setupIframe(){t&&(this.iframe.src=this.getIframeSrc(),this.iframe.style.border="none",this.iframe.style.width="100%",this.iframe.style.height="100%",this.iframe.title=`Hyperswitch ${this.getElementType()}`,this.iframe.setAttribute("allow","clipboard-read; clipboard-write; clipboard-sanitized-write"),this.iframe.setAttribute("sandbox","allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads"),this.element.appendChild(this.iframe))}handleMessage(e){var n;if(t&&(this.options.onMessage&&this.options.onMessage(e.data),"EMBEDDED_COMPONENT_RESIZE"===(null===(n=e.data)||void 0===n?void 0:n.type))){const t=e.data.height;(e.data.component||"")===this.getElementType()&&"number"==typeof t&&t>0&&(this.element.style.height=`${t}px`,this.options.onResize&&this.options.onResize({width:this.element.clientWidth,height:t}))}}mount(e){if(!t)throw new Error("HyperswitchElement.mount can only be called in a browser environment");const n="string"==typeof e?document.querySelector(e):e;if(!n)throw new Error(`Invalid mount point: ${e}`);return n.appendChild(this.element),this}destroy(){t&&(this.boundMessageHandler&&window.removeEventListener("message",this.boundMessageHandler),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element))}getIframe(){return this.iframe}}class o extends n{constructor(e,t){super(e,t)}getElementType(){return"connectors"}getIframeSrc(){return`${this.options.url||"http://localhost:9000"}/embedded/connectors`}}const i="undefined"!=typeof window;class s{constructor(e){if(this.token=null,this.initConfig=null,this.activeElements=new Map,this.isRefetchingToken=!1,this.tokenError=null,!e||"function"!=typeof e.fetchToken)throw new Error("loadHyperswitch requires a fetchToken callback function");this.fetchToken=e.fetchToken,this.initConfig=e.initConfig?function(e){var t,n,o,i,s,r,l,a,d,h,c,u,m,f,p,g,v,E,y,w;const k=e||{};return{settings:{colors:{primary:null!==(t=k.primaryColor)&&void 0!==t?t:null,secondary:null,background:null!==(n=k.backgroundColor)&&void 0!==n?n:null},sidebar:null,typography:null,buttons:{primary:{backgroundColor:null!==(s=null===(i=null===(o=k.buttons)||void 0===o?void 0:o.primary)||void 0===i?void 0:i.backgroundColor)&&void 0!==s?s:null,textColor:null!==(a=null===(l=null===(r=k.buttons)||void 0===r?void 0:r.primary)||void 0===l?void 0:l.textColor)&&void 0!==a?a:null,hoverBackgroundColor:null!==(c=null===(h=null===(d=k.buttons)||void 0===d?void 0:d.primary)||void 0===h?void 0:h.hoverBackgroundColor)&&void 0!==c?c:null},secondary:{backgroundColor:null!==(f=null===(m=null===(u=k.buttons)||void 0===u?void 0:u.secondary)||void 0===m?void 0:m.backgroundColor)&&void 0!==f?f:null,textColor:null!==(v=null===(g=null===(p=k.buttons)||void 0===p?void 0:p.secondary)||void 0===g?void 0:g.textColor)&&void 0!==v?v:null,hoverBackgroundColor:null!==(w=null===(y=null===(E=k.buttons)||void 0===E?void 0:E.secondary)||void 0===y?void 0:y.hoverBackgroundColor)&&void 0!==w?w:null}},borders:null,spacing:null},urls:{faviconUrl:null,logoUrl:null}}}(e.initConfig):null,this.initPromise=this.fetchInitialToken(),this.listenForMessages()}fetchInitialToken(){return(()=>{try{return this.fetchToken()}catch(e){return Promise.reject(e)}})().then(e=>{e?this.token=e:this.tokenError="Failed to fetch token: Token returned empty or undefined"}).catch(e=>{this.tokenError=`Failed to fetch token: ${e instanceof Error?e.message:String(e)}`})}listenForMessages(){i&&window.addEventListener("message",async e=>{var t,n,o;"TOKEN_EXPIRED"===(null===(t=e.data)||void 0===t?void 0:t.type)&&!0===(null===(n=e.data)||void 0===n?void 0:n.value)?await this.refetchAndBroadcastToken():"EMBEDDED_IFRAME_READY"===(null===(o=e.data)||void 0===o?void 0:o.type)&&this.activeElements.forEach(t=>{const n=t.getIframe();(null==n?void 0:n.contentWindow)===e.source&&this.onElementIframeLoaded(t)})})}async refetchAndBroadcastToken(){if(!this.isRefetchingToken){this.isRefetchingToken=!0;try{const e=await this.fetchToken();e?(this.token=e,this.tokenError=null,this.activeElements.forEach((e,t)=>{const n=e.getIframe();(null==n?void 0:n.contentWindow)&&n.contentWindow.postMessage({type:"AUTH_TOKEN",token:this.token},"*")})):(this.tokenError="Failed to refetch token: Token returned empty or undefined",this.sendErrorToActiveElements(this.tokenError))}catch(e){this.tokenError=`Failed to refetch token: ${e instanceof Error?e.message:String(e)}`,this.sendErrorToActiveElements(this.tokenError)}finally{this.isRefetchingToken=!1}}}sendErrorToActiveElements(e){this.activeElements.forEach(t=>{const n=t.getIframe();(null==n?void 0:n.contentWindow)&&n.contentWindow.postMessage({type:"AUTH_ERROR",error:e},"*")})}create(e,t){let n;if("connectors"!==e)throw new Error(`Unknown element type: ${e}`);return n=new o(this,t),this.activeElements.set(n._internalId,n),n}onElementIframeLoaded(e){this.initPromise.then(()=>{const t=e.getIframe();(null==t?void 0:t.contentWindow)&&setTimeout(()=>{var e;try{const n=t.contentWindow;if(!n)return;this.tokenError?n.postMessage({type:"AUTH_ERROR",error:this.tokenError},"*"):this.token?n.postMessage({type:"AUTH_TOKEN",token:this.token},"*"):n.postMessage({type:"AUTH_ERROR",error:"No token available"},"*"),n.postMessage({type:"INIT_CONFIG",init_config:null!==(e=this.initConfig)&&void 0!==e?e:{}},"*")}catch(e){}},100)}).catch(t=>{const n=e.getIframe(),o=null==n?void 0:n.contentWindow;o&&setTimeout(()=>{try{o.postMessage({type:"AUTH_ERROR",error:`Token initialization failed: ${t instanceof Error?t.message:String(t)}`},"*")}catch(e){}},100)})}}e.ConnectorConfigurationComponent=o,e.Hyperswitch=s,e.HyperswitchElement=n,e.VERSION="1.0.0",e.loadHyperswitch=function(e){return new s(e)},Object.defineProperty(e,"__esModule",{value:!0})});
2
2
  //# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/hyperswitch.ts","../src/init-config.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Send init_config (if available) as a separate message\n if (this.initConfig) {\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig\n }, '*');\n }\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser","window","HyperswitchElement","constructor","instance","options","this","_internalId","Math","random","toString","substring","boundMessageHandler","element","document","createElement","iframe","handleMessage","bind","setupElement","setupIframe","addEventListener","className","trim","dataset","hyperswitchElement","getElementType","Object","assign","style","width","height","overflow","src","getIframeSrc","border","title","setAttribute","appendChild","event","onMessage","data","_a","type","newHeight","component","onResize","clientWidth","mount","domNode","Error","parent","querySelector","destroy","removeEventListener","parentNode","removeChild","getIframe","ConnectorConfigurationComponent","super","url","Hyperswitch","token","initConfig","activeElements","Map","isRefetchingToken","tokenError","fetchToken","merchantTheme","safeTheme","settings","colors","primary","primaryColor","secondary","background","_b","backgroundColor","sidebar","typography","buttons","_e","_d","_c","textColor","_h","_g","_f","hoverBackgroundColor","_l","_k","_j","_p","_o","_m","_s","_r","_q","_v","_u","_t","borders","spacing","urls","faviconUrl","logoUrl","buildInitConfig","initPromise","fetchInitialToken","listenForMessages","error","Promise","reject","then","catch","message","String","async","value","refetchAndBroadcastToken","forEach","contentWindow","source","onElementIframeLoaded","newToken","elementId","postMessage","sendErrorToActiveElements","errorMessage","create","set","setTimeout","init_config"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/hyperswitch.ts","../src/init-config.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Always send init_config. If merchant doesn't provide it, send an empty object.\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig ?? {}\n }, '*');\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser","window","HyperswitchElement","constructor","instance","options","this","_internalId","Math","random","toString","substring","boundMessageHandler","element","document","createElement","iframe","handleMessage","bind","setupElement","setupIframe","addEventListener","className","trim","dataset","hyperswitchElement","getElementType","Object","assign","style","width","height","overflow","src","getIframeSrc","border","title","setAttribute","appendChild","event","onMessage","data","_a","type","newHeight","component","onResize","clientWidth","mount","domNode","Error","parent","querySelector","destroy","removeEventListener","parentNode","removeChild","getIframe","ConnectorConfigurationComponent","super","url","Hyperswitch","token","initConfig","activeElements","Map","isRefetchingToken","tokenError","fetchToken","merchantTheme","safeTheme","settings","colors","primary","primaryColor","secondary","background","_b","backgroundColor","sidebar","typography","buttons","_e","_d","_c","textColor","_h","_g","_f","hoverBackgroundColor","_l","_k","_j","_p","_o","_m","_s","_r","_q","_v","_u","_t","borders","spacing","urls","faviconUrl","logoUrl","buildInitConfig","initPromise","fetchInitialToken","listenForMessages","error","Promise","reject","then","catch","message","String","async","value","refetchAndBroadcastToken","forEach","contentWindow","source","onElementIframeLoaded","newToken","elementId","postMessage","sendErrorToActiveElements","errorMessage","create","set","setTimeout","init_config"],"mappings":"kPAGA,MAAMA,EAA8B,oBAAXC,OAEzB,MAAeC,EAQb,WAAAC,CAAYC,EAAuBC,GACjCC,KAAKF,SAAWA,EAChBE,KAAKD,QAAUA,GAAW,GAC1BC,KAAKC,YAAc,YAAYC,KAAKC,SAASC,SAAS,IAAIC,UAAU,KACpEL,KAAKM,oBAAsB,KAItBZ,IAILM,KAAKO,QAAUC,SAASC,cAAc,OACtCT,KAAKU,OAASF,SAASC,cAAc,UACrCT,KAAKM,oBAAsBN,KAAKW,cAAcC,KAAKZ,MAEnDA,KAAKa,eACLb,KAAKc,cACLnB,OAAOoB,iBAAiB,UAAWf,KAAKM,qBACzC,CAEO,YAAAO,GACDnB,IAILM,KAAKO,QAAQS,UAAY,uBAAuBhB,KAAKD,QAAQiB,WAAa,KAAKC,OAC/EjB,KAAKO,QAAQW,QAAQC,mBAAqBnB,KAAKoB,iBAE/CC,OAAOC,OAAOtB,KAAKO,QAAQgB,MAAKF,OAAAC,OAAA,CAC9BE,MAAOxB,KAAKD,QAAQyB,OAAS,OAC7BC,OAAQzB,KAAKD,QAAQ0B,QAAU,QAC/BC,SAAU,UACN1B,KAAKD,QAAQwB,OAAS,CAAA,IAE7B,CAEO,WAAAT,GACDpB,IAILM,KAAKU,OAAOiB,IAAM3B,KAAK4B,eACvB5B,KAAKU,OAAOa,MAAMM,OAAS,OAC3B7B,KAAKU,OAAOa,MAAMC,MAAQ,OAC1BxB,KAAKU,OAAOa,MAAME,OAAS,OAC3BzB,KAAKU,OAAOoB,MAAQ,eAAe9B,KAAKoB,mBACxCpB,KAAKU,OAAOqB,aAAa,QAAS,8DAClC/B,KAAKU,OAAOqB,aAAa,UAAW,4GAEpC/B,KAAKO,QAAQyB,YAAYhC,KAAKU,QAC/B,CAEO,aAAAC,CAAcsB,SACpB,GAAKvC,IAIDM,KAAKD,QAAQmC,WACflC,KAAKD,QAAQmC,UAAUD,EAAME,MAGN,uCAArBC,EAAAH,EAAME,2BAAME,OAAsC,CACpD,MAAMC,EAAYL,EAAME,KAAKV,QACJQ,EAAME,KAAKI,WAAa,MAExBvC,KAAKoB,kBAAyC,iBAAdkB,GAA0BA,EAAY,IAC7FtC,KAAKO,QAAQgB,MAAME,OAAS,GAAGa,MAE3BtC,KAAKD,QAAQyC,UACfxC,KAAKD,QAAQyC,SAAS,CACpBhB,MAAOxB,KAAKO,QAAQkC,YACpBhB,OAAQa,IAIf,CACF,CAED,KAAAI,CAAMC,GACJ,IAAKjD,EACH,MAAM,IAAIkD,MAAM,wEAGlB,MAAMC,EAA4B,iBAAZF,EAClBnC,SAASsC,cAAcH,GACvBA,EAEJ,IAAKE,EACH,MAAM,IAAID,MAAM,wBAAwBD,KAI1C,OADAE,EAAOb,YAAYhC,KAAKO,SACjBP,IACR,CAED,OAAA+C,GACOrD,IAGDM,KAAKM,qBACPX,OAAOqD,oBAAoB,UAAWhD,KAAKM,qBAGzCN,KAAKO,SAAWP,KAAKO,QAAQ0C,YAC/BjD,KAAKO,QAAQ0C,WAAWC,YAAYlD,KAAKO,SAE5C,CAKM,SAAA4C,GACL,OAAOnD,KAAKU,MACb,EC3HG,MAAO0C,UAAwCxD,EACnD,WAAAC,CAAYC,EAAuBC,GACjCsD,MAAMvD,EAAUC,EACjB,CAES,cAAAqB,GACR,MAAO,YACR,CAES,YAAAQ,GAER,MAAO,GADS5B,KAAKD,QAAQuD,KAAO,6CAErC,ECXH,MAAM5D,EAA8B,oBAAXC,OAEzB,MAAM4D,EASJ,WAAA1D,CAAYE,GACV,GATMC,KAAKwD,MAAkB,KAEvBxD,KAAUyD,WAAsB,KAChCzD,KAAA0D,eAAsD,IAAIC,IAC1D3D,KAAiB4D,mBAAY,EAE7B5D,KAAU6D,WAAkB,MAG7B9D,GAAyC,mBAAvBA,EAAQ+D,WAC7B,MAAM,IAAIlB,MAAM,2DAGlB5C,KAAK8D,WAAa/D,EAAQ+D,WACzB9D,KAAKyD,WAAa1D,EAAQ0D,WCkDzB,SAA0BM,+CAC9B,MAAMC,EAAYD,GAAiB,GAEnC,MAAO,CACLE,SAAU,CACRC,OAAQ,CACNC,gBAAS/B,EAAA4B,EAAUI,4BAAgB,KACnCC,UAAW,KACXC,mBAAYC,EAAAP,EAAUQ,+BAAmB,MAE3CC,QAAS,KACTC,WAAY,KACZC,QAAS,CACPR,QAAS,CACPK,gBAA4D,QAA3CI,EAA0B,QAA1BC,EAAiB,QAAjBC,EAAAd,EAAUW,eAAO,IAAAG,OAAA,EAAAA,EAAEX,eAAO,IAAAU,OAAA,EAAAA,EAAEL,uBAAe,IAAAI,EAAAA,EAAI,KAChEG,UAAgD,QAArCC,EAA0B,QAA1BC,EAAiB,QAAjBC,EAAAlB,EAAUW,eAAO,IAAAO,OAAA,EAAAA,EAAEf,eAAO,IAAAc,OAAA,EAAAA,EAAEF,iBAAS,IAAAC,EAAAA,EAAI,KACpDG,qBAAsE,QAAhDC,EAA0B,QAA1BC,EAAiB,QAAjBC,EAAAtB,EAAUW,eAAO,IAAAW,OAAA,EAAAA,EAAEnB,eAAO,IAAAkB,OAAA,EAAAA,EAAEF,4BAAoB,IAAAC,EAAAA,EAAI,MAE5Ef,UAAW,CACTG,gBAA8D,QAA7Ce,EAA4B,QAA5BC,EAAiB,QAAjBC,EAAAzB,EAAUW,eAAO,IAAAc,OAAA,EAAAA,EAAEpB,iBAAS,IAAAmB,OAAA,EAAAA,EAAEhB,uBAAe,IAAAe,EAAAA,EAAI,KAClER,UAAkD,QAAvCW,EAA4B,QAA5BC,EAAiB,QAAjBC,EAAA5B,EAAUW,eAAO,IAAAiB,OAAA,EAAAA,EAAEvB,iBAAS,IAAAsB,OAAA,EAAAA,EAAEZ,iBAAS,IAAAW,EAAAA,EAAI,KACtDP,qBAAwE,QAAlDU,EAA4B,QAA5BC,EAAiB,QAAjBC,EAAA/B,EAAUW,eAAO,IAAAoB,OAAA,EAAAA,EAAE1B,iBAAS,IAAAyB,OAAA,EAAAA,EAAEX,4BAAoB,IAAAU,EAAAA,EAAI,OAGhFG,QAAS,KACTC,QAAS,MAEXC,KAAM,CACJC,WAAY,KACZC,QAAS,MAGf,CDlF4CC,CAAgBtG,EAAQ0D,YAAc,KAC9EzD,KAAKsG,YAActG,KAAKuG,oBACxBvG,KAAKwG,mBACN,CAEO,iBAAAD,GASN,MAR0B,MACxB,IACE,OAAOvG,KAAK8D,YACb,CAAC,MAAO2C,GACP,OAAOC,QAAQC,OAAOF,EACvB,CACF,EANyB,GAQDG,KAAMpD,IACzBA,EACFxD,KAAKwD,MAAQA,EAEbxD,KAAK6D,WAAa,6DAEnBgD,MAAOJ,IACRzG,KAAK6D,WAAa,0BAA0B4C,aAAiB7D,MAAQ6D,EAAMK,QAAUC,OAAON,MAE/F,CAEO,iBAAAD,GACD9G,GAOLC,OAAOoB,iBAAiB,UAAWiG,MAAO/E,cACf,mBAAT,UAAZA,EAAME,YAAM,IAAAC,OAAA,EAAAA,EAAAC,QAAkD,KAAZ,QAAVkC,EAAAtC,EAAME,YAAI,IAAAoC,OAAA,EAAAA,EAAE0C,aAChDjH,KAAKkH,2BACmB,mCAArBpC,EAAA7C,EAAME,2BAAME,OAErBrC,KAAK0D,eAAeyD,QAAS5G,IAC3B,MAAMG,EAASH,EAAQ4C,aACnBzC,aAAA,EAAAA,EAAQ0G,iBAAkBnF,EAAMoF,QAClCrH,KAAKsH,sBAAsB/G,MAKpC,CAEO,8BAAM2G,GACZ,IAAIlH,KAAK4D,kBAAT,CAIA5D,KAAK4D,mBAAoB,EAEzB,IACE,MAAM2D,QAAiBvH,KAAK8D,aAExByD,GACFvH,KAAKwD,MAAQ+D,EACbvH,KAAK6D,WAAa,KAClB7D,KAAK0D,eAAeyD,QAAQ,CAAC5G,EAASiH,KACpC,MAAM9G,EAASH,EAAQ4C,aACnBzC,aAAM,EAANA,EAAQ0G,gBACV1G,EAAO0G,cAAcK,YAAY,CAC/BpF,KAAM,aACNmB,MAAOxD,KAAKwD,OACX,SAIPxD,KAAK6D,WAAa,6DAClB7D,KAAK0H,0BAA0B1H,KAAK6D,YAEvC,CAAC,MAAO4C,GACPzG,KAAK6D,WAAa,4BAA4B4C,aAAiB7D,MAAQ6D,EAAMK,QAAUC,OAAON,KAC9FzG,KAAK0H,0BAA0B1H,KAAK6D,WACrC,CAAS,QACR7D,KAAK4D,mBAAoB,CAC1B,CA5BA,CA6BF,CAEO,yBAAA8D,CAA0BC,GAChC3H,KAAK0D,eAAeyD,QAAS5G,IAC3B,MAAMG,EAASH,EAAQ4C,aACnBzC,aAAM,EAANA,EAAQ0G,gBACV1G,EAAO0G,cAAcK,YAAY,CAC/BpF,KAAM,aACNoE,MAAOkB,GACN,MAGR,CAEM,MAAAC,CAAOvF,EAActC,GAC1B,IAAIQ,EAEJ,GACO,eADC8B,EAKJ,MAAM,IAAIO,MAAM,yBAAyBP,KAK7C,OARI9B,EAAU,IAAI6C,EAAgCpD,KAAMD,GAMxDC,KAAK0D,eAAemE,IAAItH,EAAQN,YAAaM,GAEtCA,CACR,CAEM,qBAAA+G,CAAsB/G,GAC3BP,KAAKsG,YAAYM,KAAK,KACpB,MAAMlG,EAASH,EAAQ4C,aAClBzC,aAAA,EAAAA,EAAQ0G,gBAIbU,WAAW,WACT,IACE,MAAMV,EAAgB1G,EAAO0G,cAC7B,IAAKA,EACH,OAGEpH,KAAK6D,WACPuD,EAAcK,YAAY,CACxBpF,KAAM,aACNoE,MAAOzG,KAAK6D,YACX,KACM7D,KAAKwD,MACd4D,EAAcK,YAAY,CACxBpF,KAAM,aACNmB,MAAOxD,KAAKwD,OACX,KAEH4D,EAAcK,YAAY,CACxBpF,KAAM,aACNoE,MAAO,sBACN,KAILW,EAAcK,YAAY,CACxBpF,KAAM,cACN0F,oBAAa3F,EAAApC,KAAKyD,0BAAc,CAAE,GACjC,IACJ,CAAC,MAAOgD,GACR,GACA,OACFI,MAAOJ,IACR,MAAM/F,EAASH,EAAQ4C,YACjBiE,EAAgB1G,aAAA,EAAAA,EAAQ0G,cAC1BA,GACFU,WAAW,KACT,IACEV,EAAcK,YAAY,CACxBpF,KAAM,aACNoE,MAAO,gCAAgCA,aAAiB7D,MAAQ6D,EAAMK,QAAUC,OAAON,MACtF,IACJ,CAAC,MAAArE,GACD,GACA,MAGR,uFEpLoB,0BFuLjB,SAA0BrC,GAC9B,OAAO,IAAIwD,EAAYxD,EACzB"}
package/dist/index.umd.js CHANGED
@@ -271,6 +271,7 @@
271
271
  return;
272
272
  }
273
273
  setTimeout(() => {
274
+ var _a;
274
275
  try {
275
276
  const contentWindow = iframe.contentWindow;
276
277
  if (!contentWindow) {
@@ -294,13 +295,11 @@
294
295
  error: 'No token available'
295
296
  }, '*');
296
297
  }
297
- // Send init_config (if available) as a separate message
298
- if (this.initConfig) {
299
- contentWindow.postMessage({
300
- type: 'INIT_CONFIG',
301
- init_config: this.initConfig
302
- }, '*');
303
- }
298
+ // Always send init_config. If merchant doesn't provide it, send an empty object.
299
+ contentWindow.postMessage({
300
+ type: 'INIT_CONFIG',
301
+ init_config: (_a = this.initConfig) !== null && _a !== void 0 ? _a : {}
302
+ }, '*');
304
303
  }
305
304
  catch (error) {
306
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/init-config.ts","../src/hyperswitch.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Send init_config (if available) as a separate message\n if (this.initConfig) {\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig\n }, '*');\n }\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/element.ts","../src/connector-configuration.ts","../src/init-config.ts","../src/hyperswitch.ts","../src/index.ts"],"sourcesContent":["import { Hyperswitch } from './hyperswitch';\nimport { ElementOptions } from './types';\n\nconst isBrowser = typeof window !== 'undefined';\n\nabstract class HyperswitchElement {\n protected instance: Hyperswitch;\n protected options: ElementOptions;\n public element!: HTMLElement;\n protected iframe!: HTMLIFrameElement;\n private boundMessageHandler: ((event: MessageEvent) => void) | null;\n public readonly _internalId: string;\n \n constructor(instance: Hyperswitch, options?: ElementOptions) {\n this.instance = instance;\n this.options = options || {};\n this._internalId = `hyper-el-${Math.random().toString(36).substring(7)}`;\n this.boundMessageHandler = null;\n // In SSR / non-browser environments, avoid touching DOM APIs.\n // The React wrapper only creates and mounts elements on the client,\n // so it's safe for server-side usage as long as we no-op here.\n if (!isBrowser) {\n return;\n }\n \n this.element = document.createElement('div');\n this.iframe = document.createElement('iframe');\n this.boundMessageHandler = this.handleMessage.bind(this);\n \n this.setupElement();\n this.setupIframe();\n window.addEventListener('message', this.boundMessageHandler);\n }\n\n private setupElement(): void {\n if (!isBrowser) {\n return;\n }\n\n this.element.className = `hyperswitch-element ${this.options.className || ''}`.trim();\n this.element.dataset.hyperswitchElement = this.getElementType();\n \n Object.assign(this.element.style, {\n width: this.options.width || '100%',\n height: this.options.height || '500px',\n overflow: 'hidden',\n ...(this.options.style || {})\n });\n }\n \n private setupIframe(): void {\n if (!isBrowser) {\n return;\n }\n\n this.iframe.src = this.getIframeSrc();\n this.iframe.style.border = 'none';\n this.iframe.style.width = '100%';\n this.iframe.style.height = '100%';\n this.iframe.title = `Hyperswitch ${this.getElementType()}`;\n this.iframe.setAttribute('allow', 'clipboard-read; clipboard-write; clipboard-sanitized-write');\n this.iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-popups allow-forms allow-modals allow-presentation allow-downloads');\n \n this.element.appendChild(this.iframe);\n }\n \n private handleMessage(event: MessageEvent): void {\n if (!isBrowser) {\n return;\n }\n\n if (this.options.onMessage) {\n this.options.onMessage(event.data);\n }\n \n if (event.data?.type === 'EMBEDDED_COMPONENT_RESIZE') {\n const newHeight = event.data.height;\n const messageComponent = event.data.component || '';\n \n if (messageComponent === this.getElementType() && typeof newHeight === 'number' && newHeight > 0) {\n this.element.style.height = `${newHeight}px`;\n \n if (this.options.onResize) {\n this.options.onResize({\n width: this.element.clientWidth,\n height: newHeight\n });\n }\n }\n }\n }\n \n mount(domNode: string | HTMLElement): HyperswitchElement {\n if (!isBrowser) {\n throw new Error('HyperswitchElement.mount can only be called in a browser environment');\n }\n\n const parent = typeof domNode === 'string' \n ? document.querySelector(domNode) \n : domNode;\n \n if (!parent) {\n throw new Error(`Invalid mount point: ${domNode}`);\n }\n \n parent.appendChild(this.element);\n return this;\n }\n \n destroy(): void {\n if (!isBrowser) {\n return;\n }\n if (this.boundMessageHandler) {\n window.removeEventListener('message', this.boundMessageHandler);\n }\n \n if (this.element && this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n \n protected abstract getElementType(): string;\n protected abstract getIframeSrc(): string;\n\n public getIframe(): HTMLIFrameElement {\n return this.iframe;\n }\n}\n\nexport { HyperswitchElement };\n","import { Hyperswitch } from './hyperswitch';\nimport { HyperswitchElement } from './element';\nimport { ElementOptions } from './types';\n\nexport class ConnectorConfigurationComponent extends HyperswitchElement {\n constructor(instance: Hyperswitch, options?: ElementOptions) {\n super(instance, options);\n }\n \n protected getElementType(): string {\n return 'connectors';\n }\n \n protected getIframeSrc(): string {\n const baseUrl = this.options.url || 'http://localhost:9000';\n return `${baseUrl}/embedded/connectors`;\n }\n}\n","/**\n * Theme configuration received from the merchant.\n * This is the ONLY contract we expect merchants to follow.\n */\nexport type MerchantTheme = {\n /** Primary color */\n primaryColor?: string;\n /** Page background color */\n backgroundColor?: string;\n /** Button configurations */\n buttons?: {\n /** Primary button configuration */\n primary?: {\n /** Primary button background color */\n backgroundColor?: string;\n /** Primary button text color */\n textColor?: string;\n /** Primary button hover background color */\n hoverBackgroundColor?: string;\n };\n /** Secondary button configuration */\n secondary?: {\n /** Secondary button background color */\n backgroundColor?: string;\n /** Secondary button text color */\n textColor?: string;\n /** Secondary button hover background color */\n hoverBackgroundColor?: string;\n };\n };\n};\n\n/**\n * Full init_config payload shape sent to the Control Center.\n * Most fields are null for now; Control Center applies defaults.\n */\nexport type InitConfig = {\n settings: {\n colors: {\n primary: string | null;\n secondary: string | null;\n background: string | null;\n };\n sidebar: null;\n typography: null;\n buttons: {\n primary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n secondary: {\n backgroundColor: string | null;\n textColor: string | null;\n hoverBackgroundColor: string | null;\n };\n };\n borders: null;\n spacing: null;\n };\n urls: {\n faviconUrl: null;\n logoUrl: null;\n };\n};\n\n/**\n * Build the init_config object that Control Center expects\n * from the simple MerchantTheme contract.\n *\n * Any missing value is set to null.\n */\nexport function buildInitConfig(merchantTheme: MerchantTheme | undefined | null): InitConfig {\n const safeTheme = merchantTheme || {};\n\n return {\n settings: {\n colors: {\n primary: safeTheme.primaryColor ?? null,\n secondary: null,\n background: safeTheme.backgroundColor ?? null\n },\n sidebar: null,\n typography: null,\n buttons: {\n primary: {\n backgroundColor: safeTheme.buttons?.primary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.primary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.primary?.hoverBackgroundColor ?? null\n },\n secondary: {\n backgroundColor: safeTheme.buttons?.secondary?.backgroundColor ?? null,\n textColor: safeTheme.buttons?.secondary?.textColor ?? null,\n hoverBackgroundColor: safeTheme.buttons?.secondary?.hoverBackgroundColor ?? null\n }\n },\n borders: null,\n spacing: null\n },\n urls: {\n faviconUrl: null,\n logoUrl: null\n }\n };\n}\n\n\n","import { HyperswitchElement } from './element';\nimport { ConnectorConfigurationComponent } from './connector-configuration';\nimport { HyperswitchInitOptions } from './types';\nimport { buildInitConfig,InitConfig } from './init-config';\n\nconst isBrowser = typeof window !== 'undefined';\n\nclass Hyperswitch {\n private token: string | null = null;\n private fetchToken: () => Promise<string | undefined>;\n private initConfig: InitConfig | null = null;\n private activeElements: Map<string, HyperswitchElement> = new Map();\n private isRefetchingToken: boolean = false;\n private initPromise: Promise<void>;\n private tokenError: string | null = null;\n\n constructor(options: HyperswitchInitOptions) {\n if (!options || typeof options.fetchToken !== 'function') {\n throw new Error('loadHyperswitch requires a fetchToken callback function');\n }\n\n this.fetchToken = options.fetchToken;\n this.initConfig = options.initConfig ? buildInitConfig(options.initConfig) : null;\n this.initPromise = this.fetchInitialToken();\n this.listenForMessages();\n }\n\n private fetchInitialToken(): Promise<void> {\n const eagerTokenPromise = (() => {\n try {\n return this.fetchToken();\n } catch (error) {\n return Promise.reject(error);\n }\n })();\n\n return eagerTokenPromise.then((token) => {\n if (token) {\n this.token = token;\n } else {\n this.tokenError = 'Failed to fetch token: Token returned empty or undefined';\n }\n }).catch((error) => {\n this.tokenError = `Failed to fetch token: ${error instanceof Error ? error.message : String(error)}`;\n });\n } \n\n private listenForMessages(): void {\n if (!isBrowser) {\n // In SSR / non-browser environments we can't listen for postMessage events,\n // but it's still safe to create a Hyperswitch instance (it will become\n // useful on the client where another instance will typically be created).\n return;\n }\n\n window.addEventListener(\"message\", async (event) => {\n if (event.data?.type === \"TOKEN_EXPIRED\" && event.data?.value === true) {\n await this.refetchAndBroadcastToken();\n } else if (event.data?.type === \"EMBEDDED_IFRAME_READY\") {\n // Find the element whose iframe matches the event source\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow === event.source) {\n this.onElementIframeLoaded(element);\n }\n });\n }\n });\n }\n\n private async refetchAndBroadcastToken(): Promise<void> {\n if (this.isRefetchingToken) {\n return;\n }\n \n this.isRefetchingToken = true;\n \n try {\n const newToken = await this.fetchToken();\n \n if (newToken) {\n this.token = newToken;\n this.tokenError = null;\n this.activeElements.forEach((element, elementId) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n }\n });\n } else {\n this.tokenError = 'Failed to refetch token: Token returned empty or undefined';\n this.sendErrorToActiveElements(this.tokenError);\n }\n } catch (error) {\n this.tokenError = `Failed to refetch token: ${error instanceof Error ? error.message : String(error)}`;\n this.sendErrorToActiveElements(this.tokenError);\n } finally {\n this.isRefetchingToken = false;\n }\n }\n\n private sendErrorToActiveElements(errorMessage: string): void {\n this.activeElements.forEach((element) => {\n const iframe = element.getIframe();\n if (iframe?.contentWindow) {\n iframe.contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: errorMessage\n }, '*');\n }\n });\n }\n\n public create(type: string, options?: any): HyperswitchElement {\n let element: HyperswitchElement;\n \n switch (type) {\n case 'connectors':\n element = new ConnectorConfigurationComponent(this, options);\n break;\n default:\n throw new Error(`Unknown element type: ${type}`);\n }\n \n this.activeElements.set(element._internalId, element);\n \n return element;\n }\n\n public onElementIframeLoaded(element: HyperswitchElement): void {\n this.initPromise.then(() => {\n const iframe = element.getIframe();\n if (!iframe?.contentWindow) {\n return;\n }\n \n setTimeout(() => {\n try {\n const contentWindow = iframe.contentWindow;\n if (!contentWindow) {\n return;\n }\n\n if (this.tokenError) {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: this.tokenError\n }, '*');\n } else if (this.token) {\n contentWindow.postMessage({\n type: 'AUTH_TOKEN',\n token: this.token\n }, '*');\n } else {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: 'No token available'\n }, '*');\n }\n\n // Always send init_config. If merchant doesn't provide it, send an empty object.\n contentWindow.postMessage({\n type: 'INIT_CONFIG',\n init_config: this.initConfig ?? {}\n }, '*');\n } catch (error) {\n }\n }, 100);\n }).catch((error) => {\n const iframe = element.getIframe();\n const contentWindow = iframe?.contentWindow;\n if (contentWindow) {\n setTimeout(() => {\n try {\n contentWindow.postMessage({\n type: 'AUTH_ERROR',\n error: `Token initialization failed: ${error instanceof Error ? error.message : String(error)}`\n }, '*');\n } catch {\n }\n }, 100);\n }\n });\n }\n}\n\nexport function loadHyperswitch(options: HyperswitchInitOptions): Hyperswitch {\n return new Hyperswitch(options);\n}\n\nexport { Hyperswitch };\n","export { loadHyperswitch, Hyperswitch } from './hyperswitch';\nexport { HyperswitchElement } from './element';\nexport { ConnectorConfigurationComponent } from './connector-configuration';\nexport type { HyperswitchInitOptions, ElementOptions } from './types';\nexport type { MerchantTheme } from './init-config';\n\nexport const VERSION = '1.0.0';\n"],"names":["isBrowser"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay-tech/hyperswitch-control-center-embed-core",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Hyperswitch Control Center Embed - Core Javascript SDK for embedding components",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.esm.js",