{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/iframe-transport.ts"],"sourcesContent":["// Re-export commonly used protocol types for convenience\n\nexport type {\n  AssetStatus,\n  GetQuoteParams,\n  ListAssetsResponse,\n  ListPaymentMethodsResponse,\n  PaginationInfo,\n  PaymentMethodConfig,\n  PaymentMethodType,\n  PlatformAsset,\n  Quote,\n  SimulateBankTransferOutcome,\n  SimulateBankTransferParams,\n  SimulateSenderBankAccount,\n  StoredCardPaymentMethod,\n  StoredPaymentMethod,\n  Transaction,\n  TransactionWithStages,\n} from '@moonpay/platform-protocol/api';\nexport type { Customer } from '@moonpay/platform-protocol/api/customer';\n// Frame-level types used in event payloads\nexport type { CardResponse } from '@moonpay/platform-protocol/frames/add-card';\nexport type { ApplePayButtonSettings } from '@moonpay/platform-protocol/frames/apple-pay';\nexport type {\n  Cancellation as ChallengeCancellation,\n  CompleteResult as ChallengeCompleteResult,\n} from '@moonpay/platform-protocol/frames/challenge';\nexport type { Connection } from '@moonpay/platform-protocol/models/connection';\nexport { ConnectionStatus } from '@moonpay/platform-protocol/models/connection';\nexport type { Result } from '@moonpay/platform-protocol/result';\n// SDK-facing event types — re-exported under their partner-facing names\nexport type {\n  Event as AddCardEvent,\n  SetupError as SetupAddCardError,\n} from '@moonpay/platform-protocol/sdks/add-card';\nexport type {\n  Event as ApplePayEvent,\n  SetupError as SetupApplePayError,\n} from '@moonpay/platform-protocol/sdks/apple-pay';\nexport type {\n  Event as AuthEvent,\n  SetupError as SetupAuthError,\n} from '@moonpay/platform-protocol/sdks/auth';\nexport type {\n  Event as BuyEvent,\n  SetupError as SetupBuyError,\n} from '@moonpay/platform-protocol/sdks/buy';\nexport type {\n  Event as BuyButtonEvent,\n  SetupError as SetupBuyButtonError,\n} from '@moonpay/platform-protocol/sdks/buy-button';\nexport type {\n  Event as ChallengeEvent,\n  SetupError as SetupChallengeError,\n} from '@moonpay/platform-protocol/sdks/challenge';\nexport type { Event as ConnectEvent } from '@moonpay/platform-protocol/sdks/connect';\nexport type {\n  Event as CustomerExportEvent,\n  SetupError as SetupCustomerExportError,\n} from '@moonpay/platform-protocol/sdks/customer-export';\nexport type {\n  Event as GooglePayEvent,\n  SetupError as SetupGooglePayError,\n} from '@moonpay/platform-protocol/sdks/google-pay';\nexport type {\n  Event as WidgetEvent,\n  SetupError as SetupWidgetError,\n} from '@moonpay/platform-protocol/sdks/widget';\nexport type {\n  Credentials,\n  GetCredentialsError,\n  GetPaymentMethodsParams,\n  ListAssetsParams,\n  ThemeOptions,\n} from '@moonpay/platform-sdk-core';\nexport {\n  type AddCardFrame,\n  type ApplePayFrame,\n  type AuthFrame,\n  type BuyButtonFrame,\n  type BuyFrame,\n  type ChallengeFrame,\n  type Client,\n  type ConnectFrame,\n  type ConnectOptions,\n  type CreateClientOptions,\n  type CustomerExportFrame,\n  createClient,\n  type GetConnectionOptions,\n  type GooglePayFrame,\n  type SetupAddCardOptions,\n  type SetupApplePayOptions,\n  type SetupAuthOptions,\n  type SetupBuyButtonOptions,\n  type SetupBuyOptions,\n  type SetupChallengeOptions,\n  type SetupCustomerExportOptions,\n  type SetupGooglePayOptions,\n  type SetupWidgetOptions,\n  type WidgetFrame,\n} from './client.js';\nexport { IframeTransport } from './iframe-transport.js';\n","import type {\n  GetQuoteParams,\n  ListAssetsResponse,\n  ListPaymentMethodsResponse,\n  PaginationInfo,\n  Quote,\n  SimulateBankTransferParams,\n  Transaction,\n  TransactionWithStages,\n} from '@moonpay/platform-protocol/api';\nimport type { Customer } from '@moonpay/platform-protocol/api/customer';\nimport type {\n  CreateIdentityError,\n  DevPlatformApiError,\n  GetAssetsError,\n  GetCustomerError,\n  GetCustomerUploadUrlError,\n  GetIdentityError,\n  GetIdentityUploadUrlError,\n  GetPaymentMethodsError,\n  GetQuoteError,\n  GetTransactionsError,\n  SimulateBankTransferError,\n  SubmitCustomerFilesError,\n  SubmitCustomerKycError,\n  SubmitIdentityFilesError,\n  UpdateIdentityError,\n  VerifyIdentityError,\n} from '@moonpay/platform-protocol/api/errors';\nimport type {\n  CreateIdentityRequestBody,\n  Identity,\n  IdentityFileUploadUrl,\n  IdentityFileUploadUrlRequestBody,\n  IdentityVerificationResponse,\n  SubmitIdentityFilesRequestBody,\n  UpdateIdentityRequestBody,\n} from '@moonpay/platform-protocol/api/identity';\nimport type * as AddCardFrameTypes from '@moonpay/platform-protocol/frames/add-card';\nimport type * as ApplePayFrameTypes from '@moonpay/platform-protocol/frames/apple-pay';\nimport type * as BuyFrameTypes from '@moonpay/platform-protocol/frames/buy';\nimport type * as BuyButtonFrameTypes from '@moonpay/platform-protocol/frames/buy-button';\nimport type * as ChallengeFrameTypes from '@moonpay/platform-protocol/frames/challenge';\nimport type * as CustomerExportFrameTypes from '@moonpay/platform-protocol/frames/customer-export';\nimport type * as GooglePayFrameTypes from '@moonpay/platform-protocol/frames/google-pay';\nimport type * as WidgetFrameTypes from '@moonpay/platform-protocol/frames/widget';\nimport type { ChallengeRequired } from '@moonpay/platform-protocol/models/challenge';\nimport type { Connection, ConnectionError } from '@moonpay/platform-protocol/models/connection';\nimport { ConnectionStatus } from '@moonpay/platform-protocol/models/connection';\nimport type { ProtocolMessage } from '@moonpay/platform-protocol/protocol';\nimport type { Result } from '@moonpay/platform-protocol/result';\nimport { err, ok } from '@moonpay/platform-protocol/result';\nimport type * as AddCardSdk from '@moonpay/platform-protocol/sdks/add-card';\nimport type * as ApplePaySdk from '@moonpay/platform-protocol/sdks/apple-pay';\nimport type * as AuthSdk from '@moonpay/platform-protocol/sdks/auth';\nimport type * as BuySdk from '@moonpay/platform-protocol/sdks/buy';\nimport type * as BuyButtonSdk from '@moonpay/platform-protocol/sdks/buy-button';\nimport type * as ChallengeSdk from '@moonpay/platform-protocol/sdks/challenge';\nimport type * as ConnectSdk from '@moonpay/platform-protocol/sdks/connect';\nimport type * as CustomerExportSdk from '@moonpay/platform-protocol/sdks/customer-export';\nimport type * as GooglePaySdk from '@moonpay/platform-protocol/sdks/google-pay';\nimport type { ResetConnectionError } from '@moonpay/platform-protocol/sdks/reset';\nimport type * as WidgetSdk from '@moonpay/platform-protocol/sdks/widget';\nimport {\n  applyClientTokenParam,\n  applyPresentationParam,\n  applyThemeParam,\n  buildFrameUrl,\n  type CoreClient,\n  type Credentials,\n  createClientCore,\n  createFrameOrchestrator,\n  decryptCredentials,\n  FRAME_PATHS,\n  type GetCredentialsError,\n  type GetPaymentMethodsParams,\n  generateKeyPair,\n  isTrustedFrameOrigin,\n  type ListAssetsParams,\n  type ListTransactionsParams,\n  type PresentationMode,\n  presentationParams,\n  type ThemeOptions,\n  themeParams,\n} from '@moonpay/platform-sdk-core';\nimport { IframeTransport } from './iframe-transport.js';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface CreateClientOptions {\n  /** Session token from your server (via createSession). */\n  sessionToken: string;\n  /** Override the API base URL. Defaults to production. */\n  apiBaseUrl?: string;\n  /** Override the frame base URL. Defaults to production. */\n  frameBaseUrl?: string;\n  /** Theme applied to every visible MoonPay frame (connect, widget, Apple/Google Pay, …). */\n  theme?: ThemeOptions;\n}\n\nexport interface GetConnectionOptions {\n  /**\n   * Pass `true` for headless / Identity-API integrations so the check\n   * frame opts out of KYC-based statuses. Legal (`termsAcceptanceRequired`)\n   * is always surfaced regardless. Defaults to `false`.\n   */\n  skipKyc?: boolean;\n}\n\nexport interface ConnectOptions {\n  /** DOM element to render the connect frame into. */\n  container: HTMLElement;\n  /** Theme for this connect frame. Overrides the client-level `theme`. */\n  theme?: ThemeOptions;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for connect lifecycle events. */\n  onEvent?: (event: ConnectSdk.Event) => void;\n}\n\nexport interface ConnectFrame {\n  dispose(): void;\n}\n\nexport interface SetupWidgetOptions {\n  /** Quote signature from getQuote(). */\n  quote: string;\n  /** DOM element to render the widget into. */\n  container: HTMLElement;\n  /** Partner-assigned identifier for this transaction attempt. */\n  externalTransactionId?: string;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for widget lifecycle events. */\n  onEvent?: (event: WidgetSdk.Event) => void;\n}\n\nexport interface WidgetFrame {\n  dispose(): void;\n}\n\nexport interface SetupApplePayOptions {\n  /** Quote signature from getQuote(). */\n  quote: string;\n  /** DOM element to render the Apple Pay button into. */\n  container: HTMLElement;\n  /** Partner-assigned identifier for this transaction attempt. */\n  externalTransactionId?: string;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Styling for the standalone Apple Pay button. Passed through to the frame, which is authoritative. */\n  applePayButtonSettings?: ApplePayFrameTypes.ApplePayButtonSettings;\n  /** Callback for Apple Pay lifecycle events. */\n  onEvent?: (event: ApplePaySdk.Event) => void;\n}\n\nexport interface ApplePayFrame {\n  /** Update the quote (e.g., after expiry). */\n  setQuote(signature: string): void;\n  dispose(): void;\n}\n\nexport interface SetupGooglePayOptions {\n  /** Quote signature from getQuote(). */\n  quote: string;\n  /** DOM element to render the Google Pay button into. */\n  container: HTMLElement;\n  /** Partner-assigned identifier for this transaction attempt. */\n  externalTransactionId?: string;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for Google Pay lifecycle events. */\n  onEvent?: (event: GooglePaySdk.Event) => void;\n}\n\nexport interface GooglePayFrame {\n  /** Update the quote (e.g., after expiry). */\n  setQuote(signature: string): void;\n  dispose(): void;\n}\n\nexport interface SetupBuyOptions {\n  /** Quote signature from getQuote(). */\n  quote: string;\n  /** DOM element to attach the hidden buy frame to. */\n  container: HTMLElement;\n  /** Partner-assigned identifier for this transaction attempt. */\n  externalTransactionId?: string;\n  /** Callback for buy frame lifecycle events. */\n  onEvent?: (event: BuySdk.Event) => void;\n}\n\nexport interface BuyFrame {\n  /** Update the quote (e.g., after expiry). */\n  setQuote(signature: string): void;\n  dispose(): void;\n}\n\nexport interface SetupBuyButtonOptions {\n  /** Quote signature from getQuote(). */\n  quote: string;\n  /** DOM element to render the buy button into. */\n  container: HTMLElement;\n  /** Partner-assigned identifier for this transaction attempt. */\n  externalTransactionId?: string;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Styling for the Apple Pay button variant. Passed through to the frame, which is authoritative. */\n  applePayButtonSettings?: ApplePayFrameTypes.ApplePayButtonSettings;\n  /** Callback for buy-button frame lifecycle events. */\n  onEvent?: (event: BuyButtonSdk.Event) => void;\n}\n\nexport interface BuyButtonFrame {\n  /** Update the quote (e.g., after expiry). */\n  setQuote(signature: string): void;\n  dispose(): void;\n}\n\nexport interface SetupChallengeOptions {\n  /**\n   * Full challenge URL received from a frame's `challenge` event (buy,\n   * buy-button, Apple Pay, or Google Pay), or from a quote's `challenge`\n   * field (guest-checkout limit upgrade). `clientToken` is attached\n   * automatically when the client holds one — do not add it yourself.\n   */\n  url: string;\n  /** DOM element to render the challenge frame into. */\n  container: HTMLElement;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for challenge frame lifecycle events. */\n  onEvent?: (event: ChallengeSdk.Event) => void;\n}\n\nexport interface ChallengeFrame {\n  dispose(): void;\n}\n\nexport interface SetupAddCardOptions {\n  /** DOM element to render the add-card frame into. */\n  container: HTMLElement;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for add-card frame lifecycle events. */\n  onEvent?: (event: AddCardSdk.Event) => void;\n}\n\nexport interface AddCardFrame {\n  dispose(): void;\n}\n\nexport interface SetupCustomerExportOptions {\n  /** DOM element to render the customer-export consent frame into. */\n  container: HTMLElement;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for customer-export frame lifecycle events. */\n  onEvent?: (event: CustomerExportSdk.Event) => void;\n}\n\nexport interface CustomerExportFrame {\n  dispose(): void;\n}\n\nexport interface SetupAuthOptions {\n  /** DOM element to render the auth frame into. */\n  container: HTMLElement;\n  /** Frame chrome. Defaults to the frame's own default (bare) when omitted. */\n  presentation?: PresentationMode;\n  /** Callback for auth frame lifecycle events. */\n  onEvent?: (event: AuthSdk.Event) => void;\n}\n\nexport interface AuthFrame {\n  dispose(): void;\n}\n\nexport interface Client {\n  /**\n   * Probe the customer's connection state via the hidden check-connection\n   * frame. Returns the `Connection` discriminated union and populates the\n   * internal context with bootstrap `accessToken` / `clientToken` for any\n   * status that carries credentials (`active`, `connectionRequired`).\n   *\n   * Headless / Identity-API integrations should pass `skipKyc: true` so the\n   * check frame opts out of KYC-related result codes — the frame still\n   * surfaces `termsAcceptanceRequired` (legal can't be skipped) but won't\n   * resolve to `pending` / `failed` due to KYC alone.\n   *\n   * A `connectionRequired` result may carry `mismatch: true` when the\n   * session's email and phone number resolve to different MoonPay\n   * customers — partners can branch on it to route the customer through\n   * Connect proactively, before rendering payment UI.\n   */\n  getConnection(\n    options?: GetConnectionOptions,\n  ): Promise<Result<Connection, ConnectSdk.GetConnectionError>>;\n  connect(options: ConnectOptions): Promise<Result<ConnectFrame, ConnectSdk.ConnectError>>;\n  /**\n   * Launch the auth frame — the lighter-weight counterpart to `connect()`\n   * for headless / Identity-API partners. Requires a `clientToken` to be\n   * present in the client's context, which is populated automatically by a\n   * prior `getConnection()` call that returned `connectionRequired`.\n   * Call `getConnection()` first; if its status is `connectionRequired`,\n   * call `setupAuth()` to drive the customer through email/OTP.\n   */\n  setupAuth(options: SetupAuthOptions): Promise<Result<AuthFrame, AuthSdk.SetupError>>;\n  /**\n   * Returns the connected customer's `{ accessToken, clientToken }` so you can\n   * forward the `accessToken` to your own backend for customer-scoped Platform\n   * API calls (e.g. server-side quote fetching).\n   *\n   * Advanced escape hatch — the SDK otherwise keeps these credentials internal.\n   * The `accessToken` is short-lived and scoped to the connected customer. Errs\n   * with `noActiveSession` until a customer session exists — call\n   * `getConnection()` (and `connect()` / `setupAuth()` where needed) first.\n   * Synchronous — returns a `Result`, not a Promise.\n   */\n  getCredentials(): Result<Credentials, GetCredentialsError>;\n  getPaymentMethods(\n    params?: GetPaymentMethodsParams,\n  ): Promise<Result<{ data: ListPaymentMethodsResponse }, GetPaymentMethodsError>>;\n  getQuote(params: GetQuoteParams): Promise<Result<{ data: Quote }, GetQuoteError>>;\n  /**\n   * Lists crypto assets (CeFi and DeFi) available for purchase. DeFi tokens are\n   * returned with `status.verified: false`; quote them by `caip19` rather than `code`.\n   */\n  getAssets(params?: ListAssetsParams): Promise<Result<ListAssetsResponse, GetAssetsError>>;\n  listTransactions(\n    params?: ListTransactionsParams,\n  ): Promise<Result<{ data: Transaction[]; pageInfo: PaginationInfo }, GetTransactionsError>>;\n  getTransaction(\n    id: string,\n  ): Promise<Result<{ data: TransactionWithStages }, GetTransactionsError>>;\n  /** Simulate bank-transfer settlement for a test-mode transaction (sandbox only). */\n  simulateBankTransfer(\n    id: string,\n    params: SimulateBankTransferParams,\n  ): Promise<Result<{ data: TransactionWithStages }, SimulateBankTransferError>>;\n  setupWidget(options: SetupWidgetOptions): Promise<Result<WidgetFrame, WidgetSdk.SetupError>>;\n  setupApplePay(\n    options: SetupApplePayOptions,\n  ): Promise<Result<ApplePayFrame, ApplePaySdk.SetupError>>;\n  setupGooglePay(\n    options: SetupGooglePayOptions,\n  ): Promise<Result<GooglePayFrame, GooglePaySdk.SetupError>>;\n  deletePaymentMethod(id: string): Promise<Result<void, DevPlatformApiError>>;\n  /**\n   * Clears the customer's MoonPay connection for this partner by running the\n   * reset frame, authorized with the connect-flow `clientToken` held in the\n   * client's context. Resolves when the reset completes or times out (5s).\n   * Call this after clearing your own local auth state (the client reference\n   * can be captured before disposal since the client token is held internally).\n   */\n  resetConnection(): Promise<Result<void, ResetConnectionError>>;\n  setupBuy(options: SetupBuyOptions): Promise<Result<BuyFrame, BuySdk.SetupError>>;\n  setupBuyButton(\n    options: SetupBuyButtonOptions,\n  ): Promise<Result<BuyButtonFrame, BuyButtonSdk.SetupError>>;\n  setupChallenge(\n    options: SetupChallengeOptions,\n  ): Promise<Result<ChallengeFrame, ChallengeSdk.SetupError>>;\n  setupAddCard(options: SetupAddCardOptions): Promise<Result<AddCardFrame, AddCardSdk.SetupError>>;\n  /**\n   * Launch the customer-export consent frame. The customer reviews what's\n   * being shared and authorizes the export; the `complete` event payload\n   * carries a one-time consent token. Forward it to your backend, which\n   * calls `exportCustomer` (node SDK) within the token's validity window.\n   */\n  setupCustomerExport(\n    options: SetupCustomerExportOptions,\n  ): Promise<Result<CustomerExportFrame, CustomerExportSdk.SetupError>>;\n\n  // Customer API\n  /** Fetch the customer bound to the credential. */\n  getCustomer(id: string): Promise<Result<{ data: Customer }, GetCustomerError>>;\n  /** Submit one or more outstanding KYC requirements for the customer. */\n  submitCustomerKyc(\n    id: string,\n    body: UpdateIdentityRequestBody,\n  ): Promise<Result<{ data: Customer }, SubmitCustomerKycError>>;\n  /** Issue a presigned URL to upload a customer's identity-related file. */\n  getCustomerUploadUrl(\n    id: string,\n    body: IdentityFileUploadUrlRequestBody,\n  ): Promise<Result<{ data: IdentityFileUploadUrl }, GetCustomerUploadUrlError>>;\n  /** Confirm one or more previously-uploaded customer files. */\n  submitCustomerFiles(\n    id: string,\n    body: SubmitIdentityFilesRequestBody,\n  ): Promise<Result<{ data: Customer }, SubmitCustomerFilesError>>;\n\n  // Identity API — deprecated (DEVXP-1454), use the Customer API above instead\n  /**\n   * @deprecated Customers are created automatically now — call `getCustomer`\n   * directly instead.\n   */\n  createIdentity(\n    body: CreateIdentityRequestBody,\n  ): Promise<Result<{ data: Identity | null }, CreateIdentityError>>;\n  /** @deprecated Use `getCustomer` instead. */\n  getIdentity(id: string): Promise<Result<{ data: Identity }, GetIdentityError>>;\n  /** @deprecated Use `submitCustomerKyc` instead. */\n  updateIdentity(\n    id: string,\n    body: UpdateIdentityRequestBody,\n  ): Promise<Result<{ data: Identity }, UpdateIdentityError>>;\n  /** @deprecated No longer needed — Customer API verification has no direct replacement call. */\n  verifyIdentity(\n    id: string,\n  ): Promise<Result<{ data: IdentityVerificationResponse }, VerifyIdentityError>>;\n  /** @deprecated Use `getCustomerUploadUrl` instead. */\n  getIdentityUploadUrl(\n    id: string,\n    body: IdentityFileUploadUrlRequestBody,\n  ): Promise<Result<{ data: IdentityFileUploadUrl }, GetIdentityUploadUrlError>>;\n  /** @deprecated Use `submitCustomerFiles` instead. */\n  submitIdentityFiles(\n    id: string,\n    body: SubmitIdentityFilesRequestBody,\n  ): Promise<Result<{ data: Identity }, SubmitIdentityFilesError>>;\n}\n\n// ---------------------------------------------------------------------------\n// createClient\n// ---------------------------------------------------------------------------\n\nfunction sessionCredentials(connection: Connection): string | undefined {\n  return connection.status === ConnectionStatus.active ||\n    connection.status === ConnectionStatus.pending\n    ? connection.credentials\n    : undefined;\n}\n\nexport function createClient(options: CreateClientOptions): Client {\n  const { sessionToken, apiBaseUrl, frameBaseUrl, theme } = options;\n\n  const core: CoreClient = createClientCore({\n    apiBaseUrl,\n    frameBaseUrl,\n    createTransport: () => new IframeTransport(),\n  });\n\n  // ------- getConnection (hidden iframe) -------\n  async function getConnection(\n    options: GetConnectionOptions = {},\n  ): Promise<Result<Connection, ConnectSdk.GetConnectionError>> {\n    const { privateKey, publicKey } = generateKeyPair();\n    const channelId = `check-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.checkConnection,\n      {\n        sessionToken,\n        channelId,\n        publicKey,\n        ...(options.skipKyc && { skipKyc: true }),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: document.body,\n        hidden: true,\n        handshakeTimeout: 10_000,\n      });\n\n      return new Promise<Result<Connection, ConnectSdk.GetConnectionError>>((resolve) => {\n        const timeout = setTimeout(() => {\n          handle.dispose();\n          resolve(err({ message: 'Get connection timed out' }));\n        }, 10_000);\n\n        handle.onMessage((msg: ProtocolMessage) => {\n          if (msg.kind === 'error') {\n            clearTimeout(timeout);\n            handle.dispose();\n            const payload = msg.payload as { message: string };\n            resolve(err({ message: payload.message }));\n            return;\n          }\n\n          if (msg.kind === 'complete') {\n            clearTimeout(timeout);\n            handle.dispose();\n            const connection = msg.payload as Connection;\n\n            const credentials = sessionCredentials(connection);\n            if (credentials) {\n              const creds = decryptCredentials(credentials, privateKey);\n              core.context.setAccessToken(creds.accessToken);\n              core.context.setClientToken(creds.clientToken);\n            } else if (connection.status === ConnectionStatus.connectionRequired) {\n              // Decrypt anonymous tokens so the client token is ready for\n              // pre-connect flows (e.g. guest checkout) without requiring a\n              // full connect flow first.\n              const creds = decryptCredentials(connection.credentials, privateKey);\n              core.context.setAccessToken(creds.accessToken);\n              core.context.setClientToken(creds.clientToken);\n            }\n\n            resolve(ok(connection));\n          }\n        });\n      });\n    } catch (e) {\n      return err({\n        message: e instanceof Error ? e.message : 'Failed to connect',\n      });\n    }\n  }\n\n  // ------- connect (visible iframe) -------\n  async function connect(\n    opts: ConnectOptions,\n  ): Promise<Result<ConnectFrame, ConnectSdk.ConnectError>> {\n    const clientToken = core.context.clientToken;\n    if (!clientToken) {\n      return err({\n        message:\n          'No clientToken in context — call getConnection() first and ensure it resolved with status \"connectionRequired\".',\n      });\n    }\n\n    const { privateKey, publicKey } = generateKeyPair();\n    const channelId = `connect-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.connect,\n      {\n        clientToken,\n        channelId,\n        publicKey,\n        // Per-call theme wins; otherwise fall back to the client-level theme.\n        ...themeParams(opts.theme ?? theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      return new Promise<Result<ConnectFrame, ConnectSdk.ConnectError>>((resolve) => {\n        handle.onMessage((msg: ProtocolMessage) => {\n          if (msg.kind === 'ready') {\n            opts.onEvent?.({ kind: 'ready' });\n            return;\n          }\n\n          if (msg.kind === 'error') {\n            const payload = msg.payload as ConnectionError;\n            opts.onEvent?.({ kind: 'error', payload });\n            handle.dispose();\n            resolve(err({ message: 'Connection error' }));\n            return;\n          }\n\n          if (msg.kind === 'complete') {\n            const connection = msg.payload as Connection;\n\n            const credentials = sessionCredentials(connection);\n            if (credentials) {\n              const creds = decryptCredentials(credentials, privateKey);\n              core.context.setAccessToken(creds.accessToken);\n              core.context.setClientToken(creds.clientToken);\n            }\n\n            opts.onEvent?.({ kind: 'complete', payload: connection });\n            resolve(ok({ dispose: () => handle.dispose() }));\n          }\n        });\n      });\n    } catch (e) {\n      return err({\n        message: e instanceof Error ? e.message : 'Connect failed',\n      });\n    }\n  }\n\n  // ------- setupAuth (visible iframe) -------\n  async function setupAuth(opts: SetupAuthOptions): Promise<Result<AuthFrame, AuthSdk.SetupError>> {\n    const clientToken = core.context.clientToken;\n    if (!clientToken) {\n      return err({\n        kind: 'configurationError',\n        message:\n          'No clientToken in context — call getConnection() first and ensure it resolved with status \"connectionRequired\".',\n      });\n    }\n\n    const { privateKey, publicKey } = generateKeyPair();\n    const channelId = `auth-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.auth,\n      {\n        clientToken,\n        channelId,\n        publicKey,\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      return new Promise<Result<AuthFrame, AuthSdk.SetupError>>((resolve) => {\n        handle.onMessage((msg: ProtocolMessage) => {\n          if (msg.kind === 'ready') {\n            opts.onEvent?.({ kind: 'ready' });\n            return;\n          }\n\n          if (msg.kind === 'error') {\n            const payload = msg.payload as ConnectionError;\n            opts.onEvent?.({ kind: 'error', payload });\n            handle.dispose();\n            resolve(err({ kind: 'genericError', message: 'Auth frame error' }));\n            return;\n          }\n\n          if (msg.kind === 'complete') {\n            const connection = msg.payload as Connection;\n\n            const credentials = sessionCredentials(connection);\n            if (credentials) {\n              const creds = decryptCredentials(credentials, privateKey);\n              core.context.setAccessToken(creds.accessToken);\n              core.context.setClientToken(creds.clientToken);\n            }\n\n            if (\n              connection.status === ConnectionStatus.active ||\n              connection.status === ConnectionStatus.pending ||\n              connection.status === ConnectionStatus.termsAcceptanceRequired\n            ) {\n              opts.onEvent?.({ kind: 'complete', payload: connection });\n            }\n            resolve(ok({ dispose: () => handle.dispose() }));\n          }\n        });\n      });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Auth setup failed',\n      });\n    }\n  }\n\n  // ------- setupWidget -------\n  async function setupWidget(\n    opts: SetupWidgetOptions,\n  ): Promise<Result<WidgetFrame, WidgetSdk.SetupError>> {\n    const channelId = `widget-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.widget,\n      {\n        flow: 'buy',\n        clientToken: core.context.clientToken,\n        quoteSignature: opts.quote,\n        channelId,\n        ...(opts.externalTransactionId && { externalTransactionId: opts.externalTransactionId }),\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'transactionCreated':\n            opts.onEvent?.({\n              kind: 'transactionCreated',\n              payload: msg.payload as WidgetFrameTypes.MessageMap['transactionCreated'],\n            });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as WidgetFrameTypes.MessageMap['complete'],\n            });\n            break;\n          case 'error': {\n            const payload = msg.payload as WidgetFrameTypes.MessageMap['error'];\n            opts.onEvent?.({\n              kind: 'error',\n              payload: {\n                code: payload.code,\n                message: payload.message,\n              },\n            });\n            break;\n          }\n          case 'close':\n            opts.onEvent?.({ kind: 'close' });\n            break;\n        }\n      });\n\n      return ok({ dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Widget setup failed',\n      });\n    }\n  }\n\n  // ------- setupApplePay -------\n  async function setupApplePay(\n    opts: SetupApplePayOptions,\n  ): Promise<Result<ApplePayFrame, ApplePaySdk.SetupError>> {\n    const channelId = `applepay-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.applePay,\n      {\n        clientToken: core.context.clientToken,\n        signature: opts.quote,\n        channelId,\n        ...(opts.externalTransactionId && { externalTransactionId: opts.externalTransactionId }),\n        ...(opts.applePayButtonSettings && { applePayButtonSettings: opts.applePayButtonSettings }),\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      const setQuote = (signature: string) => {\n        handle.sendMessage({\n          version: 2,\n          meta: { channelId },\n          kind: 'setQuote',\n          payload: { quote: { signature } },\n        });\n      };\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'buttonPressed':\n            opts.onEvent?.({ kind: 'buttonPressed' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as ApplePayFrameTypes.InboundMessageMap['complete'],\n            });\n            break;\n          case 'challenge':\n            opts.onEvent?.({\n              kind: 'challenge',\n              payload: msg.payload as ApplePayFrameTypes.InboundMessageMap['challenge'],\n            });\n            break;\n          case 'cancelled':\n            opts.onEvent?.({\n              kind: 'cancelled',\n              payload: msg.payload as ApplePayFrameTypes.InboundMessageMap['cancelled'],\n            });\n            break;\n          case 'error': {\n            const payload = msg.payload as ApplePayFrameTypes.InboundMessageMap['error'];\n            if (payload.code === 'quoteExpired') {\n              opts.onEvent?.({\n                kind: 'quoteExpired',\n                payload: { setQuote },\n              });\n            } else if (payload.code === 'applePayUnavailable') {\n              opts.onEvent?.({ kind: 'unsupported' });\n            } else {\n              const kind =\n                payload.code === 'generic'\n                  ? 'genericError'\n                  : (payload.code as 'configurationError' | 'invalidQuote' | 'genericError');\n              opts.onEvent?.({\n                kind: 'error',\n                payload: { kind, message: payload.message },\n              });\n            }\n            break;\n          }\n        }\n      });\n\n      return ok({ setQuote, dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Apple Pay setup failed',\n      });\n    }\n  }\n\n  // ------- setupGooglePay -------\n  async function setupGooglePay(\n    opts: SetupGooglePayOptions,\n  ): Promise<Result<GooglePayFrame, GooglePaySdk.SetupError>> {\n    const channelId = `googlepay-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.googlePay,\n      {\n        clientToken: core.context.clientToken,\n        signature: opts.quote,\n        channelId,\n        ...(opts.externalTransactionId && { externalTransactionId: opts.externalTransactionId }),\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      const setQuote = (signature: string) => {\n        handle.sendMessage({\n          version: 2,\n          meta: { channelId },\n          kind: 'setQuote',\n          payload: { quote: { signature } },\n        });\n      };\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'buttonPressed':\n            opts.onEvent?.({ kind: 'buttonPressed' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as GooglePayFrameTypes.InboundMessageMap['complete'],\n            });\n            break;\n          case 'challenge':\n            opts.onEvent?.({\n              kind: 'challenge',\n              payload: msg.payload as GooglePayFrameTypes.InboundMessageMap['challenge'],\n            });\n            break;\n          case 'cancelled':\n            opts.onEvent?.({\n              kind: 'cancelled',\n              payload: msg.payload as GooglePayFrameTypes.InboundMessageMap['cancelled'],\n            });\n            break;\n          case 'error': {\n            const payload = msg.payload as GooglePayFrameTypes.InboundMessageMap['error'];\n            if (payload.code === 'quoteExpired') {\n              opts.onEvent?.({\n                kind: 'quoteExpired',\n                payload: { setQuote },\n              });\n            } else if (payload.code === 'googlePayUnavailable') {\n              opts.onEvent?.({ kind: 'unsupported' });\n            } else {\n              const kind =\n                payload.code === 'generic'\n                  ? 'genericError'\n                  : (payload.code as 'configurationError' | 'invalidQuote' | 'genericError');\n              opts.onEvent?.({\n                kind: 'error',\n                payload: { kind, message: payload.message },\n              });\n            }\n            break;\n          }\n        }\n      });\n\n      return ok({ setQuote, dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Google Pay setup failed',\n      });\n    }\n  }\n\n  // ------- resetConnection -------\n  async function resetConnection(): Promise<Result<void, ResetConnectionError>> {\n    const channelId = `reset-${crypto.randomUUID()}`;\n    const url = buildFrameUrl(\n      FRAME_PATHS.reset,\n      { clientToken: core.context.clientToken, channelId },\n      { frameBaseUrl },\n    );\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: document.body,\n        hidden: true,\n        handshakeTimeout: 5_000,\n      });\n\n      return new Promise<Result<void, ResetConnectionError>>((resolve) => {\n        const timeout = setTimeout(() => {\n          handle.dispose();\n          resolve(ok(undefined));\n        }, 5_000);\n\n        handle.onMessage((msg: ProtocolMessage) => {\n          if (msg.kind === 'complete' || msg.kind === 'error') {\n            clearTimeout(timeout);\n            handle.dispose();\n            resolve(ok(undefined));\n          }\n        });\n      });\n    } catch {\n      return ok(undefined);\n    }\n  }\n\n  // ------- setupBuy -------\n  async function setupBuy(opts: SetupBuyOptions): Promise<Result<BuyFrame, BuySdk.SetupError>> {\n    const channelId = `buy-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.buy,\n      {\n        channelId,\n        clientToken: core.context.clientToken,\n        signature: opts.quote,\n        ...(opts.externalTransactionId && { externalTransactionId: opts.externalTransactionId }),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n        hidden: true,\n      });\n\n      const setQuote = (signature: string) => {\n        handle.sendMessage({\n          version: 2,\n          meta: { channelId },\n          kind: 'setQuote',\n          payload: { quote: { signature } },\n        });\n      };\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as BuyFrameTypes.MessageMap['complete'],\n            });\n            break;\n          case 'challenge':\n            opts.onEvent?.({\n              kind: 'challenge',\n              payload: msg.payload as ChallengeRequired,\n            });\n            break;\n          case 'error':\n            opts.onEvent?.({\n              kind: 'error',\n              payload: msg.payload as BuyFrameTypes.MessageMap['error'],\n            });\n            break;\n        }\n      });\n\n      return ok({ setQuote, dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Buy setup failed',\n      });\n    }\n  }\n\n  // ------- setupBuyButton -------\n  async function setupBuyButton(\n    opts: SetupBuyButtonOptions,\n  ): Promise<Result<BuyButtonFrame, BuyButtonSdk.SetupError>> {\n    const channelId = `buy-button-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.buyButton,\n      {\n        channelId,\n        clientToken: core.context.clientToken,\n        signature: opts.quote,\n        ...(opts.externalTransactionId && { externalTransactionId: opts.externalTransactionId }),\n        ...(opts.applePayButtonSettings && { applePayButtonSettings: opts.applePayButtonSettings }),\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      const setQuote = (signature: string) => {\n        handle.sendMessage({\n          version: 2,\n          meta: { channelId },\n          kind: 'setQuote',\n          payload: { quote: { signature } },\n        });\n      };\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'buttonPressed':\n            opts.onEvent?.({ kind: 'buttonPressed' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as BuyButtonFrameTypes.MessageMap['complete'],\n            });\n            break;\n          case 'challenge':\n            opts.onEvent?.({\n              kind: 'challenge',\n              payload: msg.payload as ChallengeRequired,\n            });\n            break;\n          case 'error':\n            opts.onEvent?.({\n              kind: 'error',\n              payload: msg.payload as BuyButtonFrameTypes.MessageMap['error'],\n            });\n            break;\n        }\n      });\n\n      return ok({ setQuote, dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Buy button setup failed',\n      });\n    }\n  }\n\n  // ------- setupChallenge -------\n  async function setupChallenge(\n    opts: SetupChallengeOptions,\n  ): Promise<Result<ChallengeFrame, ChallengeSdk.SetupError>> {\n    let url: URL;\n    try {\n      url = new URL(opts.url);\n    } catch {\n      return err({ kind: 'configurationError', message: 'Invalid challenge URL' });\n    }\n\n    if (!isTrustedFrameOrigin(url.origin)) {\n      return err({\n        kind: 'configurationError',\n        message: 'Challenge URL must be served from a trusted MoonPay origin',\n      });\n    }\n\n    let channelId = url.searchParams.get('channelId') ?? '';\n    if (!channelId) {\n      channelId = `challenge-${crypto.randomUUID()}`;\n      url.searchParams.set('channelId', channelId);\n    }\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url: applyClientTokenParam(\n          applyPresentationParam(applyThemeParam(url.toString(), theme), opts.presentation),\n          core.context.clientToken,\n        ),\n        container: opts.container,\n      });\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'buttonPressed':\n            opts.onEvent?.({ kind: 'buttonPressed' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as ChallengeFrameTypes.CompleteResult,\n            });\n            break;\n          case 'cancelled':\n            opts.onEvent?.({\n              kind: 'cancelled',\n              payload: msg.payload as ChallengeFrameTypes.Cancellation,\n            });\n            break;\n          case 'error':\n            opts.onEvent?.({\n              kind: 'error',\n              payload: msg.payload as ChallengeFrameTypes.MessageMap['error'],\n            });\n            break;\n        }\n      });\n\n      return ok({ dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Challenge setup failed',\n      });\n    }\n  }\n\n  // ------- setupAddCard -------\n  async function setupAddCard(\n    opts: SetupAddCardOptions,\n  ): Promise<Result<AddCardFrame, AddCardSdk.SetupError>> {\n    const channelId = `add-card-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.addCard,\n      {\n        channelId,\n        clientToken: core.context.clientToken,\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as AddCardFrameTypes.MessageMap['complete'],\n            });\n            break;\n          case 'error':\n            opts.onEvent?.({\n              kind: 'error',\n              payload: msg.payload as AddCardFrameTypes.MessageMap['error'],\n            });\n            break;\n        }\n      });\n\n      return ok({ dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Add card setup failed',\n      });\n    }\n  }\n\n  // ------- setupCustomerExport -------\n  async function setupCustomerExport(\n    opts: SetupCustomerExportOptions,\n  ): Promise<Result<CustomerExportFrame, CustomerExportSdk.SetupError>> {\n    const channelId = `customer-export-${crypto.randomUUID()}`;\n\n    const url = buildFrameUrl(\n      FRAME_PATHS.customerExport,\n      {\n        channelId,\n        clientToken: core.context.clientToken,\n        ...themeParams(theme),\n        ...presentationParams(opts.presentation),\n      },\n      { frameBaseUrl },\n    );\n\n    const transport = core.createTransport();\n\n    try {\n      const handle = await createFrameOrchestrator({\n        transport,\n        channelId,\n        url,\n        container: opts.container,\n      });\n\n      handle.onMessage((msg: ProtocolMessage) => {\n        switch (msg.kind) {\n          case 'ready':\n            opts.onEvent?.({ kind: 'ready' });\n            break;\n          case 'complete':\n            opts.onEvent?.({\n              kind: 'complete',\n              payload: msg.payload as CustomerExportFrameTypes.MessageMap['complete'],\n            });\n            break;\n          case 'error':\n            opts.onEvent?.({\n              kind: 'error',\n              payload: msg.payload as CustomerExportFrameTypes.MessageMap['error'],\n            });\n            break;\n          case 'close':\n            opts.onEvent?.({ kind: 'close' });\n            break;\n        }\n      });\n\n      return ok({ dispose: () => handle.dispose() });\n    } catch (e) {\n      return err({\n        kind: 'genericError',\n        message: e instanceof Error ? e.message : 'Customer export setup failed',\n      });\n    }\n  }\n\n  // ------- Compose the client -------\n  return {\n    getConnection,\n    connect,\n    setupAuth,\n    getCredentials: () => core.getCredentials(),\n    getPaymentMethods: (params) => core.getPaymentMethods(params),\n    getQuote: (params) => core.getQuote(params),\n    getAssets: (params) => core.getAssets(params),\n    listTransactions: (params) => core.listTransactions(params),\n    getTransaction: (id) => core.getTransaction(id),\n    simulateBankTransfer: (id, params) => core.simulateBankTransfer(id, params),\n    deletePaymentMethod: (id) => core.deletePaymentMethod(id),\n    resetConnection,\n    setupWidget,\n    setupApplePay,\n    setupGooglePay,\n    setupBuy,\n    setupBuyButton,\n    setupChallenge,\n    setupAddCard,\n    setupCustomerExport,\n\n    getCustomer: (id) => core.getCustomer(id),\n    submitCustomerKyc: (id, body) => core.submitCustomerKyc(id, body),\n    getCustomerUploadUrl: (id, body) => core.getCustomerUploadUrl(id, body),\n    submitCustomerFiles: (id, body) => core.submitCustomerFiles(id, body),\n\n    createIdentity: (body) => core.createIdentity(body),\n    getIdentity: (id) => core.getIdentity(id),\n    updateIdentity: (id, body) => core.updateIdentity(id, body),\n    verifyIdentity: (id) => core.verifyIdentity(id),\n    getIdentityUploadUrl: (id, body) => core.getIdentityUploadUrl(id, body),\n    submitIdentityFiles: (id, body) => core.submitIdentityFiles(id, body),\n  };\n}\n","import type { ProtocolMessage } from '@moonpay/platform-protocol/protocol';\nimport {\n  type FrameOptions,\n  type FrameTransport,\n  isTrustedFrameUrl,\n} from '@moonpay/platform-sdk-core';\n\n// ---------------------------------------------------------------------------\n// IframeTransport\n// ---------------------------------------------------------------------------\n\n/**\n * FrameTransport implementation for web browsers using HTMLIFrameElement\n * and window.postMessage.\n */\nexport class IframeTransport implements FrameTransport {\n  private iframe: HTMLIFrameElement | null = null;\n  private container: HTMLElement | null = null;\n  private frameOrigin: string | null = null;\n  private handlers: Array<(msg: ProtocolMessage) => void> = [];\n  private boundListener: ((event: MessageEvent) => void) | null = null;\n\n  create(url: string, options: FrameOptions): void {\n    if (!isTrustedFrameUrl(url)) {\n      throw new Error('Refusing to load frame: URL is not a trusted MoonPay origin');\n    }\n\n    // The origin we intentionally loaded. Validated as a trusted MoonPay origin\n    // above, so any message whose origin equals this is, by construction, both\n    // from our own frame's origin and from a trusted one.\n    this.frameOrigin = new URL(url).origin;\n\n    const container = options.container as HTMLElement;\n    this.container = container;\n\n    const iframe = document.createElement('iframe');\n    iframe.src = url;\n    iframe.style.border = 'none';\n\n    if (options.hidden) {\n      iframe.style.width = '0';\n      iframe.style.height = '0';\n      iframe.style.position = 'absolute';\n      iframe.style.overflow = 'hidden';\n    } else {\n      iframe.style.width = '100%';\n      iframe.style.height = '100%';\n    }\n\n    iframe.allow = 'accelerometer; autoplay; camera; encrypted-media; gyroscope; payment';\n\n    this.iframe = iframe;\n\n    // Attach the postMessage listener before appending (frame may handshake fast)\n    this.boundListener = this.handleMessage.bind(this);\n    window.addEventListener('message', this.boundListener);\n\n    container.appendChild(iframe);\n  }\n\n  sendMessage(message: ProtocolMessage): void {\n    if (!this.iframe?.contentWindow) {\n      throw new Error('Cannot send message: iframe not initialized');\n    }\n    if (!this.frameOrigin) {\n      throw new Error('Cannot send message: no trusted origin established');\n    }\n    this.iframe.contentWindow.postMessage(JSON.stringify(message), this.frameOrigin);\n  }\n\n  onMessage(handler: (msg: ProtocolMessage) => void): () => void {\n    this.handlers.push(handler);\n    return () => {\n      const idx = this.handlers.indexOf(handler);\n      if (idx >= 0) this.handlers.splice(idx, 1);\n    };\n  }\n\n  dispose(): void {\n    if (this.boundListener) {\n      window.removeEventListener('message', this.boundListener);\n      this.boundListener = null;\n    }\n    this.handlers.length = 0;\n    if (this.iframe && this.container?.contains(this.iframe)) {\n      this.iframe.remove();\n    }\n    this.iframe = null;\n    this.container = null;\n    this.frameOrigin = null;\n  }\n\n  // ---------------------------------------------------------------------------\n  // Private\n  // ---------------------------------------------------------------------------\n\n  private handleMessage(event: MessageEvent): void {\n    // Accept only messages from the exact origin we loaded into this frame. The\n    // listener is attached to the shared `window`, so it also sees messages from\n    // any other MoonPay frame on the page; keying on the frame's own origin lets\n    // frames from different trusted origins coexist on one parent page, instead\n    // of the transport pinning to whichever trusted frame spoke first and then\n    // dropping its own frame's messages (DEVXP-1818).\n    //\n    // `frameOrigin` was validated as a trusted MoonPay origin in `create()`, so\n    // this single equality both scopes traffic to our frame and enforces the\n    // trust boundary. It is deliberately stricter than matching `event.source`\n    // against `contentWindow`: a `WindowProxy` is stable across navigations, so a\n    // source check would keep trusting the frame if it navigated to a different\n    // origin, whereas the origin here changes. It also needs no `event.source`,\n    // which some WebViews omit.\n    if (event.origin !== this.frameOrigin) return;\n\n    let msg: ProtocolMessage;\n    try {\n      msg = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n      if (!msg.kind) return;\n    } catch {\n      return;\n    }\n\n    // Sibling MoonPay frames sharing this exact origin also match here; the frame\n    // orchestrator's channelId filter routes each message to the right frame.\n    for (const handler of this.handlers) {\n      handler(msg);\n    }\n  }\n}\n"],"mappings":"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","names":["import_connection","import_platform_sdk_core","options"]}