{"version":3,"sources":["../../core/src/message-bus/message-bus.ts","../../core/src/sdk/types/events.ts","../src/shared/utils/wait-for-document-load.ts","../src/shared/modules/iframe-manager/iframe-manager.ts","../src/shared/constants/environments.ts","../src/shared/constants/web-app-urls.ts","../src/shared/utils/get-web-app-url.ts","../src/sdk/index.ts"],"names":["_MessageBus","config","__publicField","messageType","handler","handlers","wrapper","__name","messageData","payload","origin","event","MessageBus","PublicMessage","waitForDocumentLoad","resolve","_IframeManager","container","IframeManager","Environment","WebAppUrls","getWebAppUrl","environment","env","_XpaidWalletSdk","sdkConfig","webAppUrl","iframe","message","level","XpaidWalletSdk"],"mappings":"aAMO,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAMA,EAAN,MAAMA,CAAoC,CAI/C,WAA6BC,CAAAA,CAAAA,CAA0B,CAA1B,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAH7BC,CAAA,CAAA,IAAA,CAAiB,kBAAkB,IAAI,GAAA,CAAA,CACvCA,EAAA,IAAiB,CAAA,oBAAA,CAAA,CAGf,KAAK,kBAAqB,CAAA,IAAA,CAAK,qBAAsB,CAAA,IAAA,CAAK,IAAI,CAC9D,CAAA,MAAA,CAAO,iBAAiB,SAAW,CAAA,IAAA,CAAK,kBAAkB,EAC5D,CAKO,SAAmCC,CAAAA,CAAAA,CAAsBC,EAA2C,CACpG,IAAA,CAAK,gBAAgB,GAAID,CAAAA,CAAW,GACvC,IAAK,CAAA,eAAA,CAAgB,GAAIA,CAAAA,CAAAA,CAAa,IAAI,GAAK,CAAA,CAEhD,KAAK,eAAgB,CAAA,GAAA,CAAIA,CAAW,CAAsC,CAAA,GAAA,CAAIC,CAAO,EACxF,CAKO,WAAqCD,CAAAA,CAAAA,CAAsBC,EAA2C,CAC3G,IAAMC,EAAW,IAAK,CAAA,eAAA,CAAgB,GAAIF,CAAAA,CAAW,EAChDE,CAGLA,GAAAA,CAAAA,CAAS,OAAOD,CAAO,CAAA,CACnBC,EAAS,IAAS,GAAA,CAAA,EACpB,KAAK,eAAgB,CAAA,MAAA,CAAOF,CAAW,CAE3C,EAAA,CAKO,cAAuCA,CAAsBC,CAAAA,CAAAA,CAA2C,CAC7G,IAAME,CAAAA,CAAsCC,CAACC,CAAAA,CAAAA,EAAgB,CAC3D,IAAK,CAAA,WAAA,CAAYL,EAAaG,CAAO,CAAA,CACrCF,EAAQI,CAAW,EACrB,CAH4C,CAAA,SAAA,CAAA,CAI5C,KAAK,SAAUL,CAAAA,CAAAA,CAAaG,CAAO,EACrC,CAKO,QAAiCH,CAAsBM,CAAAA,CAAAA,CAA4B,CACxF,IAAA,IAAWC,KAAU,IAAK,CAAA,MAAA,CAAO,eAC/B,IAAK,CAAA,MAAA,CAAO,QAAQ,WAAY,CAAA,CAAE,YAAAP,CAAa,CAAA,OAAA,CAAAM,CAAQ,CAAGC,CAAAA,CAAM,EAEpE,CAKO,OAAA,EAAgB,CACrB,MAAO,CAAA,mBAAA,CAAoB,SAAW,CAAA,IAAA,CAAK,kBAAkB,CAC7D,CAAA,IAAA,CAAK,gBAAgB,KAAM,GAC7B,CAKQ,qBAAsBC,CAAAA,CAAAA,CAAgC,CAC5D,GAAI,OAAOA,CAAM,CAAA,IAAA,EAAS,UAAYA,CAAM,CAAA,IAAA,GAAS,MAAQ,CAACA,CAAAA,CAAM,IAAK,CAAA,WAAA,CACvE,OAEF,GAAM,CAAE,YAAAR,CAAa,CAAA,OAAA,CAAAM,CAAQ,CAAIE,CAAAA,CAAAA,CAAM,KACjCD,CAASC,CAAAA,CAAAA,CAAM,OAErB,GAAI,CAAC,KAAK,MAAO,CAAA,cAAA,CAAe,SAAS,GAAG,CAAA,EAAK,CAAC,IAAA,CAAK,OAAO,cAAe,CAAA,QAAA,CAASD,CAAM,CAC1F,CAAA,OAEF,IAAML,CAAW,CAAA,IAAA,CAAK,eAAgB,CAAA,GAAA,CAAIF,CAAW,CACjDE,CAAAA,CAAAA,CACFA,EAAS,OAAQD,CAAAA,CAAAA,EAAWA,EAAQK,CAAO,CAAC,CAG5C,CAAA,OAAA,CAAQ,KAAK,CAAmC,gCAAA,EAAA,MAAA,CAAON,CAAW,CAAC,CAAA,MAAA,EAASO,CAAM,CAAE,CAAA,EAExF,CACF,CAAA,CAlFiDH,EAAAP,CAAA,CAAA,YAAA,CAAA,CAA1C,IAAMY,CAANZ,CAAAA,CAAAA,KCHKa,CACVA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,CAAA,QAAW,CAAA,UAAA,CACXA,EAAA,eAAkB,CAAA,iBAAA,CAClBA,EAAA,iBAAoB,CAAA,mBAAA,CACpBA,EAAA,gBAAmB,CAAA,kBAAA,CACnBA,CAAA,CAAA,cAAA,CAAiB,iBALPA,CAAA,CAAA,EAAA,CAAA,EAAA,EAAA,ECHL,SAASC,CAAsB,EAAA,CACpC,OAAI,QAAS,CAAA,UAAA,GAAe,UAAc,EAAA,QAAA,CAAS,aAAe,aACzD,CAAA,OAAA,CAAQ,SAGV,CAAA,IAAI,QAASC,CAAY,EAAA,CAC9B,SAAS,gBAAiB,CAAA,kBAAA,CAAoBA,CAAO,EACvD,CAAC,CACH,CARgBR,CAAAA,CAAAO,EAAA,qBCGT,CAAA,CAAA,IAAME,CAAN,CAAA,MAAMA,CAAc,CAUzB,WAAA,CAAYf,EAA6B,CATzCC,CAAAA,CAAA,KAAO,QACPA,CAAAA,CAAAA,CAAAA,CAAA,IAAQ,CAAA,QAAA,CAAA,CACRA,EAAA,IAAQ,CAAA,qBAAA,CAAkD,CACxD,KAAO,CAAA,MAAA,CACP,OAAQ,MACR,CAAA,EAAA,CAAI,qBACJ,CAAA,KAAA,CAAO,iBACT,CAGE,CAAA,CAAA,IAAA,CAAK,OAASD,EAChB,CAEA,MAAa,IAAmC,EAAA,CAC9C,aAAMa,CAAoB,EAAA,CAE1B,KAAK,YAAa,EAAA,CAClB,KAAK,QAAS,EAAA,CAEP,KAAK,MACd,CAEO,OAAU,EAAA,CACV,KAAK,MAGV,EAAA,IAAA,CAAK,OAAO,MAAO,GACrB,CAEQ,YAAe,EAAA,CACjB,IAAK,CAAA,MAAA,GAGT,KAAK,MAAS,CAAA,QAAA,CAAS,cAAc,QAAQ,CAAA,CAC7C,OAAO,MAAsD,CAAA,IAAA,CAAK,MAAQ,CAAA,CACxE,GAAG,IAAK,CAAA,mBAAA,CACR,GAAG,IAAK,CAAA,MACV,CAAC,CACH,EAAA,CAEQ,UAAW,CACjB,IAAMG,EAAY,QAAS,CAAA,cAAA,CAAe,KAAK,MAAO,CAAA,WAAW,EAEjE,GAAIA,CAAAA,CACFA,CAAU,CAAA,WAAA,CAAY,KAAK,MAAM,CAAA,CAAA,WAG3B,IAAI,KAAA,CAAM,wDAAwD,CAE5E,CACF,CAnD2BV,CAAAA,CAAAA,CAAAS,EAAA,eAApB,CAAA,CAAA,IAAME,EAANF,CCHA,CAAA,IAAKG,OACVA,CAAA,CAAA,SAAA,CAAY,WACZA,CAAAA,CAAAA,CAAA,YAAc,aACdA,CAAAA,CAAAA,CAAA,QAAU,SACVA,CAAAA,CAAAA,CAAA,WAAa,YAJHA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAA,ECEL,EAAA,IAAMC,EAAa,CACvB,SAAA,CAAwB,wBACxB,WAA0B,CAAA,6BAAA,CAC1B,QAAsB,+BACtB,CAAA,UAAA,CAAyB,0BAC5B,CAAA,CCJO,SAASC,CAAaC,CAAAA,CAAAA,CAA2B,CACtD,IAAMC,CAAAA,CAAMD,GAAe,YAC3B,CAAA,OAAOF,CAAWG,CAAAA,CAAG,CACvB,CAHgBhB,CAAAA,CAAAc,EAAA,cCQT,CAAA,CAAA,IAAMG,EAAN,MAAMA,CAAe,CAW1B,OAAc,WAAWC,CAA4B,CAAA,CACnD,GAAI,IAAK,CAAA,aAAA,GAAiB,CACxB,IAAA,CAAK,IAAI,6BAA+B,CAAA,MAAM,EAC9C,MACF,CACA,KAAK,SAAYA,CAAAA,CAAAA,CAEjB,IAAMC,CAAYL,CAAAA,CAAAA,CAAa,IAAK,CAAA,SAAA,EAAW,WAAW,CAE1D,CAAA,IAAA,CAAK,cAAgB,IAAIH,CAAAA,CAAc,CACrC,GAAG,IAAA,CAAK,SACR,CAAA,GAAA,CAAKQ,CACP,CAAC,CAAA,CAED,KAAK,aAAc,CAAA,IAAA,GAChB,IAAMC,CAAAA,CAAAA,EAAW,CAChB,IAAA,CAAK,WAAa,IAAIf,CAAAA,CAAW,CAC/B,MAAQe,CAAAA,CAAAA,CAAO,cACf,cAAgB,CAAA,CAACD,CAAS,CAC5B,CAAC,EAED,IAAK,CAAA,UAAA,EAAY,qBAAkC,IAAM,CACvD,KAAK,UAAY,EAAA,OAAA,CAAA,WAAA,CAAmC,CAClD,SAAA,CAAWD,EAAU,SACrB,CAAA,WAAA,CAAaA,EAAU,WAAe,EAAA,EACxC,CAAC,EACH,CAAC,CAAA,CAED,KAAK,YAAa,CAAA,OAAA,CAAQ,CAAChB,CAASN,CAAAA,CAAAA,GAAgB,CAClD,IAAK,CAAA,UAAA,EAAY,OAAQA,CAAAA,CAAAA,CAAaM,CAAO,EAC/C,CAAC,EAED,IAAK,CAAA,kBAAA,CAAmB,QAAQ,CAACL,CAAAA,CAASD,IAAgB,CACxD,IAAA,CAAK,YAAY,SAAUA,CAAAA,CAAAA,CAAaC,CAAO,EACjD,CAAC,EACH,CAAC,EACL,CAKA,OAAc,SAAgB,CAC5B,GAAI,CAAC,IAAK,CAAA,aAAA,GAAiB,CACzB,IAAA,CAAK,GAAI,CAAA,yBAAA,CAA2B,MAAM,CAC1C,CAAA,MACF,CAEA,IAAK,CAAA,UAAA,EAAY,SACjB,CAAA,IAAA,CAAK,aAAe,EAAA,OAAA,GACpB,IAAK,CAAA,UAAA,CAAa,KAClB,IAAK,CAAA,aAAA,CAAgB,KACvB,CAOA,OAAc,UACZD,CACAC,CAAAA,CAAAA,CACM,CACN,GAAI,CAAC,KAAK,UAAY,CAAA,CACpB,KAAK,kBAAmB,CAAA,GAAA,CAAID,CAAaC,CAAAA,CAAO,EAChD,MACF,CAEA,KAAK,UAAW,CAAA,SAAA,CAAUD,EAAaC,CAAO,EAChD,CAOA,OAAc,YAA2CD,CAAsBC,CAAAA,CAAAA,CAA6D,CAC1I,GAAI,CAAC,KAAK,UAAY,CAAA,CACpB,IAAK,CAAA,kBAAA,CAAmB,OAAOD,CAAW,CAAA,CAC1C,MACF,CAEA,IAAA,CAAK,WAAW,WAAYA,CAAAA,CAAAA,CAAaC,CAAO,EAClD,CAEA,OAAc,OAGZD,CAAAA,CAAAA,CAAAA,GACGM,EAGG,CACN,GAAI,CAAC,IAAK,CAAA,UAAA,CAAY,CAChBA,CAAAA,CAAQ,OAAS,CACnB,CAAA,IAAA,CAAK,aAAa,GAAIN,CAAAA,CAAAA,CAAaM,EAAQ,CAAC,CAAE,CAG9C,CAAA,IAAA,CAAK,aAAa,GAAIN,CAAAA,CAAAA,CAAa,MAAS,CAE9C,CAAA,MACF,CAEIM,CAAQ,CAAA,MAAA,CAAS,CACnB,CAAA,IAAA,CAAK,WAAW,OAAQN,CAAAA,CAAAA,CAAaM,EAAQ,CAAC,CAAE,EAGhD,IAAK,CAAA,UAAA,CAAW,QAAQN,CAAW,EAEvC,CAMA,OAAe,aAAA,EAAyB,CACtC,OAAO,IAAA,CAAK,gBAAkB,IAAQ,EAAA,IAAA,CAAK,UAAe,GAAA,IAC5D,CAOA,OAAe,GAAA,CAAIyB,EAAiBC,CAAkC,CAAA,KAAA,CAAa,CAEjF,OAAQA,CAAAA,CAAK,CAAE,CAAA,CAAA,oBAAA,EAAuBD,CAAO,CAAE,CAAA,EACjD,CACF,CA1I4BrB,CAAAA,CAAAA,CAAAiB,EAAA,gBAC1BtB,CAAAA,CAAAA,CAAAA,CADWsB,CACI,CAAA,eAAA,CAAsC,MACrDtB,CAFWsB,CAAAA,CAAAA,CAEI,aAA6E,IAC5FtB,CAAAA,CAAAA,CAAAA,CAHWsB,EAGI,WACftB,CAAAA,CAAAA,CAAAA,CAJWsB,EAII,cAAe,CAAA,IAAI,KAClCtB,CALWsB,CAAAA,CAAAA,CAKI,qBAAqB,IAAI,GAAA,CAAA,KAL7BM,CAANN,CAAAA","file":"index.cjs","sourcesContent":["import type { MessageBusConfig, MessageHandler, MessageSchema } from './message-bus.types'\n\n/**\n * Strongly typed MessageBus class.\n * @template T - The map of messages and their respective payloads.\n */\nexport class MessageBus<T extends MessageSchema> {\n  private readonly messageHandlers = new Map<keyof T, Set<MessageHandler<unknown>>>()\n  private readonly handleMessageEvent: (event: MessageEvent<unknown>) => void\n\n  constructor(private readonly config: MessageBusConfig) {\n    this.handleMessageEvent = this.handleIncomingMessage.bind(this)\n    window.addEventListener('message', this.handleMessageEvent)\n  }\n\n  /**\n   * Subscribes to a message with a handler.\n   */\n  public subscribe<Message extends keyof T>(messageType: Message, handler: MessageHandler<T[Message]>): void {\n    if (!this.messageHandlers.has(messageType)) {\n      this.messageHandlers.set(messageType, new Set())\n    }\n    (this.messageHandlers.get(messageType) as Set<MessageHandler<T[Message]>>).add(handler)\n  }\n\n  /**\n   * Unsubscribes a handler from a message.\n   */\n  public unsubscribe<Message extends keyof T>(messageType: Message, handler: MessageHandler<T[Message]>): void {\n    const handlers = this.messageHandlers.get(messageType) as Set<MessageHandler<T[Message]>> | undefined\n    if (!handlers)\n      return\n\n    handlers.delete(handler)\n    if (handlers.size === 0) {\n      this.messageHandlers.delete(messageType)\n    }\n  }\n\n  /**\n   * Registers a message handler that triggers only once.\n   */\n  public subscribeOnce<Message extends keyof T>(messageType: Message, handler: MessageHandler<T[Message]>): void {\n    const wrapper: MessageHandler<T[Message]> = (messageData) => {\n      this.unsubscribe(messageType, wrapper)\n      handler(messageData)\n    }\n    this.subscribe(messageType, wrapper)\n  }\n\n  /**\n   * Publishes a message to the target window.\n   */\n  public publish<Message extends keyof T>(messageType: Message, payload?: T[Message]): void {\n    for (const origin of this.config.allowedOrigins) {\n      this.config.target?.postMessage({ messageType, payload }, origin)\n    }\n  }\n\n  /**\n   * Cleans up all message listeners and handlers.\n   */\n  public destroy(): void {\n    window.removeEventListener('message', this.handleMessageEvent)\n    this.messageHandlers.clear()\n  }\n\n  /**\n   * Handles incoming postMessage messages.\n   */\n  private handleIncomingMessage(event: MessageEvent<any>): void {\n    if (typeof event.data !== 'object' || event.data === null || !event.data.messageType)\n      return\n\n    const { messageType, payload } = event.data as { messageType: keyof T, payload: T[keyof T] }\n    const origin = event.origin\n\n    if (!this.config.allowedOrigins.includes('*') && !this.config.allowedOrigins.includes(origin))\n      return\n\n    const handlers = this.messageHandlers.get(messageType) as Set<MessageHandler<T[keyof T]>> | undefined\n    if (handlers) {\n      handlers.forEach(handler => handler(payload))\n    }\n    else {\n      console.warn(`[MessageBus] Unhandled message: ${String(messageType)} from ${origin}`)\n    }\n  }\n}\n","import type { MessageSchema } from '../../message-bus'\nimport type { ColorScheme } from './color-scheme'\n\nexport enum PublicMessage {\n  AppReady = 'AppReady',\n  TransferCreated = 'TransferCreated',\n  TransferConfirmed = 'TransferConfirmed',\n  TransferRejected = 'TransferRejected',\n  SessionExpired = 'SessionExpired',\n}\n\nexport enum InternalMessage {\n  AppConfig = 'AppConfig',\n}\n\nexport interface PublicMessageSchema extends MessageSchema {\n  [PublicMessage.AppReady]: undefined\n  [PublicMessage.TransferCreated]: {\n    referenceId: string\n    amount: number\n    currency: string\n  }\n  [PublicMessage.TransferConfirmed]: undefined\n  [PublicMessage.TransferRejected]: undefined\n}\n\nexport interface InternalMessageSchema extends MessageSchema {\n  [InternalMessage.AppConfig]: {\n    hashToken: string\n    colorScheme: ColorScheme\n  }\n}\n","export function waitForDocumentLoad() {\n  if (document.readyState === 'complete' || document.readyState === 'interactive') {\n    return Promise.resolve()\n  }\n\n  return new Promise((resolve) => {\n    document.addEventListener('DOMContentLoaded', resolve)\n  })\n}\n","import type { IframeManagerConfig } from './iframe-manager.types'\nimport { waitForDocumentLoad } from '../../utils/wait-for-document-load'\n\nexport class IframeManager {\n  public iframe!: HTMLIFrameElement\n  private config: IframeManagerConfig\n  private defaultIframeConfig: Partial<HTMLIFrameElement> = {\n    width: '100%',\n    height: '100%',\n    id: 'xpaid-wallet-iframe',\n    allow: 'clipboard-write',\n  }\n\n  constructor(config: IframeManagerConfig) {\n    this.config = config\n  }\n\n  public async init(): Promise<HTMLIFrameElement> {\n    await waitForDocumentLoad()\n\n    this.createIframe()\n    this.appendTo()\n\n    return this.iframe\n  }\n\n  public destroy() {\n    if (!this.iframe)\n      return\n\n    this.iframe.remove()\n  }\n\n  private createIframe() {\n    if (this.iframe)\n      return\n\n    this.iframe = document.createElement('iframe')\n    Object.assign<HTMLIFrameElement, Partial<HTMLIFrameElement>>(this.iframe, {\n      ...this.defaultIframeConfig,\n      ...this.config,\n    })\n  }\n\n  private appendTo() {\n    const container = document.getElementById(this.config.containerId)\n\n    if (container) {\n      container.appendChild(this.iframe)\n    }\n    else {\n      throw new Error('[Xpaid Wallet SDK] => Please enter a valid containerId')\n    }\n  }\n}\n","export enum Environment {\n  Localhost = 'Localhost',\n  Development = 'Development',\n  Staging = 'Staging',\n  Production = 'Production',\n}\n","import { Environment } from './environments'\n\nexport const WebAppUrls = {\n  [Environment.Localhost]: 'http://localhost:5173',\n  [Environment.Development]: 'https://devwallet.xpaid.org',\n  [Environment.Staging]: 'https://stagewallet.xpaid.org',\n  [Environment.Production]: 'https://wallet.xpaid.org',\n}\n","import { Environment } from '../constants/environments'\nimport { WebAppUrls } from '../constants/web-app-urls'\n\nexport function getWebAppUrl(environment?: Environment) {\n  const env = environment ?? Environment.Production\n  return WebAppUrls[env]\n}\n","import type { InternalMessageSchema, MessageHandler, PublicMessageSchema } from '@xpaid/core'\nimport type { Message, MessageSchema } from '..'\nimport type { SdkConfig } from './sdk.types'\nimport { InternalMessage, MessageBus, PublicMessage } from '@xpaid/core'\n\nimport { IframeManager } from '../shared/modules/iframe-manager'\nimport { getWebAppUrl } from '../shared/utils/get-web-app-url'\n\n/**\n * XpaidWalletSdk - A robust, event-driven SDK for seamless iframe-based wallet interactions.\n */\nexport class XpaidWalletSdk {\n  private static iframeManager: IframeManager | null = null\n  private static messageBus: MessageBus<PublicMessageSchema & InternalMessageSchema> | null = null\n  private static sdkConfig: SdkConfig\n  private static messageQueue = new Map<Message, MessageSchema[Message]>()\n  private static subscriptionsQueue = new Map<Message, MessageHandler<any>>()\n\n  /**\n   * Initializes the SDK, setting up the iframe and message listeners.\n   * @param {SdkConfig} sdkConfig - The SDK configuration object.\n   */\n  public static initialize(sdkConfig: SdkConfig): void {\n    if (this.isInitialized()) {\n      this.log('SDK is already initialized.', 'warn')\n      return\n    }\n    this.sdkConfig = sdkConfig\n\n    const webAppUrl = getWebAppUrl(this.sdkConfig?.environment)\n\n    this.iframeManager = new IframeManager({\n      ...this.sdkConfig,\n      src: webAppUrl,\n    })\n\n    this.iframeManager.init()\n      .then((iframe) => {\n        this.messageBus = new MessageBus({\n          target: iframe.contentWindow!,\n          allowedOrigins: [webAppUrl],\n        })\n\n        this.messageBus?.subscribe(PublicMessage.AppReady, () => {\n          this.messageBus?.publish(InternalMessage.AppConfig, {\n            hashToken: sdkConfig.hashToken,\n            colorScheme: sdkConfig.colorScheme ?? {},\n          })\n        })\n\n        this.messageQueue.forEach((payload, messageType) => {\n          this.messageBus?.publish(messageType, payload)\n        })\n\n        this.subscriptionsQueue.forEach((handler, messageType) => {\n          this.messageBus?.subscribe(messageType, handler)\n        })\n      })\n  }\n\n  /**\n   * Cleans up the SDK, removing message listeners and destroying the iframe.\n   */\n  public static destroy(): void {\n    if (!this.isInitialized()) {\n      this.log('SDK is not initialized.', 'warn')\n      return\n    }\n\n    this.messageBus?.destroy()\n    this.iframeManager?.destroy()\n    this.messageBus = null\n    this.iframeManager = null\n  }\n\n  /**\n   * Subscribes to wallet messages.\n   * @param {PublicMessage} messageType - The message type.\n   * @param {MessageHandler} handler - The callback function to execute on receiving the message.\n   */\n  public static subscribe<Message extends PublicMessage>(\n    messageType: Message,\n    handler: MessageHandler<PublicMessageSchema[Message]>,\n  ): void {\n    if (!this.messageBus) {\n      this.subscriptionsQueue.set(messageType, handler)\n      return\n    }\n\n    this.messageBus.subscribe(messageType, handler)\n  }\n\n  /**\n   * Unsubscribes from wallet messages.\n   * @param {PublicMessage} messageType - The message type to remove.\n   * @param {MessageHandler} handler - The callback function to execute on receiving the message.\n   */\n  public static unsubscribe<Message extends PublicMessage>(messageType: Message, handler: MessageHandler<PublicMessageSchema[Message]>): void {\n    if (!this.messageBus) {\n      this.subscriptionsQueue.delete(messageType)\n      return\n    }\n\n    this.messageBus.unsubscribe(messageType, handler)\n  }\n\n  public static publish<\n    Message extends PublicMessage,\n  >(\n    messageType: Message,\n    ...payload: (PublicMessageSchema & InternalMessageSchema)[Message] extends undefined\n      ? []\n      : [(PublicMessageSchema & InternalMessageSchema)[Message]]\n  ): void {\n    if (!this.messageBus) {\n      if (payload.length > 0) {\n        this.messageQueue.set(messageType, payload[0]!)\n      }\n      else {\n        this.messageQueue.set(messageType, undefined)\n      }\n      return\n    }\n\n    if (payload.length > 0) {\n      this.messageBus.publish(messageType, payload[0]!)\n    }\n    else {\n      this.messageBus.publish(messageType)\n    }\n  }\n\n  /**\n   * Checks if the SDK is initialized.\n   * @returns {boolean} - Whether the SDK is initialized.\n   */\n  private static isInitialized(): boolean {\n    return this.iframeManager !== null && this.messageBus !== null\n  }\n\n  /**\n   * Logs messages with different levels.\n   * @param {string} message - The log message.\n   * @param {'log' | 'warn' | 'error'} level - The log level.\n   */\n  private static log(message: string, level: 'log' | 'warn' | 'error' = 'log'): void {\n    // eslint-disable-next-line no-console\n    console[level](`[XpaidWalletSdk] => ${message}`)\n  }\n}\n"]}