{"version":3,"file":"index.mjs","names":["STATIC_ENVIRONMENT_URLS: Record<Exclude<PaymentKitEnvironment, \"tunnel\">, EnvironmentUrls>","PaymentKit: PaymentKitType","PACKAGE_VERSION","loadPromises: Promise<void>[]","externalFuncsMapByPm: ExternalFuncsMapByPm<PaymentMethods>","submit: PaymentKitReturnType[\"submit\"]"],"sources":["../package.json","../src/types.ts","../src/index.ts"],"sourcesContent":["{\n  \"name\": \"@payment-kit-js/vanilla\",\n  \"version\": \"0.5.20\",\n  \"main\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.mts\",\n  \"module\": \"./dist/index.mjs\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./payment-methods/affirm\": \"./dist/payment-methods/affirm.mjs\",\n    \"./payment-methods/afterpay\": \"./dist/payment-methods/afterpay.mjs\",\n    \"./payment-methods/airwallex-apple-pay-adapter\": \"./dist/payment-methods/airwallex-apple-pay-adapter.mjs\",\n    \"./payment-methods/airwallex-google-pay-adapter\": \"./dist/payment-methods/airwallex-google-pay-adapter.mjs\",\n    \"./payment-methods/apple-pay\": \"./dist/payment-methods/apple-pay.mjs\",\n    \"./payment-methods/bnpl-shared\": \"./dist/payment-methods/bnpl-shared.mjs\",\n    \"./payment-methods/card\": \"./dist/payment-methods/card.mjs\",\n    \"./payment-methods/google-pay\": \"./dist/payment-methods/google-pay.mjs\",\n    \"./payment-methods/klarna\": \"./dist/payment-methods/klarna.mjs\",\n    \"./payment-methods/next-action-handlers\": \"./dist/payment-methods/next-action-handlers.mjs\",\n    \"./payment-methods/paypal\": \"./dist/payment-methods/paypal.mjs\",\n    \"./payment-methods/stripe-apple-pay-adapter\": \"./dist/payment-methods/stripe-apple-pay-adapter.mjs\",\n    \"./payment-methods/stripe-google-pay-adapter\": \"./dist/payment-methods/stripe-google-pay-adapter.mjs\",\n    \"./payment-methods/vgs-collect-loader\": \"./dist/payment-methods/vgs-collect-loader.mjs\",\n    \"./penpal/connect-card\": \"./dist/penpal/connect-card.mjs\",\n    \"./penpal/connect-tunnel-x\": \"./dist/penpal/connect-tunnel-x.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"license\": \"MIT\",\n  \"description\": \"Vanilla package for PaymentKit\",\n  \"files\": [\n    \"dist\",\n    \"dist/cdn\"\n  ],\n  \"scripts\": {\n    \"dev\": \"yarn tsdown --watch ./src\",\n    \"build:npm\": \"yarn tsdown\",\n    \"build:cdn\": \"node build-cdn.mjs\",\n    \"build\": \"yarn build:npm && yarn build:cdn\"\n  },\n  \"packageManager\": \"yarn@4.10.3\",\n  \"dependencies\": {\n    \"nanoid\": \"^5.0.7\",\n    \"penpal\": \"^7.0.4\",\n    \"posthog-js\": \"^1.196.0\",\n    \"valibot\": \"^1.1.0\"\n  },\n  \"devDependencies\": {\n    \"@pkg/sdk\": \"workspace:*\",\n    \"@pkg/tsconfig\": \"workspace:*\",\n    \"@stripe/stripe-js\": \"^8.6.1\",\n    \"@types/applepayjs\": \"^14.0.9\",\n    \"esbuild\": \"^0.24.2\",\n    \"tsdown\": \"^0.15.10\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"stableVersion\": \"0.5.20\"\n}\n","import type { CheckoutTimingTracker } from \"./analytics\";\nimport type { CardErrorCode } from \"./penpal/connect-card\";\nimport type { TunnelXIFrameConnection } from \"./penpal/connect-tunnel-x\";\n\nexport type PaymentKitEnvironment = \"local\" | \"tunnel\" | \"sandbox\" | \"staging\" | \"production\";\n\ntype EnvironmentUrls = {\n  baseUrl: string;\n  apiBaseUrl: string;\n};\n\n// TODO: Cleanup this after launch to only use SDK instead of plain fetch.\nconst STATIC_ENVIRONMENT_URLS: Record<Exclude<PaymentKitEnvironment, \"tunnel\">, EnvironmentUrls> = {\n  local: {\n    baseUrl: \"http://localhost:9101\",\n    apiBaseUrl: \"http://localhost:9000\",\n  },\n  sandbox: {\n    baseUrl: \"https://app.paymentkit.com/customer\",\n    apiBaseUrl: \"https://app.paymentkit.com\",\n  },\n  staging: {\n    baseUrl: \"https://staging.paymentkit.com/customer\",\n    apiBaseUrl: \"https://staging.paymentkit.com\",\n  },\n  production: {\n    baseUrl: \"https://app.paymentkit.com/customer\",\n    apiBaseUrl: \"https://app.paymentkit.com\",\n  },\n};\n\nfunction getTunnelUrls(): EnvironmentUrls {\n  if (typeof window !== \"undefined\") {\n    const params = new URLSearchParams(window.location.search);\n    const apiBaseUrl = params.get(\"api_base_url\");\n    if (apiBaseUrl) {\n      return {\n        baseUrl: window.location.origin,\n        apiBaseUrl,\n      };\n    }\n    // For loclx-style tunnels where API hostname is derived from the current hostname\n    const hostname = window.location.hostname;\n    if (hostname.includes(\"loclx.io\")) {\n      const apiHostname = hostname.replace(/cportal|playground/, \"api\");\n      return {\n        baseUrl: `https://${hostname}`,\n        apiBaseUrl: `https://${apiHostname}`,\n      };\n    }\n  }\n  // Fallback\n  return STATIC_ENVIRONMENT_URLS.local;\n}\n\nexport function getUrlsForEnvironment(environment: PaymentKitEnvironment): EnvironmentUrls {\n  if (environment === \"tunnel\") {\n    return getTunnelUrls();\n  }\n  const urls = STATIC_ENVIRONMENT_URLS[environment];\n  if (!urls) {\n    console.warn(`[PaymentKit] Invalid environment \"${environment}\", falling back to local`);\n    return STATIC_ENVIRONMENT_URLS.local;\n  }\n  return urls;\n}\n\ntype FormFieldNames =\n  | \"customer_name\"\n  | \"customer_email\"\n  | \"customer_country\"\n  | \"customer_zip_code\"\n  | \"customer_business_name\"\n  | \"customer_address_line1\"\n  | \"customer_address_line2\"\n  | \"customer_city\"\n  | \"customer_state\"\n  | \"customer_tax_ids\"\n  | \"shipping_address_line1\"\n  | \"shipping_address_line2\"\n  | \"shipping_city\"\n  | \"shipping_state\"\n  | \"shipping_zip_code\"\n  | \"shipping_country\";\n\nexport type FormErrorCodes = \"required\" | \"invalid\";\n\nexport type CardSubmitOptions = {\n  skipCustomerValidation?: boolean;\n};\n\nexport type TInternalFuncs = {\n  submitPayment: (\n    fields: Partial<PaymentKitFields>,\n    options?: unknown,\n  ) => Promise<{ data: { [key: string]: unknown }; errors?: never } | { data?: never; errors: PaymentKitErrors }>;\n  cleanup?: () => void;\n};\n\nexport type PaymentKit = <T extends readonly PaymentMethod<unknown>[]>(options: {\n  environment?: PaymentKitEnvironment;\n  secureToken: string;\n  paymentMethods: T;\n  /** Card tokenization mode from checkout session */\n  cardTokenizationMode?: \"direct\" | \"vgs\";\n  /** VGS vault ID from checkout session */\n  vgsVaultId?: string;\n  /** VGS environment from checkout session */\n  vgsEnvironment?: string;\n  /** @internal Enable analytics test mode for e2e testing */\n  __enableAnalyticsTestMode?: boolean;\n}) => ExternalFuncsMapByPm<T> & {\n  submit: PaymentKitSubmitHandler<T>;\n  cleanup: () => void;\n};\n\ntype PaymentKitSubmitHandler<T extends readonly PaymentMethod<unknown>[]> = <\n  N extends keyof ExternalFuncsMapByPm<T>,\n>(options: {\n  fields: Partial<PaymentKitFields>;\n  paymentMethod: N;\n  options?: unknown;\n  onError: (error: PaymentKitErrors) => void;\n  onSuccess: (data: { [key: string]: unknown }) => void;\n}) => void;\n\nexport type PaymentKitStates = {\n  baseUrl: string;\n  apiBaseUrl: string;\n  secureToken: string;\n  environment: PaymentKitEnvironment;\n  tunnelXConnection: TunnelXIFrameConnection;\n  timingTracker: CheckoutTimingTracker;\n  /** Checkout request ID for correlating all API calls and analytics events */\n  checkoutRequestId: string;\n  /** Card tokenization mode: 'direct' (KMS) or 'vgs' (VGS Collect + proxy) */\n  cardTokenizationMode?: \"direct\" | \"vgs\";\n  /** VGS vault ID (only when cardTokenizationMode is 'vgs') */\n  vgsVaultId?: string;\n  /** VGS environment: 'sandbox' or 'live' (only when cardTokenizationMode is 'vgs') */\n  vgsEnvironment?: string;\n  /** @internal Promise that resolves when session config (incl. VGS mode) is auto-detected */\n  _sessionConfigReady?: Promise<void>;\n};\n\nexport type PaymentKitErrors = {\n  root?: string;\n  card_pan?: CardErrorCode;\n  card_exp?: CardErrorCode;\n  card_cvc?: CardErrorCode;\n  paypal?: string;\n  google_pay?: string;\n  apple_pay?: string;\n  processor_id?: string;\n  amount?: string;\n  currency?: string;\n  country?: string;\n} & { [key in FormFieldNames]?: FormErrorCodes | string };\n\nexport type PaymentKitFields = { [key in FormFieldNames]: string };\n\nexport type PaymentMethod<TExternalFuncs = unknown, TName = string> = (paymentKitStates: PaymentKitStates) => {\n  name: TName;\n  externalFuncs: TExternalFuncs;\n  internalFuncs: TInternalFuncs;\n};\n\nexport type ExternalFuncsMapByPm<T extends readonly PaymentMethod<unknown>[]> = {\n  [K in T[number] as ReturnType<K>[\"name\"]]: ReturnType<K>[\"externalFuncs\"];\n};\n","import { version as PACKAGE_VERSION } from \"../package.json\";\nimport { AnalyticsService, CheckoutTimingTracker } from \"./analytics\";\nimport { connectToTunnelXIframe } from \"./penpal/connect-tunnel-x\";\nimport type { ExternalFuncsMapByPm, PaymentKit as PaymentKitType } from \"./types\";\nimport { getUrlsForEnvironment } from \"./types\";\nimport { createCheckoutIFrame } from \"./utils\";\nimport { getOrCreateCheckoutRequestId } from \"./utils/checkout-request-id\";\n\n/** Append script to DOM, falling back to head if body not ready */\nfunction appendScriptToDOM(script: HTMLScriptElement): void {\n  const target = document.body ?? document.head;\n  target.appendChild(script);\n}\n\n/**\n * Map fraud script URL to the script ID that the processor's script expects.\n * Airwallex's fingerprint script looks for `id=\"airwallex-fraud-api\"` via getElementById.\n * Other processors may have different ID requirements.\n */\nfunction getFraudScriptId(url: string): string {\n  // Airwallex expects exactly \"airwallex-fraud-api\" as the script ID\n  if (url.includes(\"airwallex.com\")) {\n    return \"airwallex-fraud-api\";\n  }\n  // Fallback for other processors: use a hash-based ID\n  const urlObj = new URL(url);\n  const hash = btoa(urlObj.origin + urlObj.pathname)\n    .replace(/[^a-zA-Z0-9]/g, \"\")\n    .slice(0, 12);\n  return `pk-fraud-script-${hash}`;\n}\n\ntype PaymentKitReturnType = ReturnType<PaymentKitType>;\n\nconst createTunnelXConnection = (baseUrl: string, apiBaseUrl: string, token: string) => {\n  const iframe = createCheckoutIFrame(\"tunnel-x\", baseUrl, {\n    checkout_token: token,\n    api_base_url: apiBaseUrl,\n  });\n  // Tunnel-X is a hidden communication iframe, not a visible UI element\n  Object.assign(iframe.style, { width: \"0\", height: \"0\", position: \"absolute\", visibility: \"hidden\" });\n  document.body.appendChild(iframe);\n\n  const connection = connectToTunnelXIframe(iframe, {});\n\n  let destroyed = false;\n  const unmount = () => {\n    if (destroyed) return;\n    destroyed = true;\n    connection.destroy();\n    iframe.remove();\n  };\n\n  return { unmount, connection };\n};\n\nconst PaymentKit: PaymentKitType = ({\n  environment = \"production\",\n  secureToken,\n  paymentMethods,\n  cardTokenizationMode,\n  vgsVaultId,\n  vgsEnvironment,\n  __enableAnalyticsTestMode,\n}) => {\n  type PaymentMethods = typeof paymentMethods;\n\n  // Resolve URLs from environment\n  const { baseUrl, apiBaseUrl } = getUrlsForEnvironment(environment);\n\n  // Log version for debugging\n  console.log(`[PaymentKit] v${PACKAGE_VERSION} initialized (env: ${environment})`);\n\n  // Generate checkout request ID for correlating all API calls and analytics events\n  // This is idempotent - same ID is reused across multiple PaymentKit instantiations\n  const checkoutRequestId = getOrCreateCheckoutRequestId(environment);\n  console.log(`[PaymentKit] checkout_request_id: ${checkoutRequestId}`);\n\n  // Initialize analytics and identify with secure token for correlation\n  AnalyticsService.init(apiBaseUrl, __enableAnalyticsTestMode);\n  AnalyticsService.identify(secureToken);\n\n  // Create timing tracker for this checkout session\n  const timingTracker = new CheckoutTimingTracker(secureToken, checkoutRequestId);\n\n  // Track page ready immediately\n  timingTracker.trackPageReady();\n\n  const { connection: tunnelXConnection, unmount: unmountTunnelX } = createTunnelXConnection(\n    baseUrl,\n    apiBaseUrl,\n    secureToken,\n  );\n\n  const paymentKitStates = {\n    baseUrl,\n    apiBaseUrl,\n    secureToken,\n    environment,\n    tunnelXConnection,\n    timingTracker,\n    checkoutRequestId,\n    cardTokenizationMode,\n    vgsVaultId,\n    vgsEnvironment,\n    _sessionConfigReady: undefined as Promise<void> | undefined,\n    _fraudScriptIds: [] as string[],\n    _fraudScriptsReady: undefined as Promise<void> | undefined,\n  };\n\n  // Auto-detect VGS mode from session API if not explicitly provided.\n  // The promise resolves before any card mount or submit needs the mode.\n  if (cardTokenizationMode === undefined) {\n    const sessionConfigUrl = `${apiBaseUrl}/api/checkout-sessions/token/${secureToken}`;\n    console.log(\n      `[PaymentKit] cardTokenizationMode not provided — auto-detecting from session API: ${sessionConfigUrl}`,\n    );\n    paymentKitStates._sessionConfigReady = fetch(sessionConfigUrl)\n      .then((resp) => {\n        if (!resp.ok) {\n          console.warn(`[PaymentKit] Session config fetch failed with status ${resp.status}`);\n          return null;\n        }\n        return resp.json();\n      })\n      .then((session) => {\n        if (session && typeof session === \"object\" && typeof session.card_tokenization_mode === \"string\") {\n          paymentKitStates.cardTokenizationMode = session.card_tokenization_mode || \"direct\";\n          console.log(\n            `[PaymentKit] Session config detected — cardTokenizationMode: ${paymentKitStates.cardTokenizationMode}`,\n          );\n\n          // Validate VGS config from API before trusting it\n          const vaultId = session.vgs_vault_id;\n          const vgsEnv = session.vgs_environment;\n          if (vaultId && /^tnt[a-z0-9]+$/.test(vaultId) && (vgsEnv === \"sandbox\" || vgsEnv === \"live\")) {\n            paymentKitStates.vgsVaultId = vaultId;\n            paymentKitStates.vgsEnvironment = vgsEnv;\n            console.log(`[PaymentKit] VGS config valid — vaultId: ${vaultId}, environment: ${vgsEnv}`);\n          } else if (paymentKitStates.cardTokenizationMode === \"vgs\") {\n            console.warn(\n              `[PaymentKit] Invalid VGS config from session API (vaultId: ${vaultId}, env: ${vgsEnv}), falling back to direct mode`,\n            );\n            paymentKitStates.cardTokenizationMode = \"direct\";\n          }\n\n          // Inject fraud fingerprinting scripts (for processors that support device fingerprinting)\n          if (session?.fraud_script_urls?.length) {\n            const loadPromises: Promise<void>[] = [];\n\n            session.fraud_script_urls.forEach((url: string) => {\n              const scriptId = getFraudScriptId(url);\n\n              if (document.getElementById(scriptId)) {\n                console.log(`[PaymentKit] Fraud script already present: ${scriptId}`);\n                loadPromises.push(Promise.resolve());\n                return;\n              }\n\n              const script = document.createElement(\"script\");\n              script.type = \"text/javascript\";\n              script.async = true;\n              script.id = scriptId;\n              script.src = url;\n              script.dataset.orderSessionId = checkoutRequestId;\n\n              const loadPromise = new Promise<void>((resolve) => {\n                script.onload = () => {\n                  console.log(`[PaymentKit] Fraud script loaded: ${scriptId}`);\n                  resolve();\n                };\n                script.onerror = () => {\n                  console.error(\n                    `[PaymentKit] Failed to load fraud prevention script. If using Content-Security-Policy, add to script-src: ${new URL(url).origin}`,\n                  );\n                  resolve(); // Resolve anyway — don't block payment on optional fraud script\n                };\n              });\n\n              loadPromises.push(loadPromise);\n              paymentKitStates._fraudScriptIds.push(scriptId);\n              appendScriptToDOM(script);\n            });\n\n            paymentKitStates._fraudScriptsReady = Promise.all(loadPromises).then(() => {\n              console.log(`[PaymentKit] All ${loadPromises.length} fraud fingerprinting script(s) ready`);\n            });\n\n            // Log each injected script with its data-order-session-id for debugging\n            session.fraud_script_urls.forEach((url: string) => {\n              const scriptId = getFraudScriptId(url);\n              console.log(\n                `[PaymentKit] Fraud script injected: id=${scriptId}, data-order-session-id=${checkoutRequestId}, src=${url}`,\n              );\n            });\n            console.log(`[PaymentKit] Injected ${session.fraud_script_urls.length} fraud fingerprinting script(s)`);\n          }\n        } else {\n          console.log(\"[PaymentKit] Session response missing card_tokenization_mode — defaulting to direct mode\");\n          paymentKitStates.cardTokenizationMode = \"direct\";\n        }\n      })\n      .catch((err) => {\n        console.error(\"[PaymentKit] Session config fetch error — falling back to direct mode:\", err);\n        paymentKitStates.cardTokenizationMode = \"direct\";\n      });\n  } else {\n    console.log(`[PaymentKit] cardTokenizationMode explicitly set: ${cardTokenizationMode}`);\n  }\n\n  const pmInstances = paymentMethods.map((paymentMethod) => paymentMethod(paymentKitStates));\n\n  const externalFuncsMapByPm: ExternalFuncsMapByPm<PaymentMethods> = pmInstances.reduce(\n    (acc, { name, externalFuncs }) => {\n      // @ts-expect-error - typecase this better in future\n      acc[name] = externalFuncs;\n      return acc;\n    },\n    {} as ExternalFuncsMapByPm<PaymentMethods>,\n  );\n\n  const submit: PaymentKitReturnType[\"submit\"] = ({\n    paymentMethod: paymentMethodName,\n    fields,\n    options,\n    onSuccess,\n    onError,\n  }) => {\n    const paymentMethod = pmInstances.find(({ name }) => name === paymentMethodName);\n    if (!paymentMethod) {\n      onError({ root: \"payment_method_not_found\" });\n      return;\n    }\n    paymentMethod.internalFuncs\n      .submitPayment(fields, options)\n      .then(({ data, errors }) => {\n        errors ? onError(errors) : onSuccess(data);\n      })\n      .catch((e) => {\n        console.error(\"PaymentKit:submit:catch\", e);\n\n        // Try to extract error message from response\n        if (e?.response?.data) {\n          onError(e.response.data);\n        } else if (e?.message) {\n          onError({ root: e.message });\n        } else {\n          onError({ root: \"unknown_error\" });\n        }\n      });\n  };\n\n  const cleanup = () => {\n    // Clean up fraud fingerprinting scripts\n    for (const scriptId of paymentKitStates._fraudScriptIds) {\n      const script = document.getElementById(scriptId);\n      if (script) {\n        script.remove();\n      }\n    }\n    paymentKitStates._fraudScriptIds = [];\n\n    // Clean up all payment method instances\n    for (const pm of pmInstances) {\n      if (pm.internalFuncs.cleanup) {\n        pm.internalFuncs.cleanup();\n      }\n    }\n    unmountTunnelX();\n  };\n\n  return {\n    submit,\n    cleanup,\n    ...externalFuncsMapByPm,\n  };\n};\n\nexport type { PaymentKitEnvironment, PaymentKitFields } from \"./types\";\n\nexport default PaymentKit;\n"],"mappings":"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"}