@tagadapay/plugin-sdk 3.1.12 → 3.1.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-cdn.js +397 -11
- package/dist/data/iso3166.d.ts +23 -33
- package/dist/data/iso3166.js +134 -198
- package/dist/data/languages.d.ts +5 -64
- package/dist/data/languages.js +23 -143
- package/dist/external-tracker.js +623 -3426
- package/dist/external-tracker.min.js +2 -25
- package/dist/external-tracker.min.js.map +4 -4
- package/dist/react/config/payment.d.ts +14 -4
- package/dist/react/config/payment.js +47 -9
- package/dist/react/hooks/useCheckout.d.ts +3 -0
- package/dist/react/hooks/useCheckout.js +4 -1
- package/dist/react/hooks/useISOData.js +1 -1
- package/dist/react/hooks/usePaymentPolling.d.ts +3 -3
- package/dist/react/hooks/usePluginConfig.js +9 -10
- package/dist/react/providers/TagadaProvider.js +1 -1
- package/dist/tagada-react-sdk-minimal.min.js +36 -0
- package/dist/tagada-react-sdk-minimal.min.js.map +7 -0
- package/dist/tagada-react-sdk.js +37821 -0
- package/dist/tagada-react-sdk.min.js +78 -0
- package/dist/tagada-react-sdk.min.js.map +7 -0
- package/dist/tagada-sdk.js +16044 -0
- package/dist/tagada-sdk.min.js +32 -0
- package/dist/tagada-sdk.min.js.map +7 -0
- package/dist/v2/cdn-react-minimal.d.ts +23 -0
- package/dist/v2/cdn-react-minimal.js +26 -0
- package/dist/v2/core/client.d.ts +4 -2
- package/dist/v2/core/client.js +5 -4
- package/dist/v2/core/config/environment.js +2 -1
- package/dist/v2/core/errors.d.ts +75 -0
- package/dist/v2/core/errors.js +104 -0
- package/dist/v2/core/funnelClient.d.ts +100 -10
- package/dist/v2/core/funnelClient.js +121 -27
- package/dist/v2/core/isoData.d.ts +4 -4
- package/dist/v2/core/isoData.js +7 -7
- package/dist/v2/core/pixelMapping.d.ts +49 -0
- package/dist/v2/core/pixelMapping.js +363 -0
- package/dist/v2/core/resources/apiClient.d.ts +2 -0
- package/dist/v2/core/resources/apiClient.js +52 -9
- package/dist/v2/core/resources/checkout.d.ts +99 -30
- package/dist/v2/core/resources/checkout.js +14 -0
- package/dist/v2/core/resources/customer.d.ts +20 -19
- package/dist/v2/core/resources/expressPaymentMethods.d.ts +1 -0
- package/dist/v2/core/resources/funnel.d.ts +17 -17
- package/dist/v2/core/resources/payments.d.ts +89 -13
- package/dist/v2/core/resources/payments.js +27 -9
- package/dist/v2/core/resources/postPurchases.d.ts +17 -0
- package/dist/v2/core/resources/postPurchases.js +20 -0
- package/dist/v2/core/types.d.ts +50 -12
- package/dist/v2/core/types.js +0 -3
- package/dist/v2/core/utils/checkout.d.ts +2 -2
- package/dist/v2/core/utils/checkout.js +7 -2
- package/dist/v2/core/utils/currency.d.ts +14 -0
- package/dist/v2/core/utils/currency.js +40 -0
- package/dist/v2/core/utils/deviceInfo.d.ts +0 -10
- package/dist/v2/core/utils/deviceInfo.js +152 -76
- package/dist/v2/core/utils/index.d.ts +1 -0
- package/dist/v2/core/utils/index.js +2 -0
- package/dist/v2/core/utils/order.d.ts +13 -9
- package/dist/v2/core/utils/pluginConfig.d.ts +8 -0
- package/dist/v2/core/utils/pluginConfig.js +36 -12
- package/dist/v2/index.d.ts +6 -3
- package/dist/v2/index.js +4 -2
- package/dist/v2/react/components/FunnelScriptInjector.js +166 -77
- package/dist/v2/react/components/StripeExpressButton.d.ts +13 -0
- package/dist/v2/react/components/StripeExpressButton.js +171 -0
- package/dist/v2/react/components/WhopCheckout.d.ts +24 -0
- package/dist/v2/react/components/WhopCheckout.js +237 -0
- package/dist/v2/react/hooks/__examples__/FunnelContextExample.js +1 -1
- package/dist/v2/react/hooks/payment-actions/useAirwallexRadarAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useAirwallexRadarAction.js +181 -0
- package/dist/v2/react/hooks/payment-actions/useErrorAction.d.ts +9 -0
- package/dist/v2/react/hooks/payment-actions/useErrorAction.js +21 -0
- package/dist/v2/react/hooks/payment-actions/useFinixRadarAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useFinixRadarAction.js +187 -0
- package/dist/v2/react/hooks/payment-actions/useKessPayAction.d.ts +11 -0
- package/dist/v2/react/hooks/payment-actions/useKessPayAction.js +91 -0
- package/dist/v2/react/hooks/payment-actions/useMasterCardAction.d.ts +24 -0
- package/dist/v2/react/hooks/payment-actions/useMasterCardAction.js +221 -0
- package/dist/v2/react/hooks/payment-actions/usePaymentActionHandler.d.ts +15 -0
- package/dist/v2/react/hooks/payment-actions/usePaymentActionHandler.js +142 -0
- package/dist/v2/react/hooks/payment-actions/useProcessorAuthAction.d.ts +3 -0
- package/dist/v2/react/hooks/payment-actions/useProcessorAuthAction.js +31 -0
- package/dist/v2/react/hooks/payment-actions/useRedirectAction.d.ts +10 -0
- package/dist/v2/react/hooks/payment-actions/useRedirectAction.js +35 -0
- package/dist/v2/react/hooks/payment-actions/useStripeRadarAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useStripeRadarAction.js +192 -0
- package/dist/v2/react/hooks/payment-actions/useThreedsAuthAction.d.ts +14 -0
- package/dist/v2/react/hooks/payment-actions/useThreedsAuthAction.js +81 -0
- package/dist/v2/react/hooks/payment-actions/useTrustFlowAction.d.ts +11 -0
- package/dist/v2/react/hooks/payment-actions/useTrustFlowAction.js +84 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentInstruments.d.ts +14 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentInstruments.js +36 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentProcessors.d.ts +31 -0
- package/dist/v2/react/hooks/payment-processing/usePaymentProcessors.js +212 -0
- package/dist/v2/react/hooks/payment-redirect/useAirwallex3dsReturn.d.ts +14 -0
- package/dist/v2/react/hooks/payment-redirect/useAirwallex3dsReturn.js +207 -0
- package/dist/v2/react/hooks/payment-redirect/useGenericPaymentReturn.d.ts +12 -0
- package/dist/v2/react/hooks/payment-redirect/useGenericPaymentReturn.js +101 -0
- package/dist/v2/react/hooks/useApplePayCheckout.js +8 -8
- package/dist/v2/react/hooks/useCheckoutQuery.d.ts +16 -0
- package/dist/v2/react/hooks/useCheckoutQuery.js +63 -10
- package/dist/v2/react/hooks/useFunnel.d.ts +15 -4
- package/dist/v2/react/hooks/useFunnel.js +8 -4
- package/dist/v2/react/hooks/useGeoLocation.d.ts +2 -1
- package/dist/v2/react/hooks/useGeoLocation.js +4 -2
- package/dist/v2/react/hooks/useGoogleAutocomplete.d.ts +2 -0
- package/dist/v2/react/hooks/useGoogleAutocomplete.js +29 -15
- package/dist/v2/react/hooks/useISOData.d.ts +2 -5
- package/dist/v2/react/hooks/useISOData.js +26 -27
- package/dist/v2/react/hooks/usePaymentPolling.d.ts +3 -3
- package/dist/v2/react/hooks/usePaymentQuery.d.ts +18 -5
- package/dist/v2/react/hooks/usePaymentQuery.js +63 -1015
- package/dist/v2/react/hooks/usePaymentRetrieve.d.ts +3 -2
- package/dist/v2/react/hooks/usePaymentRetrieve.js +3 -1
- package/dist/v2/react/hooks/usePixelTracking.d.ts +5 -48
- package/dist/v2/react/hooks/usePixelTracking.js +283 -504
- package/dist/v2/react/hooks/usePostPurchasesQuery.js +34 -2
- package/dist/v2/react/hooks/useRemappableParams.d.ts +2 -6
- package/dist/v2/react/hooks/useRemappableParams.js +23 -23
- package/dist/v2/react/hooks/useSetPaymentMethod.d.ts +16 -0
- package/dist/v2/react/hooks/useSetPaymentMethod.js +33 -0
- package/dist/v2/react/hooks/useShippingRatesQuery.js +13 -5
- package/dist/v2/react/hooks/useStepConfig.d.ts +23 -6
- package/dist/v2/react/hooks/useStepConfig.js +14 -7
- package/dist/v2/react/hooks/useTranslation.js +23 -8
- package/dist/v2/react/hooks/useWhopPaymentPolling.d.ts +30 -0
- package/dist/v2/react/hooks/useWhopPaymentPolling.js +61 -0
- package/dist/v2/react/index.d.ts +15 -1
- package/dist/v2/react/index.js +7 -0
- package/dist/v2/react/providers/ExpressPaymentMethodsProvider.d.ts +3 -1
- package/dist/v2/react/providers/ExpressPaymentMethodsProvider.js +12 -2
- package/dist/v2/react/providers/TagadaProvider.js +74 -5
- package/dist/v2/standalone/external-tracker.d.ts +52 -46
- package/dist/v2/standalone/external-tracker.js +205 -98
- package/dist/v2/standalone/index.d.ts +40 -0
- package/dist/v2/standalone/index.js +148 -1
- package/dist/v2/standalone/payment-service.d.ts +134 -0
- package/dist/v2/standalone/payment-service.js +928 -0
- package/package.json +6 -4
- package/dist/react/utils/__tests__/urlUtils.test.d.ts +0 -1
- package/dist/react/utils/__tests__/urlUtils.test.js +0 -189
- package/dist/v2/core/__tests__/pathRemapping.test.d.ts +0 -11
- package/dist/v2/core/__tests__/pathRemapping.test.js +0 -776
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/v2/core/config/environment.ts", "../src/v2/core/resources/funnel.ts", "../src/v2/core/utils/eventDispatcher.ts", "../src/v2/core/utils/tokenStorage.ts", "../src/v2/core/utils/sessionStorage.ts", "../src/v2/core/utils/previewMode.ts", "../src/v2/core/utils/previewModeIndicator.ts", "../src/v2/core/funnelClient.ts", "../../../node_modules/.pnpm/path-to-regexp@8.3.0/node_modules/path-to-regexp/src/index.ts", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/constants.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/bind.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/utils.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/AxiosError.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/null.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/toFormData.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/defaults/transitional.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/FormData.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/Blob.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/index.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/common/utils.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/index.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/formDataToJSON.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/defaults/index.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/AxiosHeaders.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/transformData.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/CanceledError.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/settle.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseProtocol.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/speedometer.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/throttle.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/progressEventReducer.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/resolveConfig.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/composeSignals.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/trackStream.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/fetch.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/adapters.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/env/data.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/validator.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/Axios.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/spread.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/HttpStatusCode.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/axios.js", "../../../node_modules/.pnpm/map-obj@4.3.0/node_modules/map-obj/index.js", "../../../node_modules/.pnpm/camelcase@5.3.1/node_modules/camelcase/index.js", "../../../node_modules/.pnpm/quick-lru@4.0.1/node_modules/quick-lru/index.js", "../../../node_modules/.pnpm/camelcase-keys@6.2.2/node_modules/camelcase-keys/index.js", "../../../node_modules/.pnpm/os@0.1.2/node_modules/os/index.js", "../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs", "../../../node_modules/.pnpm/lower-case@2.0.2/node_modules/lower-case/src/index.ts", "../../../node_modules/.pnpm/no-case@3.0.4/node_modules/no-case/src/index.ts", "../../../node_modules/.pnpm/dot-case@3.0.4/node_modules/dot-case/src/index.ts", "../../../node_modules/.pnpm/snake-case@3.0.4/node_modules/snake-case/src/index.ts", "../../../node_modules/.pnpm/to-no-case@1.0.2/node_modules/to-no-case/index.js", "../../../node_modules/.pnpm/to-space-case@1.0.0/node_modules/to-space-case/index.js", "../../../node_modules/.pnpm/to-snake-case@1.0.0/node_modules/to-snake-case/index.js", "../../../node_modules/.pnpm/snakecase-keys@3.2.1/node_modules/snakecase-keys/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/BasisTheoryApiError.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/logging.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/utils.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/BasisTheoryValidationError.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/HttpClientError.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/common/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/service/types.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/service/BasisTheoryService.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/service/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/service/CrudBuilder.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/application-templates/BasisTheoryApplicationTemplates.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/application-templates/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/applicationKeys/BasisTheoryApplicationKeys.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/applicationKeys/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/applications/BasisTheoryApplications.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/applications/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/tokenize/BasisTheoryTokenize.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/tokenize/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/services/tokenize.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/tokens/BasisTheoryTokens.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/tokens/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/services/tokens.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/proxy/BasisTheoryProxy.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/proxy/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/services/proxy.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/token-intents/BasisTheoryTokenIntents.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/token-intents/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/services/token-intents.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/services/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/script.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/constants.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/load.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/elements/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/logs/BasisTheoryLogs.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/logs/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/permissions/BasisTheoryPermissions.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/permissions/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/proxies/BasisTheoryProxies.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/proxies/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/reactor-formulas/BasisTheoryReactorFormulas.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/reactor-formulas/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/reactors/BasisTheoryReactors.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/reactors/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/sessions/BasisTheorySessions.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/sessions/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/tenants/BasisTheoryTenants.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/tenants/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/threeds/BasisTheoryThreeDs.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/threeds/index.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/BasisTheory.js", "../../../node_modules/.pnpm/@basis-theory+basis-theory-js@4.30.0/node_modules/@basis-theory/basis-theory-js/index.js", "../../../node_modules/.pnpm/@basis-theory+web-threeds@1.3.5/node_modules/@basis-theory/web-threeds/dist/module/module.js", "../src/v2/standalone/index.ts", "../src/v2/core/client.ts", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/bind.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/utils.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/AxiosError.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/null.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/toFormData.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/AxiosURLSearchParams.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/buildURL.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/InterceptorManager.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/defaults/transitional.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/FormData.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/Blob.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/index.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/common/utils.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/index.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/toURLEncodedForm.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/formDataToJSON.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/defaults/index.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseHeaders.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/AxiosHeaders.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/transformData.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/isCancel.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/CanceledError.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/settle.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseProtocol.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/speedometer.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/throttle.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/progressEventReducer.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isURLSameOrigin.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/cookies.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isAbsoluteURL.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/combineURLs.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/buildFullPath.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/mergeConfig.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/resolveConfig.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/xhr.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/composeSignals.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/trackStream.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/fetch.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/adapters.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/dispatchRequest.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/env/data.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/validator.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/Axios.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/CancelToken.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/spread.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isAxiosError.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/HttpStatusCode.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/axios.js", "../../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/index.js", "../src/v2/core/errors.ts", "../src/v2/core/resources/apiClient.ts", "../src/v2/core/utils/deviceInfo.ts", "../src/v2/core/utils/eventBus.ts", "../src/v2/core/utils/jwtDecoder.ts", "../src/v2/core/utils/pluginConfig.ts", "../src/v2/core/utils/env.ts", "../src/v2/core/utils/authHandoff.ts", "../src/v2/core/resources/checkout.ts", "../src/config/basisTheory.ts", "../src/react/config/payment.ts", "../src/v2/core/resources/shippingRates.ts", "../src/v2/core/resources/payments.ts", "../src/v2/core/resources/orders.ts", "../src/v2/core/resources/expressPaymentMethods.ts", "../src/v2/core/resources/storeConfig.ts", "../src/v2/core/resources/threeds.ts", "../src/data/iso3166.ts", "../src/v2/core/isoData.ts", "../src/v2/core/googleAutocomplete.ts", "../src/v2/core/utils/products.ts", "../src/v2/core/utils/order.ts", "../src/v2/core/utils/currency.ts", "../src/v2/core/utils/checkout.ts", "../src/v2/core/utils/promotions.ts", "../src/v2/core/utils/postPurchases.ts", "../src/v2/core/utils/orderBump.ts", "../src/v2/core/utils/funnelQueryKeys.ts", "../src/v2/core/utils/configHotReload.ts", "../src/v2/core/pathRemapping.ts", "../src/v2/standalone/payment-service.ts", "../src/v2/standalone/external-tracker.ts"],
|
|
4
|
+
"sourcesContent": ["import { ApiConfig, Environment, EnvironmentConfig } from '../types';\r\n\r\n/**\r\n * Get cookie value by name\r\n */\r\nfunction getCookie(name: string): string | null {\r\n if (typeof document === 'undefined') return null;\r\n const value = `; ${document.cookie}`;\r\n const parts = value.split(`; ${name}=`);\r\n if (parts.length === 2) return parts.pop()?.split(';').shift() || null;\r\n return null;\r\n}\r\n\r\n/**\r\n * \u26A0\uFE0F IMPORTANT: Runtime Environment Detection\r\n * \r\n * This SDK uses RUNTIME hostname detection, NOT build-time environment variables.\r\n * This ensures the SDK always connects to the correct API based on where it's deployed.\r\n * \r\n * Environment detection priority (highest to lowest):\r\n * 1. **tagadaClientEnv** - Explicit override via URL param, localStorage, or cookie\r\n * Example: ?tagadaClientEnv=production\r\n * 2. **Production domains** \u2192 production API (app.tagadapay.com)\r\n * 3. **Dev/staging domains** \u2192 development API (app.tagadapay.dev, vercel.app, etc.)\r\n * 4. **Localhost/local IPs** \u2192 local API (localhost, 127.0.0.1, etc.)\r\n * - Can be overridden via window.__TAGADA_ENV__.TAGADA_ENVIRONMENT\r\n * 5. **Default fallback** \u2192 production API (safest for unknown domains)\r\n * \r\n * Build-time .env variables (VITE_*, REACT_APP_*, NEXT_PUBLIC_*) are IGNORED\r\n * to prevent incorrect API connections when plugins are deployed to different environments.\r\n */\r\n\r\n/**\r\n * Environment configurations for different deployment environments\r\n */\r\nexport const ENVIRONMENT_CONFIGS: Record<Environment, ApiConfig> = {\r\n production: {\r\n baseUrl: 'https://app.tagadapay.com',\r\n endpoints: {\r\n checkout: {\r\n sessionInit: '/api/v1/checkout/session/init',\r\n sessionInitAsync: '/api/v1/checkout/session/init-async',\r\n sessionStatus: '/api/v1/checkout/session/status',\r\n asyncStatus: '/api/public/v1/checkout/async-status',\r\n },\r\n customer: {\r\n profile: '/api/v1/customer/profile',\r\n session: '/api/v1/customer/session',\r\n },\r\n store: {\r\n config: '/api/v1/store/config',\r\n },\r\n },\r\n },\r\n development: {\r\n baseUrl: 'https://app.tagadapay.dev',\r\n endpoints: {\r\n checkout: {\r\n sessionInit: '/api/v1/checkout/session/init',\r\n sessionInitAsync: '/api/v1/checkout/session/init-async',\r\n sessionStatus: '/api/v1/checkout/session/status',\r\n asyncStatus: '/api/public/v1/checkout/async-status',\r\n },\r\n customer: {\r\n profile: '/api/v1/customer/profile',\r\n session: '/api/v1/customer/session',\r\n },\r\n store: {\r\n config: '/api/v1/store/config',\r\n },\r\n },\r\n },\r\n local: {\r\n baseUrl: 'http://app.localhost:3000',\r\n endpoints: {\r\n checkout: {\r\n sessionInit: '/api/v1/checkout/session/init',\r\n sessionInitAsync: '/api/v1/checkout/session/init-async',\r\n sessionStatus: '/api/v1/checkout/session/status',\r\n asyncStatus: '/api/public/v1/checkout/async-status',\r\n },\r\n customer: {\r\n profile: '/api/v1/customer/profile',\r\n session: '/api/v1/customer/session',\r\n },\r\n store: {\r\n config: '/api/v1/store/config',\r\n },\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * Get the environment configuration based on the current environment\r\n * \r\n * Checks for custom base URL override via tagadaClientBaseUrl parameter\r\n */\r\nexport function getEnvironmentConfig(environment: Environment = 'local'): EnvironmentConfig {\r\n const apiConfig = ENVIRONMENT_CONFIGS[environment];\r\n\r\n if (!apiConfig) {\r\n console.warn(`Unknown environment: ${environment}. Falling back to local.`);\r\n return {\r\n environment: 'local',\r\n apiConfig: ENVIRONMENT_CONFIGS.local,\r\n };\r\n }\r\n\r\n // \uD83C\uDFAF Check for custom base URL override (URL > localStorage > cookie)\r\n let customBaseUrl: string | null = null;\r\n\r\n if (typeof window !== 'undefined') {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n customBaseUrl = urlParams.get('tagadaClientBaseUrl');\r\n\r\n if (!customBaseUrl) {\r\n try {\r\n customBaseUrl = localStorage.getItem('tgd_client_base_url') || getCookie('tgd_client_base_url');\r\n } catch {\r\n // Storage not available\r\n }\r\n }\r\n }\r\n\r\n // If custom base URL is set, override the apiConfig.baseUrl\r\n if (customBaseUrl) {\r\n console.log(`[SDK] Using custom API base URL override: ${customBaseUrl}`);\r\n return {\r\n environment,\r\n apiConfig: {\r\n ...apiConfig,\r\n baseUrl: customBaseUrl,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n environment,\r\n apiConfig,\r\n };\r\n}\r\n\r\n/**\r\n * Build a complete API URL from environment config and endpoint path\r\n */\r\nexport function buildApiUrl(config: EnvironmentConfig, endpointPath: string): string {\r\n return `${config.apiConfig.baseUrl}${endpointPath}`;\r\n}\r\n\r\n/**\r\n * Get a specific endpoint URL\r\n */\r\nexport function getEndpointUrl(\r\n config: EnvironmentConfig,\r\n category: keyof ApiConfig['endpoints'],\r\n endpoint: string,\r\n): string {\r\n const categoryEndpoints = config.apiConfig.endpoints[category] as Record<string, string>;\r\n const endpointPath = categoryEndpoints[endpoint];\r\n\r\n if (!endpointPath) {\r\n throw new Error(`Endpoint not found: ${category}.${endpoint}`);\r\n }\r\n\r\n return buildApiUrl(config, endpointPath);\r\n}\r\n\r\n/**\r\n * Auto-detect environment based on hostname and URL patterns at RUNTIME\r\n * \u26A0\uFE0F IMPORTANT: Ignores build-time .env variables to ensure correct detection in all environments\r\n * .env variables are ONLY used for local development via window.__TAGADA_ENV__\r\n * \r\n * Priority (highest to lowest):\r\n * 1. tagadaClientEnv - Explicit override via URL/localStorage/cookie\r\n * 2. __TAGADA_ENV__ - Local development override\r\n * 3. Hostname-based detection - Production/staging domains\r\n * 4. Default fallback - Production (safest)\r\n */\r\nexport function detectEnvironment(): Environment {\r\n console.log('[SDK] detectEnvironment() called');\r\n // Check if we're in browser\r\n if (typeof window === 'undefined') {\r\n return 'local'; // SSR fallback\r\n }\r\n\r\n // \uD83C\uDFAF PRIORITY 1: Check for explicit tagadaClientEnv override (URL > localStorage > cookie)\r\n // This allows forcing environment regardless of hostname\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const urlEnv = urlParams.get('tagadaClientEnv');\r\n if (urlEnv && (urlEnv === 'production' || urlEnv === 'development' || urlEnv === 'local')) {\r\n console.log(`[SDK] Using explicit environment override: ${urlEnv}`);\r\n return urlEnv as Environment;\r\n }\r\n\r\n // Check localStorage/cookie for persisted override\r\n try {\r\n const storageEnv = localStorage.getItem('tgd_client_env') || getCookie('tgd_client_env');\r\n if (storageEnv && (storageEnv === 'production' || storageEnv === 'development' || storageEnv === 'local')) {\r\n console.log(`[SDK] Using persisted environment override: ${storageEnv}`);\r\n return storageEnv as Environment;\r\n }\r\n } catch {\r\n // Storage not available\r\n }\r\n\r\n const hostname = window.location.hostname;\r\n const href = window.location.href;\r\n\r\n console.log(`[SDK] detectEnvironment() - hostname: \"${hostname}\"`);\r\n\r\n // 1. Check for LOCAL environment first (highest priority for dev)\r\n // Local: localhost, local IPs, local domains, or ngrok tunnels (used for local dev)\r\n if (\r\n hostname === 'localhost' ||\r\n hostname.startsWith('127.') ||\r\n hostname.startsWith('192.168.') ||\r\n hostname.startsWith('10.') ||\r\n hostname.includes('.local') ||\r\n hostname === '' ||\r\n hostname === '0.0.0.0' ||\r\n hostname.includes('ngrok-free.dev') ||\r\n hostname.includes('ngrok-free.app') ||\r\n hostname.includes('ngrok.io') ||\r\n hostname.includes('ngrok.app') ||\r\n hostname.includes('.loclx.io')\r\n ) {\r\n console.log('[SDK] detectEnvironment() - returning LOCAL');\r\n // For local development, allow override via window.__TAGADA_ENV__ (injected by dev server)\r\n if (typeof window !== 'undefined' && (window as any)?.__TAGADA_ENV__?.TAGADA_ENVIRONMENT) {\r\n const override = (window as any).__TAGADA_ENV__.TAGADA_ENVIRONMENT.toLowerCase();\r\n if (override === 'production' || override === 'development' || override === 'local') {\r\n console.log(`[SDK] Local override detected: ${override}`);\r\n return override as Environment;\r\n }\r\n }\r\n return 'local';\r\n }\r\n\r\n // 2. Production: deployed to production domains\r\n if (\r\n hostname === 'app.tagadapay.com' ||\r\n hostname.includes('tagadapay.com') ||\r\n hostname.includes('yourproductiondomain.com')\r\n ) {\r\n return 'production';\r\n }\r\n\r\n // 3. Development: deployed to staging/dev domains or has dev indicators\r\n if (\r\n hostname === 'app.tagadapay.dev' ||\r\n hostname.includes('tagadapay.dev') ||\r\n hostname.includes('vercel.app') ||\r\n hostname.includes('netlify.app') ||\r\n hostname.includes('surge.sh') ||\r\n hostname.includes('github.io') ||\r\n hostname.includes('herokuapp.com') ||\r\n hostname.includes('railway.app') ||\r\n href.includes('?env=dev') ||\r\n href.includes('?dev=true') ||\r\n href.includes('#dev')\r\n ) {\r\n return 'development';\r\n }\r\n // 4. Default fallback for unknown domains (production is safest)\r\n console.warn(`[SDK] Unknown domain: ${hostname}, defaulting to production`);\r\n return 'production';\r\n}\r\n\r\n/**\r\n * Check if we're running in local development environment\r\n * Uses centralized detectEnvironment() for consistency\r\n * \r\n * @param excludeCdn - If true, excludes CDN subdomains (e.g., instance-id.cdn.localhost)\r\n * @returns true if in local environment (excluding CDN if specified)\r\n */\r\nexport function isLocalEnvironment(excludeCdn = false): boolean {\r\n const env = detectEnvironment();\r\n\r\n if (env !== 'local') {\r\n return false;\r\n }\r\n\r\n // If we need to exclude CDN subdomains\r\n if (excludeCdn && typeof window !== 'undefined') {\r\n return !window.location.hostname.includes('.cdn.');\r\n }\r\n\r\n return true;\r\n}\r\n\r\n", "/**\r\n * Funnel Resource - API client for funnel navigation and session management\r\n */\r\n\r\nimport { ApiClient } from './apiClient';\r\n\r\n/**\r\n * Funnel action types enum\r\n * \r\n * Special types:\r\n * - DIRECT_NAVIGATION: Bypasses step conditions, navigates directly to targetStepId\r\n * - BACK_NAVIGATION: Similar to direct_navigation, used for backward navigation\r\n * \r\n * Common types (for logging/tracking):\r\n * - These are commonly used action types that align with funnel orchestrator conditions\r\n * - Navigation logic is based on step conditions.from, action types are primarily for analytics\r\n */\r\nexport enum FunnelActionType {\r\n // Special navigation types (bypass step conditions)\r\n DIRECT_NAVIGATION = 'direct_navigation',\r\n BACK_NAVIGATION = 'back_navigation',\r\n\r\n // User interaction types\r\n CONTINUE_CLICKED = 'continue_clicked',\r\n BUTTON_CLICK = 'button_click',\r\n FORM_SUBMIT = 'form_submit',\r\n\r\n // Payment actions\r\n PAYMENT_SUCCESS = 'payment_success',\r\n PAYMENT_FAILED = 'payment_failed',\r\n\r\n // Offer actions\r\n OFFER_ACCEPTED = 'offer_accepted',\r\n OFFER_DECLINED = 'offer_declined',\r\n\r\n // Cart actions\r\n CART_UPDATED = 'cart_updated',\r\n CART_ITEM_ADDED = 'cart_item_added',\r\n\r\n // Generic/custom actions\r\n CUSTOM = 'custom'\r\n}\r\n\r\n/**\r\n * Data structures for specific action types\r\n */\r\n\r\nexport type NextAction<T> = T & { [key: string]: unknown };\r\n\r\n// ============================================================================\r\n// SCALABLE RESOURCE SYSTEM\r\n// ============================================================================\r\n\r\n/**\r\n * Base resource data type - all resources must have an id and optional metadata\r\n */\r\nexport interface FunnelResourceData {\r\n id: string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Resource metadata for tracking, versioning, and relationships\r\n */\r\nexport interface ResourceMetadata {\r\n /** Plugin that created this resource */\r\n source?: string;\r\n /** Schema version for this resource */\r\n version?: string;\r\n /** Timestamp when resource was created */\r\n timestamp?: number;\r\n /** Scope: how long should this resource persist */\r\n scope?: 'global' | 'session' | 'step' | 'ephemeral';\r\n /** Tags for categorization and filtering */\r\n tags?: string[];\r\n /** Related resource IDs (for relationships) */\r\n relatedTo?: string[];\r\n /** Custom metadata */\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Wrapped resource with metadata\r\n */\r\nexport interface ResourceWithMetadata<T extends FunnelResourceData = FunnelResourceData> {\r\n data: T;\r\n meta: ResourceMetadata;\r\n}\r\n\r\n/**\r\n * Standard resource types for e-commerce (provides IntelliSense)\r\n * These are SUGGESTIONS, not limitations - any key is allowed via index signature\r\n */\r\nexport interface StandardResourceKeys {\r\n // Core commerce entities (hot context)\r\n order?: FunnelResourceData;\r\n customer?: FunnelResourceData;\r\n payment?: FunnelResourceData;\r\n checkout?: FunnelResourceData;\r\n cart?: FunnelResourceData;\r\n subscription?: FunnelResourceData;\r\n product?: FunnelResourceData;\r\n variant?: FunnelResourceData;\r\n\r\n // Named resources (persistent reference)\r\n mainOrder?: FunnelResourceData;\r\n upsellOrder?: FunnelResourceData;\r\n downsellOrder?: FunnelResourceData;\r\n\r\n // Collections (array support for multiple instances)\r\n orders?: FunnelResourceData[];\r\n customers?: FunnelResourceData[];\r\n payments?: FunnelResourceData[];\r\n}\r\n\r\n/**\r\n * Flexible resource map supporting:\r\n * 1. Single resources (order)\r\n * 2. Collections (orders[])\r\n * 3. Wrapped resources with metadata\r\n * 4. Completely custom keys\r\n * \r\n * @example Simple usage (backward compatible)\r\n * ```typescript\r\n * resources: {\r\n * order: { id: '123', amount: 100 }\r\n * }\r\n * ```\r\n * \r\n * @example Multiple instances via collections\r\n * ```typescript\r\n * resources: {\r\n * order: { id: 'main' }, // Hot context\r\n * orders: [ // Full collection\r\n * { id: 'main', type: 'initial' },\r\n * { id: 'upsell1', type: 'addon' }\r\n * ]\r\n * }\r\n * ```\r\n * \r\n * @example With metadata (opt-in)\r\n * ```typescript\r\n * resources: {\r\n * order: {\r\n * data: { id: '123', amount: 100 },\r\n * meta: { source: 'checkout-plugin', version: '2.0' }\r\n * }\r\n * }\r\n * ```\r\n * \r\n * @example Typed resources (opt-in strict typing)\r\n * ```typescript\r\n * interface MyResources {\r\n * order: Order; // Your typed Order interface\r\n * customer: Customer;\r\n * }\r\n * \r\n * const result = await funnel.next<MyResources>({\r\n * type: 'payment_success',\r\n * data: {\r\n * resources: {\r\n * order: { id: '123', amount: 100 } // \u2705 Type-checked!\r\n * }\r\n * }\r\n * });\r\n * ```\r\n */\r\nexport type FunnelResourceMap<TCustom = {}> = StandardResourceKeys & {\r\n /**\r\n * Fully extensible - any key allowed\r\n * Value can be:\r\n * - Single resource: { id: '...' }\r\n * - Collection: [{ id: '...' }, ...]\r\n * - Wrapped: { data: {...}, meta: {...} }\r\n */\r\n [key: string]:\r\n | FunnelResourceData\r\n | FunnelResourceData[]\r\n | ResourceWithMetadata\r\n | ResourceWithMetadata[]\r\n | undefined;\r\n} & TCustom;\r\n\r\n/**\r\n * Typed resources structure for funnel actions\r\n * \r\n * \uD83D\uDCA1 RESOURCE PROTOCOL: Flexible & Scalable\r\n * \r\n * The system supports multiple patterns for maximum flexibility:\r\n * \r\n * 1. **Simple Pattern** (Default - Backward Compatible):\r\n * ```typescript\r\n * resources: { order: { id: '123' } }\r\n * ```\r\n * \r\n * 2. **Aliasing Pattern** (For Hot + Named Context):\r\n * ```typescript\r\n * resources: {\r\n * order: { id: '123' }, // Hot context (latest)\r\n * mainOrder: { id: '123' } // Named (persistent)\r\n * }\r\n * ```\r\n * \r\n * 3. **Collection Pattern** (For Multiple Instances):\r\n * ```typescript\r\n * resources: {\r\n * orders: [\r\n * { id: 'main', label: 'Initial Order' },\r\n * { id: 'upsell1', label: 'Upsell #1' }\r\n * ]\r\n * }\r\n * ```\r\n * \r\n * 4. **Metadata Pattern** (For Versioning/Tracking):\r\n * ```typescript\r\n * resources: {\r\n * order: {\r\n * data: { id: '123', amount: 100 },\r\n * meta: { version: '2.0', source: 'checkout' }\r\n * }\r\n * }\r\n * ```\r\n * \r\n * 5. **Namespaced Pattern** (For Collision Prevention):\r\n * ```typescript\r\n * resources: {\r\n * 'checkout:order': { id: '123' },\r\n * 'subscription:order': { id: '456' }\r\n * }\r\n * ```\r\n * \r\n * 6. **Typed Pattern** (For Strict Type Safety):\r\n * ```typescript\r\n * interface StrictResources {\r\n * order: Order; // Your interface\r\n * customer: Customer;\r\n * }\r\n * funnel.next<StrictResources>({ ... })\r\n * ```\r\n * \r\n * All patterns work together - choose what fits your use case!\r\n */\r\nexport interface FunnelActionResources<TCustom = {}> {\r\n /**\r\n * Resource map - infinitely extensible\r\n * - Standard keys provide IntelliSense\r\n * - Custom keys allowed via index signature\r\n * - Supports single resources, collections, and metadata\r\n * - Optional: pass generic for strict typing\r\n */\r\n resources?: FunnelResourceMap<TCustom>;\r\n /**\r\n * Legacy top-level data (backward compatible)\r\n * Will be automatically migrated to resources by orchestrator\r\n */\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface DirectNavigationActionData extends FunnelActionResources {\r\n targetStepId: string;\r\n}\r\n\r\nexport interface BackNavigationActionData extends FunnelActionResources {\r\n targetStepId: string;\r\n}\r\n\r\nexport interface PaymentSuccessActionData extends FunnelActionResources {\r\n payment: {\r\n id: string;\r\n status: string;\r\n transactionId?: string;\r\n timestamp?: string;\r\n [key: string]: unknown;\r\n };\r\n order: {\r\n id: string;\r\n amount: number;\r\n currency: string;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface PaymentFailedActionData extends FunnelActionResources {\r\n payment: {\r\n id: string;\r\n status: string;\r\n error?: string;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface OfferAcceptedActionData extends FunnelActionResources {\r\n offer: {\r\n accepted: boolean;\r\n offerId?: string;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface OfferDeclinedActionData extends FunnelActionResources {\r\n offer: {\r\n declined: boolean;\r\n offerId?: string;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface CartUpdatedActionData extends FunnelActionResources {\r\n cart: {\r\n hasSpecificItem?: boolean;\r\n itemIds?: string[];\r\n variantIds?: string[];\r\n total?: number;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface FormSubmitActionData extends FunnelActionResources {\r\n form?: {\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\n/**\r\n * Base properties shared by all FunnelAction types\r\n */\r\ninterface BaseFunnelAction {\r\n /**\r\n * Action timestamp (ISO string format)\r\n */\r\n timestamp?: string;\r\n /**\r\n * Current URL for session synchronization (browser back/forward handling)\r\n * If not provided, SDK will automatically use window.location.href\r\n * @example '/checkout', 'https://store.com/payment'\r\n */\r\n currentUrl?: string;\r\n}\r\n\r\n/**\r\n * Discriminated union for FunnelAction based on action type\r\n */\r\nexport type FunnelAction =\r\n BaseFunnelAction & (({\r\n type: FunnelActionType.DIRECT_NAVIGATION;\r\n data: NextAction<DirectNavigationActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.BACK_NAVIGATION;\r\n data: NextAction<BackNavigationActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.CONTINUE_CLICKED;\r\n data: NextAction<FunnelActionResources>;\r\n })\r\n | ({\r\n type: FunnelActionType.BUTTON_CLICK;\r\n data: NextAction<FunnelActionResources>;\r\n })\r\n | ({\r\n type: FunnelActionType.FORM_SUBMIT;\r\n data: NextAction<FormSubmitActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.PAYMENT_SUCCESS;\r\n data: NextAction<PaymentSuccessActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.PAYMENT_FAILED;\r\n data: NextAction<PaymentFailedActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.OFFER_ACCEPTED;\r\n data: NextAction<OfferAcceptedActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.OFFER_DECLINED;\r\n data: NextAction<OfferDeclinedActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.CART_UPDATED;\r\n data: NextAction<CartUpdatedActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.CART_ITEM_ADDED;\r\n data: NextAction<CartUpdatedActionData>;\r\n })\r\n | ({\r\n type: FunnelActionType.CUSTOM;\r\n data: NextAction<FunnelActionResources>;\r\n })\r\n | ({\r\n type: string;\r\n data?: NextAction<FunnelActionResources>;\r\n }));\r\n\r\nexport interface FunnelNavigationAction {\r\n type: 'redirect' | 'replace' | 'push' | 'external' | 'none';\r\n url?: string;\r\n data?: Record<string, unknown>;\r\n}\r\n\r\nexport interface FunnelNavigationResult {\r\n stepId?: string; // Optional for fire-and-forget mode\r\n url?: string; // URL to redirect to after navigation (if step has a URL configured)\r\n action?: FunnelNavigationAction; // Optional for fire-and-forget mode\r\n context?: SimpleFunnelContext; // Optional for fire-and-forget mode\r\n tracking?: {\r\n from: string;\r\n to: string;\r\n event: string;\r\n timestamp: string;\r\n };\r\n /**\r\n * Fire-and-forget response: indicates navigation was queued\r\n * When true, stepId, url, action, and context will be undefined\r\n */\r\n queued?: boolean;\r\n /**\r\n * Session ID (may be different if session was recovered)\r\n */\r\n sessionId?: string;\r\n}\r\n\r\n/**\r\n * Funnel context available to plugins\r\n * Contains current state, resources, and metadata about the funnel session\r\n * \r\n * @example Basic usage\r\n * ```typescript\r\n * const context = await funnel.getContext();\r\n * const orderId = context.resources?.order?.id;\r\n * ```\r\n * \r\n * @example Typed usage (opt-in strict typing)\r\n * ```typescript\r\n * interface MyResources {\r\n * order: Order;\r\n * customer: Customer;\r\n * }\r\n * const context = await funnel.getContext<MyResources>();\r\n * const total = context.resources?.order.amount; // \u2705 Type-safe!\r\n * ```\r\n * \r\n * @example Collection access\r\n * ```typescript\r\n * const allOrders = context.resources?.orders; // FunnelResourceData[]\r\n * const mainOrder = allOrders?.find(o => o.id === 'main');\r\n * ```\r\n */\r\nexport interface SimpleFunnelContext<TCustom = {}> {\r\n customerId: string;\r\n storeId: string;\r\n sessionId: string;\r\n funnelId: string;\r\n currentStepId: string;\r\n previousStepId?: string;\r\n /**\r\n * Furthest step reached in the funnel (for progress tracking in cyclic funnels)\r\n * Only moves forward, never backward - used for analytics\r\n */\r\n furthestStepId?: string;\r\n /**\r\n * \u2705 Environment context (staging or production)\r\n * - Determined at session initialization based on entry URL\r\n * - Ensures all navigation stays in the same environment\r\n * - 'staging': Uses funnel.config (alias domains like funnel--store.cdn.tagadapay.com)\r\n * - 'production': Uses funnel.productionConfig (custom domains)\r\n */\r\n environment?: 'staging' | 'production';\r\n startedAt: number;\r\n lastActivityAt: number;\r\n\r\n /**\r\n * Typed resources map - infinitely extensible\r\n * - Single resources, collections, or wrapped with metadata\r\n * - Pass generic for strict typing: SimpleFunnelContext<MyResources>\r\n * - Standard keys provide IntelliSense, custom keys always allowed\r\n */\r\n resources?: FunnelResourceMap<TCustom>;\r\n\r\n /**\r\n * Static resources from plugin manifest (type: \"static\")\r\n * - Configured in funnel editor's Static Resources tab\r\n * - Available at runtime as context.static\r\n * - Example: context.static.offer.id for statically configured offers\r\n */\r\n static?: Record<string, unknown>;\r\n\r\n /**\r\n * Legacy/Custom metadata\r\n * For backward compatibility and flexible unstructured data\r\n */\r\n metadata?: Record<string, unknown>;\r\n\r\n script?: string;\r\n}\r\n\r\nexport interface FunnelInitializeRequest {\r\n cmsSession: {\r\n customerId: string;\r\n storeId: string;\r\n sessionId: string;\r\n accountId: string;\r\n };\r\n funnelId?: string;\r\n entryStepId?: string;\r\n existingSessionId?: string;\r\n /**\r\n * Current URL for session synchronization (browser back/forward handling)\r\n * If not provided, SDK will automatically use window.location.href\r\n * @example '/checkout', 'https://store.com/payment'\r\n */\r\n currentUrl?: string;\r\n /**\r\n * A/B test variant ID extracted from injected HTML\r\n * Used to track which variant the user is seeing in an A/B test\r\n * @example 'step_1765015842897_variant_1'\r\n */\r\n funnelVariantId?: string;\r\n /**\r\n * Funnel step ID extracted from injected HTML\r\n * Used to track which step the user is on\r\n * @example 'step_1765015842897'\r\n */\r\n funnelStepId?: string;\r\n /**\r\n * \uD83C\uDFAF Draft/preview mode flag (explicit from SDK, more robust than URL parsing)\r\n * When true, uses draft/staging data instead of production data\r\n */\r\n draft?: boolean;\r\n /**\r\n * \uD83C\uDFAF Funnel tracking enable/disable flag (explicit from SDK, more robust than URL parsing)\r\n * When false, disables all funnel tracking events (useful for iframed previews in config editor)\r\n */\r\n funnelTracking?: boolean;\r\n /**\r\n * \uD83C\uDFAF Funnel environment override ('staging' | 'production')\r\n * Determines which funnel config to use\r\n */\r\n funnelEnv?: 'staging' | 'production';\r\n /**\r\n * \uD83C\uDFAF Tagada client environment override ('production' | 'development' | 'local')\r\n * Forces specific API environment\r\n */\r\n tagadaClientEnv?: 'production' | 'development' | 'local';\r\n /**\r\n * \uD83C\uDFAF Tagada client base URL override\r\n * Forces custom API base URL (e.g., for local development with ngrok)\r\n */\r\n tagadaClientBaseUrl?: string;\r\n /**\r\n * \uD83C\uDF0D Display currency override (e.g., 'USD', 'EUR')\r\n * Forces specific currency for display purposes\r\n */\r\n currency?: string;\r\n /**\r\n * \uD83C\uDF0D Display locale override (e.g., 'en', 'fr')\r\n * Forces specific locale for display purposes\r\n */\r\n locale?: string;\r\n}\r\n\r\nexport interface FunnelInitializeResponse {\r\n success: boolean;\r\n context?: SimpleFunnelContext;\r\n error?: string;\r\n}\r\n\r\nexport interface FunnelNavigateRequest {\r\n sessionId: string;\r\n event: FunnelAction;\r\n contextUpdates?: Partial<SimpleFunnelContext>;\r\n /**\r\n * Current URL for URL-to-Step mapping (browser back/forward sync)\r\n * Automatically extracted from event.currentUrl or window.location.href\r\n */\r\n currentUrl?: string;\r\n /**\r\n * Funnel ID for session recovery when session expires\r\n * If session is not found and funnelId is provided, a new session will be created\r\n */\r\n funnelId?: string;\r\n /**\r\n * Funnel step ID (from SDK injection/URL params)\r\n * Used to sync session state before navigation\r\n */\r\n funnelStepId?: string;\r\n /**\r\n * Funnel variant ID (from SDK injection/URL params for A/B testing)\r\n * Used to sync session state before navigation\r\n */\r\n funnelVariantId?: string;\r\n /**\r\n * Fire and forget mode - queues navigation to QStash and returns immediately\r\n * No response data needed, just acknowledgment that request was queued\r\n * When true, result will only contain queued status and sessionId (no URL or stepId)\r\n */\r\n fireAndForget?: boolean;\r\n /**\r\n * \u2705 Customer tags to set (merged with existing customer tags)\r\n * @example ['segment:vip', 'cart_value:high']\r\n */\r\n customerTags?: string[];\r\n /**\r\n * \u2705 Device ID for geo/device tag enrichment (optional)\r\n * @example 'dev_abc123xyz'\r\n */\r\n deviceId?: string;\r\n}\r\n\r\nexport interface FunnelNavigateResponse {\r\n success: boolean;\r\n result?: {\r\n stepId?: string;\r\n url?: string;\r\n /**\r\n * New session ID if session was recovered (expired/removed)\r\n * SDK should update its sessionId if this is present\r\n */\r\n sessionId?: string;\r\n tracking?: {\r\n from: string;\r\n to: string;\r\n event: string;\r\n timestamp: string;\r\n };\r\n /**\r\n * Fire-and-forget response: indicates navigation was queued\r\n * When present, stepId and url will be undefined\r\n */\r\n queued?: boolean;\r\n };\r\n error?: string;\r\n}\r\n\r\nexport interface FunnelContextUpdateRequest {\r\n contextUpdates: Partial<SimpleFunnelContext>;\r\n}\r\n\r\nexport interface FunnelContextUpdateResponse {\r\n success: boolean;\r\n error?: string;\r\n}\r\n\r\nexport class FunnelResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Initialize a funnel session\r\n */\r\n async initialize(request: FunnelInitializeRequest): Promise<FunnelInitializeResponse> {\r\n return this.apiClient.post('/api/v1/funnel/initialize', request);\r\n }\r\n\r\n /**\r\n * Navigate to next step in funnel\r\n */\r\n async navigate(request: FunnelNavigateRequest): Promise<FunnelNavigateResponse> {\r\n return this.apiClient.post('/api/v1/funnel/navigate', request);\r\n }\r\n\r\n /**\r\n * Update funnel context\r\n */\r\n async updateContext(sessionId: string, request: FunnelContextUpdateRequest): Promise<FunnelContextUpdateResponse> {\r\n return this.apiClient.patch(`/api/v1/funnel/context/${sessionId}`, request);\r\n }\r\n\r\n /**\r\n * End funnel session\r\n */\r\n async endSession(sessionId: string): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.delete(`/api/v1/funnel/session/${sessionId}`);\r\n }\r\n\r\n /**\r\n * Get funnel session by ID\r\n * @param sessionId - The session ID to fetch\r\n * @param currentUrl - Optional current URL for session synchronization on page load\r\n */\r\n async getSession(sessionId: string, currentUrl?: string, includeDebugData?: boolean): Promise<{ success: boolean; context?: SimpleFunnelContext; debugData?: Record<string, unknown>; error?: string }> {\r\n const params = new URLSearchParams();\r\n if (currentUrl) {\r\n params.append('currentUrl', currentUrl);\r\n }\r\n if (includeDebugData) {\r\n params.append('includeDebugData', 'true');\r\n }\r\n const url = `/api/v1/funnel/session/${sessionId}${params.toString() ? `?${params}` : ''}`;\r\n return this.apiClient.get(url);\r\n }\r\n}\r\n\r\n", "/**\r\n * Simple event dispatcher for handling state changes in the SDK\r\n */\r\nexport type Listener<T> = (data: T) => void;\r\n\r\nexport class EventDispatcher<T> {\r\n private listeners: Set<Listener<T>> = new Set();\r\n\r\n subscribe(listener: Listener<T>): () => void {\r\n this.listeners.add(listener);\r\n return () => {\r\n this.listeners.delete(listener);\r\n };\r\n }\r\n\r\n notify(data: T): void {\r\n this.listeners.forEach((listener) => {\r\n try {\r\n listener(data);\r\n } catch (error) {\r\n console.error('Error in event listener:', error);\r\n }\r\n });\r\n }\r\n\r\n clear(): void {\r\n this.listeners.clear();\r\n }\r\n}\r\n\r\n", "/**\r\n * Client-side token storage utilities\r\n */\r\n\r\nconst TOKEN_KEY = 'cms_token';\r\n\r\n/**\r\n * Set the CMS token in localStorage\r\n * \r\n * IMPORTANT: Browser's native 'storage' event ONLY fires for changes in OTHER tabs/windows.\r\n * For same-tab updates to trigger storage listeners, we must manually dispatch the event.\r\n * We only dispatch if the token actually changed to minimize unnecessary events.\r\n */\r\nexport function setClientToken(token: string): void {\r\n if (typeof window !== 'undefined') {\r\n try {\r\n // Check if token actually changed to avoid unnecessary events and potential loops\r\n const currentToken = localStorage.getItem(TOKEN_KEY);\r\n const tokenChanged = currentToken !== token;\r\n\r\n localStorage.setItem(TOKEN_KEY, token);\r\n\r\n // Only dispatch if token actually changed\r\n // The storage event listeners have guards to prevent infinite loops:\r\n // - They check if token hasn't changed (client.ts line 261)\r\n // - They check if initialization is in progress (client.ts line 269)\r\n // - They check retry limits (client.ts line 277)\r\n if (tokenChanged) {\r\n window.dispatchEvent(new Event('storage'));\r\n }\r\n } catch (error) {\r\n console.error('Failed to save token to localStorage:', error);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Get the CMS token from localStorage\r\n */\r\nexport function getClientToken(): string | null {\r\n if (typeof window !== 'undefined') {\r\n try {\r\n return localStorage.getItem(TOKEN_KEY);\r\n } catch (error) {\r\n console.error('Failed to get token from localStorage:', error);\r\n return null;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Clear the CMS token from localStorage\r\n */\r\nexport function clearClientToken(): void {\r\n if (typeof window !== 'undefined') {\r\n try {\r\n localStorage.removeItem(TOKEN_KEY);\r\n } catch (error) {\r\n console.error('Failed to clear token from localStorage:', error);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check if a token exists in localStorage\r\n */\r\nexport function hasClientToken(): boolean {\r\n return !!getClientToken();\r\n}\r\n\r\n", "/**\r\n * Session Storage Utilities - Core SDK (Framework-agnostic)\r\n * Handles session persistence using browser cookies\r\n */\r\n\r\nconst FUNNEL_SESSION_COOKIE_NAME = 'tgd-funnel-session-id';\r\nconst STICKY_SESSION_COOKIE_NAME = 'tgd-session-id';\r\nconst SESSION_MAX_AGE = 30 * 24 * 60 * 60; // 30 days\r\n\r\n/**\r\n * Save funnel session ID to browser cookie\r\n */\r\nexport function setFunnelSessionCookie(sessionId: string): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n document.cookie = `${FUNNEL_SESSION_COOKIE_NAME}=${sessionId}; path=/; max-age=${SESSION_MAX_AGE}; SameSite=Lax`;\r\n}\r\n\r\n/**\r\n * Retrieve funnel session ID from browser cookie\r\n */\r\nexport function getFunnelSessionCookie(): string | undefined {\r\n if (typeof document === 'undefined') return undefined;\r\n\r\n const cookie = document.cookie\r\n .split('; ')\r\n .find((row) => row.startsWith(`${FUNNEL_SESSION_COOKIE_NAME}=`));\r\n\r\n return cookie ? cookie.split('=')[1] : undefined;\r\n}\r\n\r\n/**\r\n * Clear funnel session cookie\r\n */\r\nexport function clearFunnelSessionCookie(): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n document.cookie = `${FUNNEL_SESSION_COOKIE_NAME}=; path=/; max-age=0`;\r\n}\r\n\r\n/**\r\n * Check if a funnel session cookie exists\r\n */\r\nexport function hasFunnelSessionCookie(): boolean {\r\n return !!getFunnelSessionCookie();\r\n}\r\n\r\n/**\r\n * Retrieve funnel variant ID from sticky session (for A/B tracking)\r\n * The variant ID is stored in the sticky session metadata by plugin-routing\r\n */\r\nexport function getFunnelVariantId(): string | undefined {\r\n if (typeof document === 'undefined') return undefined;\r\n\r\n try {\r\n const cookie = document.cookie\r\n .split('; ')\r\n .find((row) => row.startsWith(`${STICKY_SESSION_COOKIE_NAME}=`));\r\n\r\n if (!cookie) return undefined;\r\n\r\n const sessionData = JSON.parse(decodeURIComponent(cookie.split('=')[1]));\r\n return sessionData?.metadata?.funnelVariantId;\r\n } catch (error) {\r\n console.warn('Failed to parse sticky session for variant ID:', error);\r\n return undefined;\r\n }\r\n}\r\n\r\n\r\n", "/**\r\n * SDK Override Parameters\r\n * \r\n * Centralized parameter management for SDK behavior overrides.\r\n * Parameters can come from URL query params, localStorage, or cookies.\r\n * \r\n * Key concepts:\r\n * - forceReset: Clears all stored state (localStorage, cookies) - simulates hard refresh\r\n * - draft: Marks customers/sessions as draft (for staging/preview/testing)\r\n * - funnelTracking: Controls whether funnel events are tracked\r\n * - tagadaClientEnv: Forces specific environment (production/development/local) - overrides auto-detection\r\n * - tagadaClientBaseUrl: Forces custom API base URL - overrides environment-based URL\r\n * - token: Authentication token (URL > localStorage)\r\n * - funnelSessionId: Active funnel session (URL > cookie)\r\n * \r\n * \u26A0\uFE0F Note: authCode is NOT handled here - it has highest priority and is handled\r\n * separately in client.ts before all other initialization logic.\r\n * \r\n * Usage examples:\r\n * - Force production API: ?tagadaClientEnv=production\r\n * - Force development API: ?tagadaClientEnv=development\r\n * - Force local API: ?tagadaClientEnv=local\r\n * - Custom API URL: ?tagadaClientBaseUrl=https://tagada.loclx.io\r\n * - Combined: ?tagadaClientEnv=local&tagadaClientBaseUrl=https://tagada.loclx.io\r\n * - Hard reset + production: ?forceReset=true&tagadaClientEnv=production\r\n * - Cross-domain auth: ?authCode=ah_... (automatically handled, highest priority)\r\n */\r\n\r\nimport { clearClientToken, setClientToken, getClientToken } from './tokenStorage';\r\nimport { clearFunnelSessionCookie } from './sessionStorage';\r\n\r\n/**\r\n * SDK Override Parameters - centralized across all SDK functions\r\n * Can be set via URL params, localStorage, or cookies\r\n */\r\nexport interface SDKOverrideParams {\r\n /** Force clean state (clear localStorage and cookies) - simulates hard refresh */\r\n forceReset?: boolean;\r\n /** Token from URL (overrides localStorage) */\r\n token?: string | null;\r\n /** Funnel session ID from URL (overrides cookie) */\r\n funnelSessionId?: string | null;\r\n /** Funnel ID from URL */\r\n funnelId?: string | null;\r\n /** Draft mode - marks customers/sessions as draft */\r\n draft?: boolean;\r\n /** Enable/disable funnel tracking events (false in config editor iframe, true in funnel previews) */\r\n funnelTracking?: boolean;\r\n /** Funnel environment (staging/production) - determines which funnel config to use */\r\n funnelEnv?: 'staging' | 'production';\r\n /** Force specific environment (production/development/local) - overrides auto-detection */\r\n tagadaClientEnv?: 'production' | 'development' | 'local';\r\n /** Force custom API base URL - overrides environment-based URL */\r\n tagadaClientBaseUrl?: string;\r\n /** Display currency override (e.g., 'USD', 'EUR') */\r\n currency?: string;\r\n /** Display locale override (e.g., 'en', 'fr') */\r\n locale?: string;\r\n}\r\n\r\n// Storage keys for SDK override params\r\nconst STORAGE_KEYS = {\r\n DRAFT: 'tgd_draft',\r\n FUNNEL_TRACKING: 'tgd_funnel_tracking',\r\n FORCE_RESET: 'tgd_force_reset',\r\n CLIENT_ENV: 'tgd_client_env',\r\n CLIENT_BASE_URL: 'tgd_client_base_url',\r\n CURRENCY: 'tgd_currency',\r\n LOCALE: 'tgd_locale',\r\n} as const;\r\n\r\n/**\r\n * Check if force reset is active (simulates hard refresh)\r\n */\r\nexport function isForceReset(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n return params.get('forceReset') === 'true';\r\n}\r\n\r\n/**\r\n * Get value from localStorage with fallback\r\n */\r\nfunction getFromStorage(key: string): string | null {\r\n if (typeof window === 'undefined') return null;\r\n try {\r\n return localStorage.getItem(key);\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Set value in localStorage\r\n */\r\nfunction setInStorage(key: string, value: string): void {\r\n if (typeof window === 'undefined') return;\r\n try {\r\n localStorage.setItem(key, value);\r\n } catch {\r\n // Storage not available\r\n }\r\n}\r\n\r\n/**\r\n * Get value from cookie\r\n */\r\nfunction getFromCookie(key: string): string | null {\r\n if (typeof document === 'undefined') return null;\r\n const cookies = document.cookie.split(';');\r\n const cookie = cookies.find(c => c.trim().startsWith(`${key}=`));\r\n return cookie ? cookie.split('=')[1]?.trim() : null;\r\n}\r\n\r\n/**\r\n * Set value in cookie\r\n * \u26A0\uFE0F NEVER allows tgd_draft to be set as a cookie (localStorage-only)\r\n */\r\nfunction setInCookie(key: string, value: string, maxAge = 86400): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n // \uD83D\uDEE1\uFE0F SAFETY: Block tgd_draft from EVER being written to cookies\r\n if (key === 'tgd_draft' || key === 'tgd-draft') {\r\n console.warn(`\uD83D\uDEE1\uFE0F [SDK] Blocked attempt to set ${key} as cookie - this should only be in localStorage`);\r\n return;\r\n }\r\n\r\n document.cookie = `${key}=${value}; path=/; max-age=${maxAge}`;\r\n}\r\n\r\n/**\r\n * Clear value from cookie\r\n */\r\nfunction clearFromCookie(key: string): void {\r\n if (typeof document === 'undefined') return;\r\n document.cookie = `${key}=; path=/; max-age=0`;\r\n}\r\n\r\n/**\r\n * Get SDK override parameters from all sources (URL, localStorage, cookies)\r\n * Priority: URL > localStorage > Cookie\r\n */\r\nexport function getSDKParams(): SDKOverrideParams {\r\n if (typeof window === 'undefined') {\r\n return {};\r\n }\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n\r\n // Get draft mode (URL > localStorage only - no cookie fallback to avoid resurrection)\r\n let draft: boolean | undefined;\r\n const urlDraft = urlParams.get('draft');\r\n if (urlDraft !== null) {\r\n draft = urlDraft === 'true';\r\n } else {\r\n const storageDraft = getFromStorage(STORAGE_KEYS.DRAFT);\r\n if (storageDraft !== null) {\r\n draft = storageDraft === 'true';\r\n }\r\n }\r\n\r\n // Get funnel tracking (URL > localStorage > cookie, default true)\r\n let funnelTracking: boolean | undefined;\r\n const urlTracking = urlParams.get('funnelTracking');\r\n if (urlTracking !== null) {\r\n funnelTracking = urlTracking !== 'false';\r\n } else {\r\n const storageTracking = getFromStorage(STORAGE_KEYS.FUNNEL_TRACKING) || getFromCookie(STORAGE_KEYS.FUNNEL_TRACKING);\r\n if (storageTracking !== null) {\r\n funnelTracking = storageTracking !== 'false';\r\n }\r\n }\r\n\r\n // Get token (URL > localStorage)\r\n const token = urlParams.get('token') || getClientToken() || null;\r\n\r\n // Get funnel session ID (URL only, cookie handled elsewhere)\r\n const funnelSessionId = urlParams.get('funnelSessionId') || null;\r\n\r\n // Get funnel ID (URL only)\r\n const funnelId = urlParams.get('funnelId') || null;\r\n\r\n // Get funnel environment (URL only - not persisted, set on entry)\r\n let funnelEnv: 'staging' | 'production' | undefined;\r\n const urlFunnelEnv = urlParams.get('funnelEnv');\r\n if (urlFunnelEnv && (urlFunnelEnv === 'staging' || urlFunnelEnv === 'production')) {\r\n funnelEnv = urlFunnelEnv;\r\n }\r\n\r\n // Force reset is URL-only (not persisted)\r\n const forceReset = urlParams.get('forceReset') === 'true';\r\n\r\n // Get client environment override (URL > localStorage > cookie)\r\n let tagadaClientEnv: 'production' | 'development' | 'local' | undefined;\r\n const urlEnv = urlParams.get('tagadaClientEnv');\r\n if (urlEnv && (urlEnv === 'production' || urlEnv === 'development' || urlEnv === 'local')) {\r\n tagadaClientEnv = urlEnv;\r\n } else {\r\n const storageEnv = getFromStorage(STORAGE_KEYS.CLIENT_ENV) || getFromCookie(STORAGE_KEYS.CLIENT_ENV);\r\n if (storageEnv && (storageEnv === 'production' || storageEnv === 'development' || storageEnv === 'local')) {\r\n tagadaClientEnv = storageEnv as 'production' | 'development' | 'local';\r\n }\r\n }\r\n\r\n // Get custom API base URL override (URL > localStorage > cookie)\r\n let tagadaClientBaseUrl: string | undefined;\r\n const urlBaseUrl = urlParams.get('tagadaClientBaseUrl');\r\n if (urlBaseUrl) {\r\n tagadaClientBaseUrl = urlBaseUrl;\r\n } else {\r\n const storageBaseUrl = getFromStorage(STORAGE_KEYS.CLIENT_BASE_URL) || getFromCookie(STORAGE_KEYS.CLIENT_BASE_URL);\r\n if (storageBaseUrl) {\r\n tagadaClientBaseUrl = storageBaseUrl;\r\n }\r\n }\r\n\r\n // Get display currency (URL > localStorage > cookie)\r\n let currency: string | undefined;\r\n const urlCurrency = urlParams.get('currency');\r\n if (urlCurrency) {\r\n currency = urlCurrency;\r\n } else {\r\n const storageCurrency = getFromStorage(STORAGE_KEYS.CURRENCY) || getFromCookie(STORAGE_KEYS.CURRENCY);\r\n if (storageCurrency) {\r\n currency = storageCurrency;\r\n }\r\n }\r\n\r\n // Get display locale (URL > localStorage > cookie)\r\n let locale: string | undefined;\r\n const urlLocale = urlParams.get('locale');\r\n if (urlLocale) {\r\n locale = urlLocale;\r\n } else {\r\n const storageLocale = getFromStorage(STORAGE_KEYS.LOCALE) || getFromCookie(STORAGE_KEYS.LOCALE);\r\n if (storageLocale) {\r\n locale = storageLocale;\r\n }\r\n }\r\n\r\n return {\r\n forceReset,\r\n token,\r\n funnelSessionId,\r\n funnelId,\r\n draft,\r\n funnelTracking,\r\n funnelEnv,\r\n tagadaClientEnv,\r\n tagadaClientBaseUrl,\r\n currency,\r\n locale,\r\n };\r\n}\r\n\r\n/**\r\n * Legacy alias for backward compatibility\r\n * @deprecated Use getSDKParams() instead\r\n */\r\nexport function getPreviewParams(): SDKOverrideParams {\r\n return getSDKParams();\r\n}\r\n\r\n/**\r\n * Check if draft mode is active\r\n * Uses centralized getSDKParams()\r\n */\r\nexport function isDraftMode(): boolean {\r\n const params = getSDKParams();\r\n return params.draft ?? false;\r\n}\r\n\r\n/**\r\n * Set draft mode in storage for persistence\r\n * \u26A0\uFE0F ONLY writes to localStorage (not cookies) to avoid resurrection issues\r\n */\r\nexport function setDraftMode(draft: boolean): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n if (draft) {\r\n setInStorage(STORAGE_KEYS.DRAFT, 'true');\r\n } else {\r\n try {\r\n localStorage.removeItem(STORAGE_KEYS.DRAFT);\r\n } catch {\r\n // Storage not available\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Initialize SDK with override parameters\r\n * \r\n * This function handles SDK initialization based on override params:\r\n * 1. If forceReset flag is set: Clear all stored state (simulates hard refresh)\r\n * 2. If token in URL: Use it (override localStorage)\r\n * 3. If draft in URL: Persist it to storage\r\n * 4. If funnelTracking in URL: Persist it to storage\r\n * \r\n * @returns True if force reset was activated and state was cleared\r\n */\r\nexport function handlePreviewMode(debugMode = false): boolean {\r\n // \uD83D\uDD12 CRITICAL: Read URL token DIRECTLY first before any getSDKParams()\r\n // This ensures we have the URL token before any clearing happens\r\n let urlToken: string | null = null;\r\n if (typeof window !== 'undefined') {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n urlToken = urlParams.get('token');\r\n }\r\n\r\n const params = getSDKParams();\r\n const shouldReset = params.forceReset || false;\r\n\r\n if (!shouldReset && !params.token) {\r\n // Not forcing reset and no explicit token override\r\n // But still persist draft/tracking if in URL\r\n persistSDKParamsFromURL();\r\n return false;\r\n }\r\n\r\n if (debugMode) {\r\n console.log('[SDK] Detected params:', params);\r\n console.log('[SDK] URL token (direct read):', urlToken ? urlToken.substring(0, 20) + '...' : 'none');\r\n }\r\n\r\n // CASE 1: Force reset - clear all state (simulates hard refresh)\r\n if (shouldReset) {\r\n if (debugMode) {\r\n console.log('[SDK] Force reset: Clearing all stored state');\r\n }\r\n\r\n clearClientToken();\r\n clearFunnelSessionCookie();\r\n\r\n // Clear all tagadapay-related localStorage keys\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n const keys = Object.keys(localStorage);\r\n keys.forEach(key => {\r\n if (key.startsWith('tagadapay_') || key.startsWith('tgd_')) {\r\n if (debugMode) {\r\n console.log(`[SDK] Clearing localStorage: ${key}`);\r\n }\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // CASE 2: Token in URL - override stored token\r\n // \uD83D\uDD12 CRITICAL: Use the directly-read URL token to avoid any race conditions\r\n const tokenToSet = urlToken || params.token;\r\n if (tokenToSet !== null && tokenToSet !== undefined) {\r\n if (debugMode) {\r\n console.log('[SDK] Setting token from URL:', tokenToSet.substring(0, 20) + '...');\r\n }\r\n\r\n if (tokenToSet === '' || tokenToSet === 'null') {\r\n // Explicitly cleared token\r\n clearClientToken();\r\n } else {\r\n // Set token from URL IMMEDIATELY after clearing\r\n setClientToken(tokenToSet);\r\n if (debugMode) {\r\n console.log('[SDK] \u2705 Token set in localStorage immediately after clear');\r\n }\r\n }\r\n } else if (shouldReset) {\r\n // Force reset but no token = clear stored token\r\n if (debugMode) {\r\n console.log('[SDK] Force reset mode (no token in URL)');\r\n }\r\n clearClientToken();\r\n }\r\n\r\n // CASE 3: Persist URL params to storage\r\n persistSDKParamsFromURL();\r\n\r\n // CASE 4: Funnel session ID in URL - will be used by FunnelClient\r\n if (params.funnelSessionId && debugMode) {\r\n console.log('[SDK] Using funnelSessionId from URL:', params.funnelSessionId);\r\n }\r\n\r\n return shouldReset;\r\n}\r\n\r\n/**\r\n * Persist SDK parameters from URL to storage\r\n * This ensures params survive page navigation\r\n */\r\nfunction persistSDKParamsFromURL(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n\r\n // Persist draft mode if in URL\r\n const urlDraft = urlParams.get('draft');\r\n if (urlDraft !== null) {\r\n setDraftMode(urlDraft === 'true');\r\n }\r\n\r\n // Persist funnel tracking if in URL\r\n const urlTracking = urlParams.get('funnelTracking');\r\n if (urlTracking !== null) {\r\n setFunnelTracking(urlTracking !== 'false');\r\n }\r\n\r\n // Persist client environment if in URL\r\n const urlEnv = urlParams.get('tagadaClientEnv');\r\n if (urlEnv && (urlEnv === 'production' || urlEnv === 'development' || urlEnv === 'local')) {\r\n setClientEnvironment(urlEnv);\r\n }\r\n\r\n // Persist custom base URL if in URL\r\n const urlBaseUrl = urlParams.get('tagadaClientBaseUrl');\r\n if (urlBaseUrl) {\r\n setClientBaseUrl(urlBaseUrl);\r\n }\r\n}\r\n\r\n/**\r\n * Set funnel tracking mode in storage for persistence\r\n */\r\nexport function setFunnelTracking(enabled: boolean): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const value = enabled ? 'true' : 'false';\r\n setInStorage(STORAGE_KEYS.FUNNEL_TRACKING, value);\r\n setInCookie(STORAGE_KEYS.FUNNEL_TRACKING, value, 86400);\r\n}\r\n\r\n/**\r\n * Set client environment override in storage for persistence\r\n */\r\nexport function setClientEnvironment(env: 'production' | 'development' | 'local'): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n setInStorage(STORAGE_KEYS.CLIENT_ENV, env);\r\n setInCookie(STORAGE_KEYS.CLIENT_ENV, env, 86400);\r\n}\r\n\r\n/**\r\n * Clear client environment override\r\n */\r\nexport function clearClientEnvironment(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n try {\r\n localStorage.removeItem(STORAGE_KEYS.CLIENT_ENV);\r\n clearFromCookie(STORAGE_KEYS.CLIENT_ENV);\r\n } catch {\r\n // Storage not available\r\n }\r\n}\r\n\r\n/**\r\n * Set custom API base URL override in storage for persistence\r\n */\r\nexport function setClientBaseUrl(baseUrl: string): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n setInStorage(STORAGE_KEYS.CLIENT_BASE_URL, baseUrl);\r\n setInCookie(STORAGE_KEYS.CLIENT_BASE_URL, baseUrl, 86400);\r\n}\r\n\r\n/**\r\n * Clear custom API base URL override\r\n */\r\nexport function clearClientBaseUrl(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n try {\r\n localStorage.removeItem(STORAGE_KEYS.CLIENT_BASE_URL);\r\n clearFromCookie(STORAGE_KEYS.CLIENT_BASE_URL);\r\n } catch {\r\n // Storage not available\r\n }\r\n}\r\n\r\n/**\r\n * Check if we should use URL params over stored values\r\n * \r\n * Returns true if:\r\n * - Force reset is active, OR\r\n * - Explicit token/sessionId in URL (indicating intentional override)\r\n */\r\nexport function shouldUseUrlParams(): boolean {\r\n const params = getSDKParams();\r\n return !!(\r\n params.forceReset ||\r\n params.token !== null ||\r\n params.funnelSessionId !== null\r\n );\r\n}\r\n\r\n/**\r\n * Check if funnel tracking is enabled\r\n * Uses centralized getSDKParams()\r\n * Default is true for normal operations\r\n */\r\nexport function isFunnelTrackingEnabled(): boolean {\r\n const params = getSDKParams();\r\n return params.funnelTracking ?? true; // Default true\r\n}\r\n\r\n", "/**\r\n * Preview Mode Indicator - Auto-injected DOM element\r\n * \r\n * Automatically injects a visual indicator when SDK is in preview/draft mode\r\n * Works with vanilla JS/DOM - no React required\r\n */\r\n\r\nimport { isDraftMode, isFunnelTrackingEnabled, getSDKParams, setDraftMode, setFunnelTracking, clearClientEnvironment, clearClientBaseUrl } from './previewMode';\r\nimport { clearClientToken } from './tokenStorage';\r\nimport { clearFunnelSessionCookie } from './sessionStorage';\r\n\r\nlet indicatorElement: HTMLElement | null = null;\r\nlet isInjected = false;\r\n\r\n/**\r\n * Helper to clear a specific cookie with all possible domain/path combinations\r\n */\r\nfunction clearSpecificCookie(cookieName: string): void {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') return;\r\n\r\n const hostname = window.location.hostname;\r\n const parts = hostname.split('.');\r\n\r\n // All possible domains\r\n const domains = [\r\n '', // No domain (current)\r\n hostname, // Full hostname\r\n '.' + hostname, // Wildcard current\r\n ];\r\n\r\n // Add parent domains\r\n for (let i = 1; i < parts.length; i++) {\r\n const domain = parts.slice(i).join('.');\r\n domains.push(domain);\r\n domains.push('.' + domain);\r\n }\r\n\r\n // All possible paths\r\n const pathParts = window.location.pathname.split('/').filter(p => p);\r\n const paths = ['/'];\r\n let currentPath = '';\r\n pathParts.forEach(part => {\r\n currentPath += '/' + part;\r\n paths.push(currentPath);\r\n });\r\n\r\n // Try all combinations\r\n domains.forEach(domain => {\r\n paths.forEach(path => {\r\n const baseDelete = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}`;\r\n const domainPart = domain ? `; domain=${domain}` : '';\r\n\r\n // Try all security flag variations\r\n document.cookie = baseDelete + domainPart;\r\n document.cookie = baseDelete + domainPart + '; secure';\r\n document.cookie = baseDelete + domainPart + '; SameSite=None; secure';\r\n document.cookie = baseDelete + domainPart + '; SameSite=Lax';\r\n document.cookie = baseDelete + domainPart + '; SameSite=Strict';\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Leave preview mode - Clear ALL storage (including Shopify cookies, all localStorage, etc.) and reload\r\n * \u26A0\uFE0F Nuclear option - clears everything to exit preview mode completely\r\n */\r\nfunction leavePreviewMode(): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const confirmed = confirm(\r\n '\uD83D\uDEAA Leave Preview Mode?\\n\\nThis will clear ALL cookies and localStorage (including Shopify session, cart, and preview settings) and reload the page.\\n\\nAre you sure?'\r\n );\r\n\r\n if (!confirmed) return;\r\n\r\n // STEP 0: Remove ALL preview params from URL immediately\r\n const url = new URL(window.location.href);\r\n const previewParams = [\r\n 'draft', 'funnelEnv', 'funnelTracking', 'tagadaClientEnv',\r\n 'tagadaClientBaseUrl', 'forceReset', 'funnelId', 'funnelSessionId', 'token',\r\n ];\r\n\r\n previewParams.forEach(param => url.searchParams.delete(param));\r\n window.history.replaceState({}, '', url.href);\r\n\r\n // STEP 0.5: Install global cookie blocker for tgd_draft\r\n try {\r\n const cookieDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie') ||\r\n Object.getOwnPropertyDescriptor(HTMLDocument.prototype, 'cookie');\r\n\r\n if (cookieDescriptor && cookieDescriptor.set) {\r\n Object.defineProperty(document, 'cookie', {\r\n configurable: true,\r\n enumerable: true,\r\n get: function () { return cookieDescriptor.get ? cookieDescriptor.get.call(this) : ''; },\r\n set: function (val) {\r\n if (typeof val === 'string') {\r\n const normalizedVal = val.toLowerCase();\r\n if (normalizedVal.includes('tgd_draft') ||\r\n normalizedVal.includes('tgd-draft') ||\r\n normalizedVal.includes('tgd.draft') ||\r\n normalizedVal.includes('tgddraft')) {\r\n\r\n // Allow deletion attempts\r\n if (normalizedVal.includes('max-age=0') ||\r\n normalizedVal.includes('expires=thu, 01 jan 1970')) {\r\n if (cookieDescriptor.set) {\r\n cookieDescriptor.set.call(this, val);\r\n }\r\n return;\r\n }\r\n\r\n // Block all creation/update attempts\r\n console.warn('\uD83D\uDEE1\uFE0F [TagadaPay] BLOCKED: tgd_draft should never be a cookie');\r\n return;\r\n }\r\n }\r\n\r\n if (cookieDescriptor.set) {\r\n cookieDescriptor.set.call(this, val);\r\n }\r\n }\r\n });\r\n }\r\n } catch (e) {\r\n console.warn('[TagadaPay] Could not install cookie blocker:', e);\r\n }\r\n\r\n // STEP 1: Clear TagadaPay localStorage keys\r\n if (window.localStorage) {\r\n try {\r\n localStorage.removeItem('tgd_draft');\r\n localStorage.removeItem('tgd_funnel_tracking');\r\n localStorage.removeItem('tgd_client_env');\r\n localStorage.removeItem('tgd_client_base_url');\r\n localStorage.removeItem('cms_token');\r\n } catch (e) {\r\n console.warn('[TagadaPay] Failed to clear some localStorage keys:', e);\r\n }\r\n }\r\n\r\n // Clear SDK utilities\r\n clearClientToken();\r\n clearFunnelSessionCookie();\r\n clearClientEnvironment();\r\n clearClientBaseUrl();\r\n\r\n // STEP 2: Clear ALL storage\r\n if (window.localStorage) {\r\n localStorage.clear();\r\n }\r\n if (window.sessionStorage) {\r\n sessionStorage.clear();\r\n }\r\n\r\n // STEP 3: Clear known TagadaPay cookies\r\n const tagadaCookies = [\r\n 'tgd-funnel-session-id', 'tgd_draft', 'tgd_funnel_tracking',\r\n 'tgd_client_env', 'tgd_client_base_url', 'cms_token', 'tagadapay_session',\r\n ];\r\n\r\n tagadaCookies.forEach(cookieName => clearSpecificCookie(cookieName));\r\n\r\n // STEP 3.5: Clear alternative cookie name formats\r\n const alternativeNames = ['tgd-draft', 'tgd_draft', 'tgd.draft', 'tgddraft'];\r\n alternativeNames.forEach(cookieName => clearSpecificCookie(cookieName));\r\n\r\n // STEP 4: Clear ALL remaining cookies aggressively\r\n if (document.cookie) {\r\n const cookies = document.cookie.split(';');\r\n cookies.forEach(cookie => {\r\n const cookieName = cookie.split('=')[0].trim();\r\n if (!cookieName) return;\r\n\r\n const hostname = window.location.hostname;\r\n const parts = hostname.split('.');\r\n const domains = ['', hostname, '.' + hostname];\r\n\r\n for (let i = 1; i < parts.length; i++) {\r\n const domain = parts.slice(i).join('.');\r\n domains.push(domain);\r\n domains.push('.' + domain);\r\n }\r\n\r\n const pathParts = window.location.pathname.split('/').filter(p => p);\r\n const paths = ['/'];\r\n let currentPath = '';\r\n pathParts.forEach(part => {\r\n currentPath += '/' + part;\r\n paths.push(currentPath);\r\n });\r\n\r\n domains.forEach(domain => {\r\n paths.forEach(path => {\r\n const baseDelete = `${cookieName}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=${path}`;\r\n const domainPart = domain ? `; domain=${domain}` : '';\r\n\r\n document.cookie = baseDelete + domainPart;\r\n document.cookie = baseDelete + domainPart + '; secure';\r\n document.cookie = baseDelete + domainPart + '; SameSite=None; secure';\r\n document.cookie = baseDelete + domainPart + '; SameSite=Lax';\r\n document.cookie = baseDelete + domainPart + '; SameSite=Strict';\r\n document.cookie = baseDelete + domainPart + '; secure; SameSite=None';\r\n document.cookie = baseDelete + domainPart + '; secure; SameSite=Lax';\r\n document.cookie = baseDelete + domainPart + '; secure; SameSite=Strict';\r\n });\r\n });\r\n });\r\n }\r\n\r\n // Final cleanup and reload\r\n setTimeout(() => {\r\n if (window.localStorage && localStorage.length > 0) {\r\n localStorage.clear();\r\n }\r\n\r\n clearSpecificCookie('tgd_draft');\r\n\r\n if (typeof window.stop === 'function') {\r\n window.stop();\r\n }\r\n\r\n window.location.replace(url.href);\r\n }, 10);\r\n}\r\n\r\n/**\r\n * Inject the preview mode indicator into the DOM\r\n * Called automatically during SDK initialization if preview mode is active\r\n */\r\nexport function injectPreviewModeIndicator(): void {\r\n // Skip if already injected or not in browser\r\n if (isInjected || typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n const params = getSDKParams();\r\n const draftMode = isDraftMode();\r\n const trackingDisabled = !isFunnelTrackingEnabled();\r\n const hasCustomEnv = !!(params.tagadaClientEnv || params.tagadaClientBaseUrl);\r\n\r\n // Only inject if in preview/dev mode\r\n if (!draftMode && !trackingDisabled && !hasCustomEnv) {\r\n return;\r\n }\r\n\r\n // Create container\r\n const container = document.createElement('div');\r\n container.id = 'tgd-preview-indicator';\r\n container.style.cssText = `\r\n position: fixed;\r\n bottom: 16px;\r\n right: 16px;\r\n z-index: 999999;\r\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\r\n `;\r\n\r\n // Create badge\r\n const badge = document.createElement('div');\r\n badge.style.cssText = `\r\n background: ${draftMode ? '#ff9500' : '#007aff'};\r\n color: white;\r\n padding: 8px 12px;\r\n border-radius: 8px;\r\n font-size: 13px;\r\n font-weight: 600;\r\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\r\n cursor: pointer;\r\n transition: all 0.2s ease;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n `;\r\n badge.innerHTML = `\r\n <span style=\"font-size: 16px;\">\uD83D\uDD0D</span>\r\n <span>${draftMode ? 'Preview Mode' : 'Dev Mode'}</span>\r\n `;\r\n\r\n // Create details popup (with padding-top to bridge gap with badge)\r\n const details = document.createElement('div');\r\n details.style.cssText = `\r\n position: absolute;\r\n bottom: calc(100% + 8px);\r\n right: 0;\r\n background: white;\r\n border: 1px solid #e5e5e5;\r\n border-radius: 8px;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n padding: 12px;\r\n min-width: 250px;\r\n font-size: 12px;\r\n line-height: 1.5;\r\n display: none;\r\n `;\r\n details.style.paddingTop = '20px'; // Extra padding to bridge the gap\r\n\r\n // Add invisible bridge between badge and popup to prevent flickering\r\n const bridge = document.createElement('div');\r\n bridge.style.cssText = `\r\n position: absolute;\r\n bottom: 100%;\r\n left: 0;\r\n right: 0;\r\n height: 8px;\r\n display: none;\r\n `;\r\n\r\n // Build details content\r\n let detailsHTML = '<div style=\"margin-bottom: 8px; font-weight: 600; color: #1d1d1f;\">Current Environment</div>';\r\n detailsHTML += '<div style=\"display: flex; flex-direction: column; gap: 6px;\">';\r\n\r\n if (draftMode) {\r\n detailsHTML += `\r\n <div style=\"display: flex; justify-content: space-between; color: #86868b;\">\r\n <span>Draft Mode:</span>\r\n <span style=\"color: #ff9500; font-weight: 600;\">ON</span>\r\n </div>\r\n `;\r\n }\r\n\r\n if (trackingDisabled) {\r\n detailsHTML += `\r\n <div style=\"display: flex; justify-content: space-between; color: #86868b;\">\r\n <span>Tracking:</span>\r\n <span style=\"color: #ff3b30; font-weight: 600;\">DISABLED</span>\r\n </div>\r\n `;\r\n }\r\n\r\n if (params.funnelEnv) {\r\n detailsHTML += `\r\n <div style=\"display: flex; justify-content: space-between; color: #86868b;\">\r\n <span>Funnel Env:</span>\r\n <span style=\"color: #1d1d1f; font-weight: 600; font-family: monospace; font-size: 11px;\">\r\n ${params.funnelEnv}\r\n </span>\r\n </div>\r\n `;\r\n }\r\n\r\n if (params.tagadaClientEnv) {\r\n detailsHTML += `\r\n <div style=\"display: flex; justify-content: space-between; color: #86868b;\">\r\n <span>API Env:</span>\r\n <span style=\"color: #1d1d1f; font-weight: 600; font-family: monospace; font-size: 11px;\">\r\n ${params.tagadaClientEnv}\r\n </span>\r\n </div>\r\n `;\r\n }\r\n\r\n if (params.tagadaClientBaseUrl) {\r\n detailsHTML += `\r\n <div style=\"color: #86868b;\">\r\n <div style=\"margin-bottom: 4px;\">API URL:</div>\r\n <div style=\"color: #1d1d1f; font-weight: 600; font-family: monospace; font-size: 10px; word-break: break-all; background: #f5f5f7; padding: 4px 6px; border-radius: 4px;\">\r\n ${params.tagadaClientBaseUrl}\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n if (params.funnelId) {\r\n detailsHTML += `\r\n <div style=\"color: #86868b; margin-top: 4px; padding-top: 8px; border-top: 1px solid #e5e5e5;\">\r\n <div style=\"margin-bottom: 4px;\">Funnel ID:</div>\r\n <div style=\"color: #1d1d1f; font-family: monospace; font-size: 10px; word-break: break-all; background: #f5f5f7; padding: 4px 6px; border-radius: 4px;\">\r\n ${params.funnelId}\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n detailsHTML += '</div>';\r\n detailsHTML += `\r\n <div style=\"margin-top: 12px; padding-top: 8px; border-top: 1px solid #e5e5e5; font-size: 11px; color: #86868b; text-align: center;\">\r\n Add <code style=\"background: #f5f5f7; padding: 2px 4px; border-radius: 3px;\">?forceReset=true</code> to reset\r\n </div>\r\n `;\r\n\r\n // Add action button\r\n detailsHTML += `\r\n <div style=\"margin-top: 12px; padding-top: 8px; border-top: 1px solid #e5e5e5;\">\r\n <button id=\"tgd-leave-preview\" style=\"\r\n background: #ff3b30;\r\n color: white;\r\n border: none;\r\n border-radius: 6px;\r\n padding: 10px 12px;\r\n font-size: 13px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n transition: opacity 0.2s;\r\n width: 100%;\r\n \">\r\n \uD83D\uDEAA Leave Preview Mode\r\n </button>\r\n </div>\r\n `;\r\n\r\n details.innerHTML = detailsHTML;\r\n\r\n // Hover behavior - keep popup visible when hovering over badge, bridge, or popup\r\n let isHovering = false;\r\n\r\n const showDetails = () => {\r\n isHovering = true;\r\n details.style.display = 'block';\r\n bridge.style.display = 'block';\r\n };\r\n\r\n const hideDetails = () => {\r\n isHovering = false;\r\n setTimeout(() => {\r\n if (!isHovering) {\r\n details.style.display = 'none';\r\n bridge.style.display = 'none';\r\n }\r\n }, 100); // Small delay to allow moving between elements\r\n };\r\n\r\n badge.addEventListener('mouseenter', showDetails);\r\n badge.addEventListener('mouseleave', hideDetails);\r\n bridge.addEventListener('mouseenter', showDetails);\r\n bridge.addEventListener('mouseleave', hideDetails);\r\n details.addEventListener('mouseenter', showDetails);\r\n details.addEventListener('mouseleave', hideDetails);\r\n\r\n // Button: Leave preview mode\r\n const leavePreviewBtn = details.querySelector('#tgd-leave-preview') as HTMLButtonElement;\r\n if (leavePreviewBtn) {\r\n leavePreviewBtn.addEventListener('mouseenter', () => {\r\n leavePreviewBtn.style.opacity = '0.8';\r\n });\r\n leavePreviewBtn.addEventListener('mouseleave', () => {\r\n leavePreviewBtn.style.opacity = '1';\r\n });\r\n leavePreviewBtn.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n leavePreviewMode();\r\n });\r\n }\r\n\r\n // Assemble\r\n container.appendChild(badge);\r\n container.appendChild(bridge); // Add invisible bridge\r\n container.appendChild(details);\r\n\r\n // Inject into DOM\r\n document.body.appendChild(container);\r\n indicatorElement = container;\r\n isInjected = true;\r\n}\r\n\r\n/**\r\n * Remove the preview mode indicator from the DOM\r\n */\r\nexport function removePreviewModeIndicator(): void {\r\n if (indicatorElement && indicatorElement.parentNode) {\r\n indicatorElement.parentNode.removeChild(indicatorElement);\r\n indicatorElement = null;\r\n isInjected = false;\r\n }\r\n}\r\n\r\n/**\r\n * Check if indicator is currently injected\r\n */\r\nexport function isIndicatorInjected(): boolean {\r\n return isInjected;\r\n}\r\n\r\n", "import { detectEnvironment } from './config/environment';\r\nimport { ApiClient } from './resources/apiClient';\r\nimport { FunnelAction, FunnelActionType, FunnelNavigationResult, FunnelResource, SimpleFunnelContext } from './resources/funnel';\r\nimport { EventDispatcher } from './utils/eventDispatcher';\r\nimport { PluginConfig } from './utils/pluginConfig';\r\nimport { getSDKParams } from './utils/previewMode';\r\nconst lazyInjectPreviewIndicator = () =>\r\n import('./utils/previewModeIndicator').then(m => m.injectPreviewModeIndicator());\r\nimport { getFunnelSessionCookie, setFunnelSessionCookie } from './utils/sessionStorage';\r\n\r\n/**\r\n * Tracking providers supported by the SDK.\r\n * Mirrors `TrackingType` in `apps/crm-app/.../types/tracking.ts`.\r\n */\r\nexport enum TrackingProvider {\r\n FACEBOOK = 'facebook',\r\n TIKTOK = 'tiktok',\r\n SNAPCHAT = 'snapchat',\r\n PINTEREST = 'pinterest',\r\n GTM = 'gtm',\r\n}\r\n\r\n/**\r\n * Base tracking config (all providers)\r\n */\r\nexport interface BaseTrackingConfig {\r\n enabled: boolean;\r\n}\r\n\r\n/**\r\n * Pixel-based providers (Facebook, TikTok)\r\n */\r\nexport interface PixelTrackingConfig extends BaseTrackingConfig {\r\n pixelId: string;\r\n events: {\r\n PageView: boolean;\r\n InitiateCheckout: boolean;\r\n Purchase: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Snapchat pixel config (extends base pixel events)\r\n */\r\nexport interface SnapchatTrackingConfig extends BaseTrackingConfig {\r\n pixelId: string;\r\n events: {\r\n PageView: boolean;\r\n InitiateCheckout: boolean;\r\n Purchase: boolean;\r\n AddToCart: boolean;\r\n ViewContent: boolean;\r\n Search: boolean;\r\n AddToWishlist: boolean;\r\n CompleteRegistration: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Meta Conversion API config\r\n */\r\nexport interface MetaConversionTrackingConfig extends BaseTrackingConfig {\r\n accessToken: string;\r\n pixelId: string;\r\n publishPurchaseIfNewCustomerOnly: boolean;\r\n}\r\n\r\n/**\r\n * Google Tag Manager config\r\n */\r\nexport interface GTMTrackingConfig extends BaseTrackingConfig {\r\n containerId: string;\r\n events: {\r\n PageView: boolean;\r\n InitiateCheckout: boolean;\r\n Purchase: boolean;\r\n AddToCart: boolean;\r\n ViewContent: boolean;\r\n };\r\n googleAdsConversionId?: string;\r\n googleAdsConversionLabel?: string;\r\n}\r\n\r\n/**\r\n * Union of all tracking configs.\r\n * This mirrors `TrackingFormValues` from the CRM.\r\n */\r\nexport type PixelConfig =\r\n | PixelTrackingConfig\r\n | SnapchatTrackingConfig\r\n | MetaConversionTrackingConfig\r\n | GTMTrackingConfig;\r\n\r\n/**\r\n * Pixels configuration keyed by provider.\r\n * Used in RuntimeStepConfig and getAssignedPixels().\r\n */\r\nexport type PixelsConfig = {\r\n [TrackingProvider.FACEBOOK]?: PixelTrackingConfig[];\r\n [TrackingProvider.TIKTOK]?: PixelTrackingConfig[];\r\n [TrackingProvider.SNAPCHAT]?: SnapchatTrackingConfig[];\r\n [TrackingProvider.PINTEREST]?: PixelTrackingConfig[];\r\n [TrackingProvider.GTM]?: GTMTrackingConfig[];\r\n};\r\n\r\n/**\r\n * Payment method configuration entry.\r\n *\r\n * Key pattern in paymentSetupConfig:\r\n * \"{method}\" or \"{method}:{provider}\"\r\n * e.g. \"card\", \"apple_pay:stripe\", \"paypal:tagada\", \"klarna:stripe\"\r\n *\r\n * `method` = what (universal payment method: card, apple_pay, klarna, ideal...)\r\n * `provider` = who (processor family: tagada, stripe, airwallex, adyen...)\r\n *\r\n * @deprecated PaymentSetupMethod \u2014 use PaymentMethodConfig instead\r\n */\r\nexport interface ExpressMethodState {\r\n enabled: boolean;\r\n}\r\n\r\nexport type PaymentSetupMethod = PaymentMethodConfig;\r\n\r\nexport interface PaymentMethodConfig {\r\n enabled: boolean;\r\n /** Universal payment method identifier */\r\n method: string;\r\n /** Provider / processor family */\r\n provider: string;\r\n /** Render as express checkout button above the form */\r\n express?: boolean;\r\n /** Card routing via payment flow (cascade, fraud, processor selection) */\r\n paymentFlowId?: string;\r\n /** Direct processor routing for APMs and express methods */\r\n processorId?: string;\r\n /** Tagada integration record ID for native integrations */\r\n integrationId?: string;\r\n supportedCountries?: string[];\r\n presentmentCurrencies?: string[];\r\n recurring?: boolean;\r\n /** Present only on express_checkout:proc_id entries */\r\n publishableKey?: string;\r\n /** Present only on express_checkout:proc_id entries \u2014 map of apmKey \u2192 state */\r\n methods?: Record<string, ExpressMethodState>;\r\n /** Present only on crypto integration entries \u2014 map of providerId \u2192 provider state */\r\n providers?: Record<string, { enabled?: boolean; label?: string; min?: number; note?: string }>;\r\n metadata?: Record<string, any>;\r\n}\r\n\r\n// \u2500\u2500\u2500 Payment Setup Config Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport type PaymentSetupConfig = Record<string, PaymentMethodConfig>;\r\n\r\n/** Get all enabled entries from a paymentSetupConfig */\r\nexport function getEnabledMethods(config: PaymentSetupConfig | undefined): PaymentMethodConfig[] {\r\n if (!config) return [];\r\n return Object.values(config).filter(m => m.enabled);\r\n}\r\n\r\n/** Get all express methods (for rendering above the payment form) */\r\nexport function getExpressMethods(config: PaymentSetupConfig | undefined): PaymentMethodConfig[] {\r\n return getEnabledMethods(config).filter(m => m.express);\r\n}\r\n\r\n/** Group enabled express methods by processorId (one Express Element per processor) */\r\nexport function getExpressMethodsByProcessor(config: PaymentSetupConfig | undefined): Record<string, PaymentMethodConfig[]> {\r\n const groups: Record<string, PaymentMethodConfig[]> = {};\r\n for (const m of getExpressMethods(config)) {\r\n const key = m.processorId || m.integrationId || m.provider;\r\n if (!groups[key]) groups[key] = [];\r\n groups[key].push(m);\r\n }\r\n return groups;\r\n}\r\n\r\n/** Find a specific method entry by method name (returns first match) */\r\nexport function findMethod(config: PaymentSetupConfig | undefined, method: string): PaymentMethodConfig | undefined {\r\n if (!config) return undefined;\r\n for (const entry of Object.values(config)) {\r\n if (entry.method === method && entry.enabled) return entry;\r\n }\r\n return undefined;\r\n}\r\n\r\n/** Check if a specific method is enabled (any provider) */\r\nexport function isMethodEnabled(config: PaymentSetupConfig | undefined, method: string): boolean {\r\n return !!findMethod(config, method);\r\n}\r\n\r\nexport interface RuntimeStepConfig {\r\n payment?: {\r\n paymentFlowId?: string;\r\n };\r\n paymentSetupConfig?: PaymentSetupConfig;\r\n orderBumps?: {\r\n mode: 'inherit' | 'custom';\r\n enabledOfferIds?: string[];\r\n };\r\n upsellOffers?: {\r\n mode: 'inherit' | 'custom';\r\n enabledUpsellIds?: string[];\r\n };\r\n /** @deprecated Use `resources` instead */\r\n staticResources?: Record<string, string>;\r\n /** Typed resource bindings (replaces staticResources) */\r\n resources?: Record<string, string>;\r\n scripts?: Array<{\r\n name: string;\r\n enabled: boolean;\r\n content: string;\r\n position?: 'head-start' | 'head-end' | 'body-start' | 'body-end';\r\n }>;\r\n pixels?: PixelsConfig;\r\n}\r\n\r\n/**\r\n * Get the funnel ID from the injected HTML\r\n * Returns undefined if not available\r\n */\r\nfunction getAssignedFunnelId(): string | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n\r\n // Method 1: Window variable (preferred - synchronous, fast)\r\n if ((window as any).__TGD_FUNNEL_ID__) {\r\n return (window as any).__TGD_FUNNEL_ID__;\r\n }\r\n\r\n // Method 2: Meta tag fallback\r\n if (typeof document !== 'undefined') {\r\n const meta = document.querySelector('meta[name=\"x-funnel-id\"]');\r\n return meta?.getAttribute('content') || undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Get the assigned A/B test variant ID from the injected HTML\r\n * Returns undefined if not in an A/B test\r\n */\r\nfunction getAssignedFunnelVariant(): string | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n\r\n // Method 1: Window variable (preferred - synchronous, fast)\r\n if ((window as any).__TGD_FUNNEL_VARIANT_ID__) {\r\n return (window as any).__TGD_FUNNEL_VARIANT_ID__;\r\n }\r\n\r\n // Method 2: Meta tag fallback\r\n if (typeof document !== 'undefined') {\r\n const meta = document.querySelector('meta[name=\"x-funnel-variant-id\"]');\r\n return meta?.getAttribute('content') || undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Get the funnel step ID from the injected HTML\r\n * Returns undefined if not available\r\n */\r\nfunction getAssignedFunnelStep(): string | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n\r\n // Method 1: Window variable (preferred - synchronous, fast)\r\n if ((window as any).__TGD_FUNNEL_STEP_ID__) {\r\n return (window as any).__TGD_FUNNEL_STEP_ID__;\r\n }\r\n\r\n // Method 2: Meta tag fallback\r\n if (typeof document !== 'undefined') {\r\n const meta = document.querySelector('meta[name=\"x-funnel-step-id\"]');\r\n return meta?.getAttribute('content') || undefined;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Parse step config from a string value (handles both JSON and URL-encoded formats)\r\n * Robust parsing with multiple fallback strategies\r\n */\r\nfunction parseStepConfig(value: string): RuntimeStepConfig | undefined {\r\n if (!value || typeof value !== 'string') return undefined;\r\n\r\n const trimmed = value.trim();\r\n if (!trimmed) return undefined;\r\n\r\n // Try parsing strategies in order of likelihood\r\n const strategies = [\r\n // Strategy 1: Direct JSON parse (for properly escaped window variable)\r\n () => JSON.parse(trimmed),\r\n // Strategy 2: URL decode then JSON parse (for meta tag)\r\n () => JSON.parse(decodeURIComponent(trimmed)),\r\n // Strategy 3: Double URL decode (edge case: double-encoded)\r\n () => JSON.parse(decodeURIComponent(decodeURIComponent(trimmed))),\r\n ];\r\n\r\n for (const strategy of strategies) {\r\n try {\r\n const result = strategy();\r\n if (result && typeof result === 'object') {\r\n return result as RuntimeStepConfig;\r\n }\r\n } catch {\r\n // Try next strategy\r\n }\r\n }\r\n\r\n // All strategies failed\r\n if (typeof console !== 'undefined') {\r\n console.warn('[SDK] Failed to parse stepConfig:', trimmed.substring(0, 100));\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Local funnel configuration for development\r\n * Loaded from /config/funnel.local.json\r\n */\r\nexport interface LocalFunnelConfig {\r\n /** Funnel ID to use in local dev */\r\n funnelId?: string;\r\n /** Step ID to simulate */\r\n stepId?: string;\r\n /** @deprecated Use `resources` instead */\r\n staticResources?: Record<string, string>;\r\n /** Resource bindings (offer ID, product ID, etc.) */\r\n resources?: Record<string, string>;\r\n /** Payment flow ID override */\r\n paymentFlowId?: string;\r\n /** Custom scripts for local testing */\r\n scripts?: RuntimeStepConfig['scripts'];\r\n /** Pixel tracking config */\r\n pixels?: RuntimeStepConfig['pixels'];\r\n /** Order bump filtering config for local testing */\r\n orderBumps?: RuntimeStepConfig['orderBumps'];\r\n /** Upsell offer filtering config for local testing */\r\n upsellOffers?: RuntimeStepConfig['upsellOffers'];\r\n}\r\n\r\n// Cache for local funnel config (loaded once)\r\nlet localFunnelConfigCache: LocalFunnelConfig | null | undefined = undefined;\r\nlet localFunnelConfigLoading = false;\r\n\r\n/**\r\n * Check if we're in true local development (not CDN deployment)\r\n */\r\nfunction isLocalDevelopment(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n const hostname = window.location.hostname;\r\n // True local: localhost without CDN subdomain pattern\r\n return hostname === 'localhost' ||\r\n hostname === '127.0.0.1' ||\r\n (hostname.endsWith('.localhost') && !hostname.includes('.cdn.'));\r\n}\r\n\r\n/**\r\n * Load local funnel config from /config/funnel.local.json (for local dev only)\r\n * This replaces the old resources.static.json with a more complete structure\r\n * \r\n * Example funnel.local.json:\r\n * {\r\n * \"funnelId\": \"funnelv2_xxx\",\r\n * \"stepId\": \"step_checkout\",\r\n * \"staticResources\": {\r\n * \"offer\": \"offer_xxx\",\r\n * \"product\": \"product_xxx\"\r\n * },\r\n * \"paymentFlowId\": \"flow_xxx\"\r\n * }\r\n */\r\nexport async function loadLocalFunnelConfig(): Promise<LocalFunnelConfig | null> {\r\n // Only in true local development\r\n if (!isLocalDevelopment()) return null;\r\n\r\n // Return cached value if already loaded\r\n if (localFunnelConfigCache !== undefined) {\r\n return localFunnelConfigCache;\r\n }\r\n\r\n // Prevent concurrent loads\r\n if (localFunnelConfigLoading) {\r\n // Wait for existing load\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n return localFunnelConfigCache ?? null;\r\n }\r\n\r\n localFunnelConfigLoading = true;\r\n\r\n try {\r\n console.log('\uD83D\uDEE0\uFE0F [SDK] Loading local funnel config from /config/funnel.local.json...');\r\n const response = await fetch('/config/funnel.local.json');\r\n if (!response.ok) {\r\n console.log('\uD83D\uDEE0\uFE0F [SDK] funnel.local.json not found (this is fine in production)');\r\n localFunnelConfigCache = null;\r\n return null;\r\n }\r\n\r\n const config = await response.json() as LocalFunnelConfig;\r\n console.log('\uD83D\uDEE0\uFE0F [SDK] \u2705 Loaded local funnel config:', config);\r\n localFunnelConfigCache = config;\r\n return config;\r\n } catch (error) {\r\n console.log('\uD83D\uDEE0\uFE0F [SDK] funnel.local.json not available:', error);\r\n localFunnelConfigCache = null;\r\n return null;\r\n } finally {\r\n localFunnelConfigLoading = false;\r\n }\r\n}\r\n\r\n/**\r\n * Get the cached local funnel config (sync access after loadLocalFunnelConfig)\r\n */\r\nexport function getLocalFunnelConfig(): LocalFunnelConfig | null {\r\n return localFunnelConfigCache ?? null;\r\n}\r\n\r\n/**\r\n * Convert LocalFunnelConfig to RuntimeStepConfig\r\n */\r\nfunction localConfigToStepConfig(local: LocalFunnelConfig): RuntimeStepConfig {\r\n const merged = { ...local.staticResources, ...local.resources };\r\n return {\r\n payment: local.paymentFlowId ? { paymentFlowId: local.paymentFlowId } : undefined,\r\n resources: Object.keys(merged).length > 0 ? merged : undefined,\r\n scripts: local.scripts,\r\n pixels: local.pixels,\r\n orderBumps: local.orderBumps,\r\n upsellOffers: local.upsellOffers,\r\n };\r\n}\r\n\r\n/**\r\n * Get the runtime step configuration\r\n * Contains payment flow, static resources, scripts, and pixel tracking\r\n * \r\n * Priority:\r\n * 1. Local funnel config (local dev only - /config/funnel.local.json) - HIGHEST in local dev\r\n * 2. Window variable (production - HTML injection)\r\n * 3. Meta tag (production - HTML injection fallback)\r\n * \r\n * This allows local developers to override injected config for testing.\r\n * \r\n * Returns undefined if not available\r\n */\r\nexport function getAssignedStepConfig(): RuntimeStepConfig | undefined {\r\n if (typeof window === 'undefined') return undefined;\r\n\r\n // Method 1: Local dev override (HIGHEST PRIORITY in local dev)\r\n const localConfig = getLocalFunnelConfig();\r\n if (localConfig) {\r\n console.log('\uD83D\uDEE0\uFE0F [SDK] Using local funnel.local.json (overrides injected)');\r\n return localConfigToStepConfig(localConfig);\r\n }\r\n\r\n // Method 2: Window variable (production - HTML injection)\r\n const windowValue = (window as any).__TGD_STEP_CONFIG__;\r\n if (windowValue) {\r\n const parsed = parseStepConfig(windowValue);\r\n if (parsed) return parsed;\r\n }\r\n\r\n // Method 3: Meta tag fallback (URL-encoded)\r\n if (typeof document !== 'undefined') {\r\n const meta = document.querySelector('meta[name=\"x-step-config\"]');\r\n const content = meta?.getAttribute('content');\r\n if (content) {\r\n const parsed = parseStepConfig(content);\r\n if (parsed) return parsed;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Get the assigned payment flow ID from step config or legacy injection.\r\n * Resolution order:\r\n * 1. paymentSetupConfig.card.paymentFlowId (per-method, most specific)\r\n * 2. stepConfig.payment.paymentFlowId (per-step level)\r\n * 3. window.__TGD_PAYMENT_FLOW_ID__ (legacy injection)\r\n * 4. meta[name=\"x-payment-flow-id\"] (legacy meta tag)\r\n */\r\nexport function getAssignedPaymentFlowId(): string | undefined {\r\n const stepConfig = getAssignedStepConfig();\r\n\r\n // Method 1: Per-method config \u2014 card entry in paymentSetupConfig\r\n const cardConfig = stepConfig?.paymentSetupConfig?.card;\r\n if (cardConfig?.paymentFlowId) {\r\n return cardConfig.paymentFlowId;\r\n }\r\n\r\n // Method 2: Per-step config (legacy but still supported)\r\n if (stepConfig?.payment?.paymentFlowId) {\r\n return stepConfig.payment.paymentFlowId;\r\n }\r\n\r\n // Method 3: Legacy direct injection (backward compatibility)\r\n if (typeof window !== 'undefined') {\r\n if ((window as any).__TGD_PAYMENT_FLOW_ID__) {\r\n return (window as any).__TGD_PAYMENT_FLOW_ID__;\r\n }\r\n if (typeof document !== 'undefined') {\r\n const meta = document.querySelector('meta[name=\"x-payment-flow-id\"]');\r\n return meta?.getAttribute('content') || undefined;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Get resource bindings from step config.\r\n * Reads from `resources` (new) with `staticResources` (legacy) as fallback, merged.\r\n */\r\nexport function getAssignedResources(): Record<string, string> | undefined {\r\n const stepConfig = getAssignedStepConfig();\r\n const legacy = stepConfig?.staticResources;\r\n const current = stepConfig?.resources;\r\n if (!legacy && !current) return undefined;\r\n return { ...legacy, ...current };\r\n}\r\n\r\n/**\r\n * @deprecated Use `getAssignedResources()` instead.\r\n * Kept for backward compatibility \u2014 reads from both `resources` and `staticResources`.\r\n */\r\nexport function getAssignedStaticResources(): Record<string, string> | undefined {\r\n return getAssignedResources();\r\n}\r\n\r\n/**\r\n * Get the assigned scripts from step config\r\n * Returns only enabled scripts, filtered by position if specified\r\n */\r\nexport function getAssignedScripts(position?: 'head-start' | 'head-end' | 'body-start' | 'body-end'): RuntimeStepConfig['scripts'] {\r\n const stepConfig = getAssignedStepConfig();\r\n if (!stepConfig?.scripts) return undefined;\r\n\r\n // Filter enabled scripts\r\n let scripts = stepConfig.scripts.filter(s => s.enabled);\r\n\r\n // Filter by position if specified\r\n if (position) {\r\n scripts = scripts.filter(s => s.position === position || (!s.position && position === 'head-end'));\r\n }\r\n\r\n return scripts.length > 0 ? scripts : undefined;\r\n}\r\n\r\n/**\r\n * Get assigned pixel tracking configuration (normalized to arrays)\r\n * Always returns arrays of PixelConfig for consistent consumption.\r\n */\r\n/**\r\n * Split a pixel config with semicolon/comma-separated IDs into individual configs.\r\n * Handles cases where the CRM stores \"ID1; ID2; ID3\" as a single pixelId or containerId.\r\n */\r\nfunction splitPixelConfig(px: PixelConfig): PixelConfig[] {\r\n // GTM configs use containerId\r\n const idField = 'containerId' in px ? 'containerId' : 'pixelId';\r\n const rawId = (px as any)[idField] as string | undefined;\r\n if (!rawId || !rawId.includes(';') && !rawId.includes(',')) return [px];\r\n\r\n const ids = rawId.split(/[;,]/).map((id: string) => id.trim()).filter((id: string) => id.length > 0);\r\n if (ids.length <= 1) return [px];\r\n\r\n return ids.map((id) => ({ ...px, [idField]: id }));\r\n}\r\n\r\nexport function getAssignedPixels(): PixelsConfig | undefined {\r\n const stepConfig = getAssignedStepConfig();\r\n const rawPixels = stepConfig?.pixels;\r\n if (!rawPixels || typeof rawPixels !== 'object') return undefined;\r\n\r\n const normalized: Record<string, PixelConfig[]> = {};\r\n\r\n for (const [key, value] of Object.entries(rawPixels)) {\r\n if (!value) continue;\r\n\r\n if (Array.isArray(value)) {\r\n // Expand any entries with semicolon/comma-separated pixelIds into separate configs\r\n normalized[key] = (value as PixelConfig[]).flatMap((px) => splitPixelConfig(px));\r\n } else if (typeof value === 'object') {\r\n // Single object - wrap in array, splitting if needed\r\n normalized[key] = splitPixelConfig(value as PixelConfig);\r\n }\r\n // Skip invalid entries\r\n }\r\n\r\n return Object.keys(normalized).length > 0 ? normalized : undefined;\r\n}\r\n\r\n/**\r\n * Get the enabled order bump offer IDs from step config.\r\n * Returns undefined when mode is 'inherit' (use all store bumps).\r\n * Returns the explicit list when mode is 'custom'.\r\n */\r\nexport function getAssignedOrderBumpOfferIds(): string[] | undefined {\r\n const stepConfig = getAssignedStepConfig();\r\n if (!stepConfig?.orderBumps) return undefined;\r\n if (stepConfig.orderBumps.mode !== 'custom') return undefined;\r\n return stepConfig.orderBumps.enabledOfferIds;\r\n}\r\n\r\n/**\r\n * Get the enabled upsell offer IDs from step config.\r\n * Returns undefined when mode is 'inherit' (use all store upsells).\r\n * Returns the explicit list when mode is 'custom'.\r\n */\r\nexport function getAssignedUpsellOfferIds(): string[] | undefined {\r\n const stepConfig = getAssignedStepConfig();\r\n if (!stepConfig?.upsellOffers) return undefined;\r\n if (stepConfig.upsellOffers.mode !== 'custom') return undefined;\r\n return stepConfig.upsellOffers.enabledUpsellIds;\r\n}\r\n\r\nexport interface FunnelClientConfig {\r\n apiClient: ApiClient;\r\n debugMode?: boolean;\r\n pluginConfig?: PluginConfig;\r\n environment?: {\r\n environment: 'local' | 'development' | 'production' | 'staging';\r\n };\r\n /**\r\n * Automatically redirect to result.url after navigation (default: true)\r\n * Set to false if you want to handle navigation manually\r\n */\r\n autoRedirect?: boolean;\r\n /**\r\n * Override funnelId from rawPluginConfig\r\n */\r\n funnelId?: string;\r\n /**\r\n * Override stepId from rawPluginConfig\r\n */\r\n stepId?: string;\r\n}\r\n\r\nexport interface FunnelState {\r\n context: SimpleFunnelContext | null;\r\n isLoading: boolean;\r\n isInitialized: boolean;\r\n isNavigating: boolean;\r\n error: Error | null;\r\n sessionError: Error | null;\r\n}\r\n\r\nexport class FunnelClient {\r\n public state: FunnelState;\r\n private resource: FunnelResource;\r\n private eventDispatcher = new EventDispatcher<FunnelState>();\r\n private config: FunnelClientConfig;\r\n\r\n // Guards\r\n private isInitializing = false;\r\n private initializationAttempted = false;\r\n\r\n constructor(config: FunnelClientConfig) {\r\n this.config = config;\r\n this.resource = new FunnelResource(config.apiClient);\r\n\r\n this.state = {\r\n context: null,\r\n isLoading: false,\r\n isInitialized: false,\r\n isNavigating: false,\r\n error: null,\r\n sessionError: null,\r\n };\r\n }\r\n\r\n /**\r\n * Update configuration (e.g. when plugin config loads)\r\n */\r\n setConfig(config: Partial<FunnelClientConfig>) {\r\n this.config = { ...this.config, ...config };\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n */\r\n subscribe(listener: (state: FunnelState) => void): () => void {\r\n return this.eventDispatcher.subscribe(listener);\r\n }\r\n\r\n /**\r\n * Get current state\r\n */\r\n getState(): FunnelState {\r\n return this.state;\r\n }\r\n\r\n /**\r\n * Get the session ID that would be used for initialization (URL params or cookie)\r\n * This allows getting the session ID even before the client is fully initialized.\r\n */\r\n getDetectedSessionId(): string | null {\r\n // Priority 1: Already initialized session\r\n if (this.state.context?.sessionId) {\r\n return this.state.context.sessionId;\r\n }\r\n\r\n if (typeof window === 'undefined') return null;\r\n\r\n // Priority 2: URL params\r\n const params = new URLSearchParams(window.location.search);\r\n const urlSessionId = params.get('funnelSessionId');\r\n if (urlSessionId) return urlSessionId;\r\n\r\n // Priority 3: Cookie\r\n return getFunnelSessionCookie() || null;\r\n }\r\n\r\n /**\r\n * Reset initialization state (used for back-button restores)\r\n */\r\n resetInitialization() {\r\n this.initializationAttempted = false;\r\n this.isInitializing = false;\r\n // Clear context to force a fresh autoInitialize call to hit the backend\r\n this.updateState({\r\n context: null,\r\n isInitialized: false,\r\n });\r\n }\r\n\r\n /**\r\n * Initialize session with automatic detection (cookies, URL, etc.)\r\n */\r\n async autoInitialize(\r\n authSession: { customerId: string; sessionId: string },\r\n store: { id: string; accountId: string },\r\n funnelId?: string\r\n ): Promise<SimpleFunnelContext | null> {\r\n if (this.state.context) return this.state.context;\r\n if (this.isInitializing) return null;\r\n if (this.initializationAttempted) return null;\r\n\r\n this.initializationAttempted = true;\r\n this.isInitializing = true;\r\n this.updateState({ isLoading: true, error: null });\r\n\r\n try {\r\n // \uD83C\uDFAF Get detected session ID\r\n const existingSessionId = this.getDetectedSessionId();\r\n\r\n // URL params for funnelId\r\n const params = new URLSearchParams(typeof window !== 'undefined' ? window.location.search : '');\r\n const urlFunnelId = params.get('funnelId');\r\n const effectiveFunnelId = urlFunnelId || funnelId;\r\n\r\n // \uD83C\uDFAF Read funnel tracking data from injected HTML\r\n const injectedFunnelId = getAssignedFunnelId(); // Funnel ID from server\r\n const funnelVariantId = getAssignedFunnelVariant(); // A/B test variant ID\r\n const injectedStepId = getAssignedFunnelStep(); // Current step ID\r\n\r\n // \uD83C\uDFAF Get SDK override parameters (draft, funnelTracking, etc.)\r\n const sdkParams = getSDKParams();\r\n\r\n // Priority: config override > injected > URL/prop\r\n const finalFunnelId = this.config.funnelId || injectedFunnelId || effectiveFunnelId;\r\n const finalStepId = this.config.stepId || injectedStepId;\r\n\r\n // \uD83C\uDFAF Determine funnelEnv from URL params\r\n const urlParams = typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : null;\r\n const funnelEnv = urlParams?.get('funnelEnv') as 'staging' | 'production' | null;\r\n\r\n if (this.config.debugMode) {\r\n console.log('\uD83D\uDE80 [FunnelClient] Auto-initializing...', {\r\n existingSessionId,\r\n effectiveFunnelId: finalFunnelId,\r\n funnelVariantId, // \uD83C\uDFAF Log variant ID for debugging\r\n funnelStepId: finalStepId, // \uD83C\uDFAF Log step ID for debugging\r\n draft: sdkParams.draft, // \uD83C\uDFAF Log draft mode\r\n funnelTracking: sdkParams.funnelTracking, // \uD83C\uDFAF Log tracking flag\r\n funnelEnv, // \uD83C\uDFAF Log funnel environment\r\n tagadaClientEnv: sdkParams.tagadaClientEnv, // \uD83C\uDFAF Log client environment\r\n tagadaClientBaseUrl: sdkParams.tagadaClientBaseUrl, // \uD83C\uDFAF Log custom API URL\r\n source: {\r\n funnelId: this.config.funnelId ? 'config' : injectedFunnelId ? 'injected' : effectiveFunnelId ? 'url/prop' : 'none',\r\n stepId: this.config.stepId ? 'config' : injectedStepId ? 'injected' : 'none',\r\n },\r\n });\r\n }\r\n\r\n // Note: We proceed even without funnelId/sessionId - the backend will create a new anonymous session if needed\r\n\r\n const response = await this.resource.initialize({\r\n cmsSession: {\r\n customerId: authSession.customerId,\r\n sessionId: authSession.sessionId,\r\n storeId: store.id,\r\n accountId: store.accountId,\r\n },\r\n funnelId: finalFunnelId,\r\n existingSessionId: existingSessionId || undefined,\r\n currentUrl: typeof window !== 'undefined' ? window.location.href : undefined,\r\n funnelVariantId, // \uD83C\uDFAF Pass A/B test variant ID to backend\r\n funnelStepId: finalStepId, // \uD83C\uDFAF Pass step ID to backend (with config override)\r\n draft: sdkParams.draft, // \uD83C\uDFAF Pass draft mode explicitly (more robust than URL parsing)\r\n funnelTracking: sdkParams.funnelTracking, // \uD83C\uDFAF Pass funnel tracking flag explicitly\r\n funnelEnv: funnelEnv || undefined, // \uD83C\uDFAF Pass funnel environment (staging/production)\r\n tagadaClientEnv: sdkParams.tagadaClientEnv, // \uD83C\uDFAF Pass client environment override\r\n tagadaClientBaseUrl: sdkParams.tagadaClientBaseUrl, // \uD83C\uDFAF Pass custom API base URL\r\n currency: sdkParams.currency, // \uD83C\uDF0D Pass display currency override\r\n locale: sdkParams.locale, // \uD83C\uDF0D Pass display locale override\r\n });\r\n\r\n if (response.success && response.context) {\r\n const enriched = this.enrichContext(response.context);\r\n this.handleSessionSuccess(enriched);\r\n\r\n lazyInjectPreviewIndicator();\r\n\r\n return enriched;\r\n } else {\r\n throw new Error(response.error || 'Failed to initialize funnel session');\r\n }\r\n\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.updateState({ error: err, isLoading: false });\r\n if (this.config.debugMode) {\r\n console.error('\u274C [FunnelClient] Init failed:', err);\r\n }\r\n throw err;\r\n } finally {\r\n this.isInitializing = false;\r\n }\r\n }\r\n\r\n /**\r\n * Manual initialization\r\n */\r\n async initialize(\r\n authSession: { customerId: string; sessionId: string },\r\n store: { id: string; accountId: string },\r\n funnelId?: string,\r\n entryStepId?: string\r\n ) {\r\n this.updateState({ isLoading: true, error: null });\r\n try {\r\n // \uD83C\uDFAF Read A/B test variant ID and step ID from injected HTML\r\n const funnelVariantId = getAssignedFunnelVariant();\r\n const funnelStepId = getAssignedFunnelStep();\r\n\r\n if (this.config.debugMode) {\r\n if (funnelVariantId) console.log('\uD83C\uDFAF [FunnelClient] Detected A/B test variant:', funnelVariantId);\r\n if (funnelStepId) console.log('\uD83C\uDFAF [FunnelClient] Detected step ID:', funnelStepId);\r\n }\r\n\r\n const response = await this.resource.initialize({\r\n cmsSession: {\r\n customerId: authSession.customerId,\r\n sessionId: authSession.sessionId,\r\n storeId: store.id,\r\n accountId: store.accountId,\r\n },\r\n funnelId: funnelId,\r\n entryStepId,\r\n currentUrl: typeof window !== 'undefined' ? window.location.href : undefined,\r\n funnelVariantId, // \uD83C\uDFAF Pass A/B test variant ID to backend\r\n funnelStepId, // \uD83C\uDFAF Pass step ID to backend\r\n });\r\n\r\n if (response.success && response.context) {\r\n const enriched = this.enrichContext(response.context);\r\n this.handleSessionSuccess(enriched);\r\n\r\n lazyInjectPreviewIndicator();\r\n\r\n return enriched;\r\n } else {\r\n throw new Error(response.error || 'Failed to initialize');\r\n }\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.updateState({ error: err, isLoading: false });\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Navigate\r\n * @param event - Navigation event/action\r\n * @param options - Navigation options\r\n * @param options.fireAndForget - If true, queues navigation to QStash and returns immediately without waiting for result\r\n * @param options.customerTags - Customer tags to set (merged with existing customer tags)\r\n * @param options.deviceId - Device ID for geo/device tag enrichment (optional, rarely needed)\r\n * @param options.autoRedirect - Override global autoRedirect setting for this specific call (default: use config)\r\n */\r\n async navigate(\r\n event: FunnelAction,\r\n options?: {\r\n fireAndForget?: boolean;\r\n customerTags?: string[];\r\n deviceId?: string;\r\n autoRedirect?: boolean;\r\n waitForSession?: boolean;\r\n }\r\n ): Promise<FunnelNavigationResult> {\r\n // Wait for session if requested\r\n if (options?.waitForSession && !this.state.context?.sessionId) {\r\n if (this.config.debugMode) {\r\n console.log('\u23F3 [FunnelClient] Waiting for session before navigation...');\r\n }\r\n\r\n const maxWaitTime = 5000;\r\n const startTime = Date.now();\r\n\r\n while (!this.state.context?.sessionId && (Date.now() - startTime < maxWaitTime)) {\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n }\r\n\r\n if (this.state.context?.sessionId && this.config.debugMode) {\r\n console.log('\u2705 [FunnelClient] Session ready, proceeding with navigation');\r\n }\r\n }\r\n\r\n if (!this.state.context?.sessionId) throw new Error('No active session');\r\n\r\n this.updateState({ isNavigating: true, isLoading: true });\r\n\r\n try {\r\n // Get current funnel state from injected HTML/meta tags\r\n let funnelVariantId = getAssignedFunnelVariant();\r\n let funnelStepId = getAssignedFunnelStep();\r\n const currentUrl = typeof window !== 'undefined' ? window.location.href : undefined;\r\n\r\n // \u2705 FALLBACK: Use config values if injection not available (e.g., on Shopify storefront)\r\n if (!funnelStepId && this.config.stepId) {\r\n funnelStepId = this.config.stepId;\r\n if (this.config.debugMode) {\r\n console.log('\uD83D\uDD0D [FunnelClient.navigate] Using stepId from config (no injection):', funnelStepId);\r\n }\r\n }\r\n\r\n if (!funnelVariantId && (this.config as any).variantId) {\r\n funnelVariantId = (this.config as any).variantId;\r\n if (this.config.debugMode) {\r\n console.log('\uD83D\uDD0D [FunnelClient.navigate] Using variantId from config (no injection):', funnelVariantId);\r\n }\r\n }\r\n\r\n // \u2705 DEBUG: Log what we're sending\r\n if (this.config.debugMode) {\r\n console.log('\uD83D\uDD0D [FunnelClient.navigate] Sending to backend:', {\r\n sessionId: this.state.context.sessionId,\r\n currentUrl,\r\n funnelStepId: funnelStepId || '(not found)',\r\n funnelVariantId: funnelVariantId || '(not found)',\r\n hasInjectedStepId: !!getAssignedFunnelStep(),\r\n hasInjectedVariantId: !!getAssignedFunnelVariant(),\r\n usedConfigFallback: !getAssignedFunnelStep() && !!this.config.stepId,\r\n customerTags: options?.customerTags || '(none)',\r\n deviceId: options?.deviceId || '(none)',\r\n });\r\n }\r\n\r\n const fireAndForget = options?.fireAndForget || false;\r\n\r\n const response = await this.resource.navigate({\r\n sessionId: this.state.context.sessionId,\r\n event,\r\n currentUrl,\r\n funnelStepId,\r\n funnelVariantId,\r\n fireAndForget,\r\n customerTags: options?.customerTags,\r\n deviceId: options?.deviceId,\r\n });\r\n\r\n if (!response.success || !response.result) {\r\n throw new Error(response.error || 'Navigation failed');\r\n }\r\n\r\n const result = response.result as FunnelNavigationResult;\r\n\r\n // \uD83D\uDD25 Fire-and-forget mode: Just return acknowledgment, skip everything else\r\n if (result.queued) {\r\n this.updateState({ isNavigating: false, isLoading: false });\r\n\r\n // Update session ID if it changed (session recovery)\r\n if (result.sessionId && result.sessionId !== this.state.context?.sessionId) {\r\n if (this.config.debugMode) {\r\n console.log(`\uD83D\uDD25 [FunnelClient] Session ID updated: ${this.state.context?.sessionId} \u2192 ${result.sessionId}`);\r\n }\r\n // Update context session ID\r\n if (this.state.context) {\r\n this.state.context.sessionId = result.sessionId;\r\n }\r\n }\r\n\r\n if (this.config.debugMode) {\r\n console.log('\uD83D\uDD25 [FunnelClient] Navigation queued (fire-and-forget mode)');\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Normal navigation: handle redirect\r\n // Per-call option takes precedence over global config\r\n const shouldAutoRedirect = options?.autoRedirect !== undefined\r\n ? options.autoRedirect\r\n : this.config.autoRedirect !== false; // Default to true\r\n\r\n // Skip refreshSession if auto-redirecting (next page will initialize with fresh state)\r\n // Only refresh if staying on same page (autoRedirect: false)\r\n // if (!shouldAutoRedirect) {\r\n // if (this.config.debugMode) {\r\n // console.log('\uD83D\uDD04 [FunnelClient] Refreshing session (no auto-redirect)');\r\n // }\r\n // await this.refreshSession();\r\n // }\r\n\r\n this.updateState({ isNavigating: false, isLoading: false });\r\n\r\n // Auto-redirect if enabled and result has a URL\r\n if (shouldAutoRedirect && result?.url && typeof window !== 'undefined') {\r\n if (this.config.debugMode) {\r\n console.log('\uD83D\uDE80 [FunnelClient] Auto-redirecting to:', result.url, '(skipped session refresh - next page will initialize)');\r\n }\r\n window.location.href = result.url;\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.updateState({ error: err, isNavigating: false, isLoading: false });\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Go to a specific step (direct navigation)\r\n * @param stepId - Target step ID\r\n * @param options - Navigation options (autoRedirect, etc.)\r\n */\r\n async goToStep(\r\n stepId: string,\r\n options?: { autoRedirect?: boolean }\r\n ): Promise<FunnelNavigationResult> {\r\n return this.navigate(\r\n {\r\n type: FunnelActionType.DIRECT_NAVIGATION,\r\n data: { targetStepId: stepId },\r\n } as FunnelAction,\r\n options\r\n );\r\n }\r\n\r\n /**\r\n * Refresh session data\r\n */\r\n async refreshSession() {\r\n if (!this.state.context?.sessionId) return;\r\n\r\n try {\r\n const response = await this.resource.getSession(this.state.context.sessionId);\r\n if (response.success && response.context) {\r\n const enriched = this.enrichContext(response.context);\r\n this.updateState({ context: enriched, sessionError: null });\r\n return enriched;\r\n }\r\n } catch (error) {\r\n this.updateState({ sessionError: error instanceof Error ? error : new Error(String(error)) });\r\n }\r\n }\r\n\r\n /**\r\n * Update context data\r\n */\r\n async updateContext(updates: Partial<SimpleFunnelContext>) {\r\n if (!this.state.context?.sessionId) throw new Error('No active session');\r\n this.updateState({ isLoading: true });\r\n\r\n try {\r\n const response = await this.resource.updateContext(this.state.context.sessionId, { contextUpdates: updates });\r\n if (response.success) {\r\n await this.refreshSession();\r\n } else {\r\n throw new Error(response.error || 'Failed to update context');\r\n }\r\n } finally {\r\n this.updateState({ isLoading: false });\r\n }\r\n }\r\n\r\n /**\r\n * End session\r\n */\r\n async endSession() {\r\n if (!this.state.context?.sessionId) return;\r\n\r\n try {\r\n await this.resource.endSession(this.state.context.sessionId);\r\n } finally {\r\n this.state.context = null;\r\n this.updateState({ context: null, isInitialized: false });\r\n if (typeof document !== 'undefined') {\r\n // Clear cookie via import or manually if needed, but we have utility for that\r\n // We should probably import clearFunnelSessionCookie\r\n }\r\n }\r\n }\r\n\r\n // Private helpers\r\n\r\n private updateState(updates: Partial<FunnelState>) {\r\n this.state = { ...this.state, ...updates };\r\n this.eventDispatcher.notify(this.state);\r\n }\r\n\r\n private handleSessionSuccess(context: SimpleFunnelContext) {\r\n setFunnelSessionCookie(context.sessionId);\r\n this.updateState({\r\n context,\r\n isLoading: false,\r\n isInitialized: true,\r\n error: null,\r\n sessionError: null\r\n });\r\n }\r\n\r\n private enrichContext(ctx: SimpleFunnelContext): SimpleFunnelContext {\r\n const env = this.config.environment?.environment || detectEnvironment();\r\n\r\n if (env !== 'local') return ctx;\r\n\r\n const localResources = this.config.pluginConfig?.staticResources || {};\r\n if (Object.keys(localResources).length === 0) return ctx;\r\n\r\n // \uD83C\uDFAF Check if context already has the same static resources\r\n // This prevents creating new objects unnecessarily, which would trigger React re-renders\r\n const existingStatic = ctx.static || {};\r\n const hasAllResources = Object.keys(localResources).every(\r\n key => existingStatic[key] === localResources[key]\r\n );\r\n\r\n // If context already has all static resources with same references, don't recreate\r\n if (hasAllResources && Object.keys(existingStatic).length === Object.keys(localResources).length) {\r\n return ctx;\r\n }\r\n\r\n return {\r\n ...ctx,\r\n static: {\r\n ...localResources,\r\n ...existingStatic\r\n }\r\n };\r\n }\r\n}\r\n\r\n", "const DEFAULT_DELIMITER = \"/\";\nconst NOOP_VALUE = (value: string) => value;\nconst ID_START = /^[$_\\p{ID_Start}]$/u;\nconst ID_CONTINUE = /^[$\\u200c\\u200d\\p{ID_Continue}]$/u;\n\n/**\n * Encode a string into another string.\n */\nexport type Encode = (value: string) => string;\n\n/**\n * Decode a string into another string.\n */\nexport type Decode = (value: string) => string;\n\nexport interface ParseOptions {\n /**\n * A function for encoding input strings.\n */\n encodePath?: Encode;\n}\n\nexport interface PathToRegexpOptions {\n /**\n * Matches the path completely without trailing characters. (default: `true`)\n */\n end?: boolean;\n /**\n * Allows optional trailing delimiter to match. (default: `true`)\n */\n trailing?: boolean;\n /**\n * Match will be case sensitive. (default: `false`)\n */\n sensitive?: boolean;\n /**\n * The default delimiter for segments. (default: `'/'`)\n */\n delimiter?: string;\n}\n\nexport interface MatchOptions extends PathToRegexpOptions {\n /**\n * Function for decoding strings for params, or `false` to disable entirely. (default: `decodeURIComponent`)\n */\n decode?: Decode | false;\n}\n\nexport interface CompileOptions {\n /**\n * Function for encoding input strings for output into the path, or `false` to disable entirely. (default: `encodeURIComponent`)\n */\n encode?: Encode | false;\n /**\n * The default delimiter for segments. (default: `'/'`)\n */\n delimiter?: string;\n}\n\ntype TokenType =\n | \"{\"\n | \"}\"\n | \"wildcard\"\n | \"param\"\n | \"char\"\n | \"escape\"\n | \"end\"\n // Reserved for use or ambiguous due to past use.\n | \"(\"\n | \")\"\n | \"[\"\n | \"]\"\n | \"+\"\n | \"?\"\n | \"!\";\n\n/**\n * Tokenizer results.\n */\ninterface LexToken {\n type: TokenType;\n index: number;\n value: string;\n}\n\nconst SIMPLE_TOKENS: Record<string, TokenType> = {\n // Groups.\n \"{\": \"{\",\n \"}\": \"}\",\n // Reserved.\n \"(\": \"(\",\n \")\": \")\",\n \"[\": \"[\",\n \"]\": \"]\",\n \"+\": \"+\",\n \"?\": \"?\",\n \"!\": \"!\",\n};\n\n/**\n * Escape text for stringify to path.\n */\nfunction escapeText(str: string) {\n return str.replace(/[{}()\\[\\]+?!:*\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Escape a regular expression string.\n */\nfunction escape(str: string) {\n return str.replace(/[.+*?^${}()[\\]|/\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Plain text.\n */\nexport interface Text {\n type: \"text\";\n value: string;\n}\n\n/**\n * A parameter designed to match arbitrary text within a segment.\n */\nexport interface Parameter {\n type: \"param\";\n name: string;\n}\n\n/**\n * A wildcard parameter designed to match multiple segments.\n */\nexport interface Wildcard {\n type: \"wildcard\";\n name: string;\n}\n\n/**\n * A set of possible tokens to expand when matching.\n */\nexport interface Group {\n type: \"group\";\n tokens: Token[];\n}\n\n/**\n * A token that corresponds with a regexp capture.\n */\nexport type Key = Parameter | Wildcard;\n\n/**\n * A sequence of `path-to-regexp` keys that match capturing groups.\n */\nexport type Keys = Array<Key>;\n\n/**\n * A sequence of path match characters.\n */\nexport type Token = Text | Parameter | Wildcard | Group;\n\n/**\n * Tokenized path instance.\n */\nexport class TokenData {\n constructor(\n public readonly tokens: Token[],\n public readonly originalPath?: string,\n ) {}\n}\n\n/**\n * ParseError is thrown when there is an error processing the path.\n */\nexport class PathError extends TypeError {\n constructor(\n message: string,\n public readonly originalPath: string | undefined,\n ) {\n let text = message;\n if (originalPath) text += `: ${originalPath}`;\n text += `; visit https://git.new/pathToRegexpError for info`;\n super(text);\n }\n}\n\n/**\n * Parse a string for the raw tokens.\n */\nexport function parse(str: string, options: ParseOptions = {}): TokenData {\n const { encodePath = NOOP_VALUE } = options;\n const chars = [...str];\n const tokens: Array<LexToken> = [];\n let index = 0;\n let pos = 0;\n\n function name() {\n let value = \"\";\n\n if (ID_START.test(chars[index])) {\n do {\n value += chars[index++];\n } while (ID_CONTINUE.test(chars[index]));\n } else if (chars[index] === '\"') {\n let quoteStart = index;\n\n while (index++ < chars.length) {\n if (chars[index] === '\"') {\n index++;\n quoteStart = 0;\n break;\n }\n\n // Increment over escape characters.\n if (chars[index] === \"\\\\\") index++;\n\n value += chars[index];\n }\n\n if (quoteStart) {\n throw new PathError(`Unterminated quote at index ${quoteStart}`, str);\n }\n }\n\n if (!value) {\n throw new PathError(`Missing parameter name at index ${index}`, str);\n }\n\n return value;\n }\n\n while (index < chars.length) {\n const value = chars[index];\n const type = SIMPLE_TOKENS[value];\n\n if (type) {\n tokens.push({ type, index: index++, value });\n } else if (value === \"\\\\\") {\n tokens.push({ type: \"escape\", index: index++, value: chars[index++] });\n } else if (value === \":\") {\n tokens.push({ type: \"param\", index: index++, value: name() });\n } else if (value === \"*\") {\n tokens.push({ type: \"wildcard\", index: index++, value: name() });\n } else {\n tokens.push({ type: \"char\", index: index++, value });\n }\n }\n\n tokens.push({ type: \"end\", index, value: \"\" });\n\n function consumeUntil(endType: TokenType): Token[] {\n const output: Token[] = [];\n\n while (true) {\n const token = tokens[pos++];\n if (token.type === endType) break;\n\n if (token.type === \"char\" || token.type === \"escape\") {\n let path = token.value;\n let cur = tokens[pos];\n\n while (cur.type === \"char\" || cur.type === \"escape\") {\n path += cur.value;\n cur = tokens[++pos];\n }\n\n output.push({\n type: \"text\",\n value: encodePath(path),\n });\n continue;\n }\n\n if (token.type === \"param\" || token.type === \"wildcard\") {\n output.push({\n type: token.type,\n name: token.value,\n });\n continue;\n }\n\n if (token.type === \"{\") {\n output.push({\n type: \"group\",\n tokens: consumeUntil(\"}\"),\n });\n continue;\n }\n\n throw new PathError(\n `Unexpected ${token.type} at index ${token.index}, expected ${endType}`,\n str,\n );\n }\n\n return output;\n }\n\n return new TokenData(consumeUntil(\"end\"), str);\n}\n\n/**\n * Compile a string to a template function for the path.\n */\nexport function compile<P extends ParamData = ParamData>(\n path: Path,\n options: CompileOptions & ParseOptions = {},\n) {\n const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n options;\n const data = typeof path === \"object\" ? path : parse(path, options);\n const fn = tokensToFunction(data.tokens, delimiter, encode);\n\n return function path(params: P = {} as P) {\n const [path, ...missing] = fn(params);\n if (missing.length) {\n throw new TypeError(`Missing parameters: ${missing.join(\", \")}`);\n }\n return path;\n };\n}\n\nexport type ParamData = Partial<Record<string, string | string[]>>;\nexport type PathFunction<P extends ParamData> = (data?: P) => string;\n\nfunction tokensToFunction(\n tokens: Token[],\n delimiter: string,\n encode: Encode | false,\n) {\n const encoders = tokens.map((token) =>\n tokenToFunction(token, delimiter, encode),\n );\n\n return (data: ParamData) => {\n const result: string[] = [\"\"];\n\n for (const encoder of encoders) {\n const [value, ...extras] = encoder(data);\n result[0] += value;\n result.push(...extras);\n }\n\n return result;\n };\n}\n\n/**\n * Convert a single token into a path building function.\n */\nfunction tokenToFunction(\n token: Token,\n delimiter: string,\n encode: Encode | false,\n): (data: ParamData) => string[] {\n if (token.type === \"text\") return () => [token.value];\n\n if (token.type === \"group\") {\n const fn = tokensToFunction(token.tokens, delimiter, encode);\n\n return (data) => {\n const [value, ...missing] = fn(data);\n if (!missing.length) return [value];\n return [\"\"];\n };\n }\n\n const encodeValue = encode || NOOP_VALUE;\n\n if (token.type === \"wildcard\" && encode !== false) {\n return (data) => {\n const value = data[token.name];\n if (value == null) return [\"\", token.name];\n\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(`Expected \"${token.name}\" to be a non-empty array`);\n }\n\n return [\n value\n .map((value, index) => {\n if (typeof value !== \"string\") {\n throw new TypeError(\n `Expected \"${token.name}/${index}\" to be a string`,\n );\n }\n\n return encodeValue(value);\n })\n .join(delimiter),\n ];\n };\n }\n\n return (data) => {\n const value = data[token.name];\n if (value == null) return [\"\", token.name];\n\n if (typeof value !== \"string\") {\n throw new TypeError(`Expected \"${token.name}\" to be a string`);\n }\n\n return [encodeValue(value)];\n };\n}\n\n/**\n * A match result contains data about the path match.\n */\nexport interface MatchResult<P extends ParamData> {\n path: string;\n params: P;\n}\n\n/**\n * A match is either `false` (no match) or a match result.\n */\nexport type Match<P extends ParamData> = false | MatchResult<P>;\n\n/**\n * The match function takes a string and returns whether it matched the path.\n */\nexport type MatchFunction<P extends ParamData> = (path: string) => Match<P>;\n\n/**\n * Supported path types.\n */\nexport type Path = string | TokenData;\n\n/**\n * Transform a path into a match function.\n */\nexport function match<P extends ParamData>(\n path: Path | Path[],\n options: MatchOptions & ParseOptions = {},\n): MatchFunction<P> {\n const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } =\n options;\n const { regexp, keys } = pathToRegexp(path, options);\n\n const decoders = keys.map((key) => {\n if (decode === false) return NOOP_VALUE;\n if (key.type === \"param\") return decode;\n return (value: string) => value.split(delimiter).map(decode);\n });\n\n return function match(input: string) {\n const m = regexp.exec(input);\n if (!m) return false;\n\n const path = m[0];\n const params = Object.create(null);\n\n for (let i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue;\n\n const key = keys[i - 1];\n const decoder = decoders[i - 1];\n params[key.name] = decoder(m[i]);\n }\n\n return { path, params };\n };\n}\n\nexport function pathToRegexp(\n path: Path | Path[],\n options: PathToRegexpOptions & ParseOptions = {},\n) {\n const {\n delimiter = DEFAULT_DELIMITER,\n end = true,\n sensitive = false,\n trailing = true,\n } = options;\n const keys: Keys = [];\n const flags = sensitive ? \"\" : \"i\";\n const sources: string[] = [];\n\n for (const input of pathsToArray(path, [])) {\n const data = typeof input === \"object\" ? input : parse(input, options);\n for (const tokens of flatten(data.tokens, 0, [])) {\n sources.push(toRegExpSource(tokens, delimiter, keys, data.originalPath));\n }\n }\n\n let pattern = `^(?:${sources.join(\"|\")})`;\n if (trailing) pattern += `(?:${escape(delimiter)}$)?`;\n pattern += end ? \"$\" : `(?=${escape(delimiter)}|$)`;\n\n const regexp = new RegExp(pattern, flags);\n return { regexp, keys };\n}\n\n/**\n * Convert a path or array of paths into a flat array.\n */\nfunction pathsToArray(paths: Path | Path[], init: Path[]): Path[] {\n if (Array.isArray(paths)) {\n for (const p of paths) pathsToArray(p, init);\n } else {\n init.push(paths);\n }\n return init;\n}\n\n/**\n * Flattened token set.\n */\ntype FlatToken = Text | Parameter | Wildcard;\n\n/**\n * Generate a flat list of sequence tokens from the given tokens.\n */\nfunction* flatten(\n tokens: Token[],\n index: number,\n init: FlatToken[],\n): Generator<FlatToken[]> {\n if (index === tokens.length) {\n return yield init;\n }\n\n const token = tokens[index];\n\n if (token.type === \"group\") {\n for (const seq of flatten(token.tokens, 0, init.slice())) {\n yield* flatten(tokens, index + 1, seq);\n }\n } else {\n init.push(token);\n }\n\n yield* flatten(tokens, index + 1, init);\n}\n\n/**\n * Transform a flat sequence of tokens into a regular expression.\n */\nfunction toRegExpSource(\n tokens: FlatToken[],\n delimiter: string,\n keys: Keys,\n originalPath: string | undefined,\n): string {\n let result = \"\";\n let backtrack = \"\";\n let isSafeSegmentParam = true;\n\n for (const token of tokens) {\n if (token.type === \"text\") {\n result += escape(token.value);\n backtrack += token.value;\n isSafeSegmentParam ||= token.value.includes(delimiter);\n continue;\n }\n\n if (token.type === \"param\" || token.type === \"wildcard\") {\n if (!isSafeSegmentParam && !backtrack) {\n throw new PathError(\n `Missing text before \"${token.name}\" ${token.type}`,\n originalPath,\n );\n }\n\n if (token.type === \"param\") {\n result += `(${negate(delimiter, isSafeSegmentParam ? \"\" : backtrack)}+)`;\n } else {\n result += `([\\\\s\\\\S]+)`;\n }\n\n keys.push(token);\n backtrack = \"\";\n isSafeSegmentParam = false;\n continue;\n }\n }\n\n return result;\n}\n\n/**\n * Block backtracking on previous text and ignore delimiter string.\n */\nfunction negate(delimiter: string, backtrack: string): string {\n if (backtrack.length < 2) {\n if (delimiter.length < 2) return `[^${escape(delimiter + backtrack)}]`;\n return `(?:(?!${escape(delimiter)})[^${escape(backtrack)}])`;\n }\n if (delimiter.length < 2) {\n return `(?:(?!${escape(backtrack)})[^${escape(delimiter)}])`;\n }\n return `(?:(?!${escape(backtrack)}|${escape(delimiter)})[\\\\s\\\\S])`;\n}\n\n/**\n * Stringify an array of tokens into a path string.\n */\nfunction stringifyTokens(tokens: Token[]): string {\n let value = \"\";\n let i = 0;\n\n function name(value: string) {\n const isSafe = isNameSafe(value) && isNextNameSafe(tokens[i]);\n return isSafe ? value : JSON.stringify(value);\n }\n\n while (i < tokens.length) {\n const token = tokens[i++];\n\n if (token.type === \"text\") {\n value += escapeText(token.value);\n continue;\n }\n\n if (token.type === \"group\") {\n value += `{${stringifyTokens(token.tokens)}}`;\n continue;\n }\n\n if (token.type === \"param\") {\n value += `:${name(token.name)}`;\n continue;\n }\n\n if (token.type === \"wildcard\") {\n value += `*${name(token.name)}`;\n continue;\n }\n\n throw new TypeError(`Unknown token type: ${(token as any).type}`);\n }\n\n return value;\n}\n\n/**\n * Stringify token data into a path string.\n */\nexport function stringify(data: TokenData): string {\n return stringifyTokens(data.tokens);\n}\n\n/**\n * Validate the parameter name contains valid ID characters.\n */\nfunction isNameSafe(name: string): boolean {\n const [first, ...rest] = name;\n return ID_START.test(first) && rest.every((char) => ID_CONTINUE.test(char));\n}\n\n/**\n * Validate the next token does not interfere with the current param name.\n */\nfunction isNextNameSafe(token: Token | undefined): boolean {\n if (token && token.type === \"text\") return !ID_CONTINUE.test(token.value[0]);\n return true;\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.WEB_ELEMENTS_VERSION = exports.USER_AGENT_HEADER = exports.USER_AGENT_CLIENT = exports.MERGE_CONTENT_TYPE = exports.DEFAULT_ELEMENTS_BASE_URL = exports.DEFAULT_BASE_URL = exports.DD_TOKEN = exports.DD_GIT_SHA = exports.CONTENT_TYPE_HEADER = exports.CLIENT_USER_AGENT_HEADER = exports.CLIENT_BASE_PATHS = exports.CF_RAY_HEADER = exports.BT_TRACE_ID_HEADER = exports.BT_IDEMPOTENCY_KEY_HEADER = exports.BT_EXPOSE_PROXY_RESPONSE_HEADER = exports.BROWSER_LIST = exports.API_KEY_HEADER = void 0;\nconst WEB_ELEMENTS_VERSION = '1.7.2';\nexports.WEB_ELEMENTS_VERSION = WEB_ELEMENTS_VERSION;\nconst API_KEY_HEADER = 'BT-API-KEY';\nexports.API_KEY_HEADER = API_KEY_HEADER;\nconst BT_TRACE_ID_HEADER = 'bt-trace-id';\nexports.BT_TRACE_ID_HEADER = BT_TRACE_ID_HEADER;\nconst CF_RAY_HEADER = 'cf-ray';\nexports.CF_RAY_HEADER = CF_RAY_HEADER;\nconst BT_IDEMPOTENCY_KEY_HEADER = 'bt-idempotency-key';\nexports.BT_IDEMPOTENCY_KEY_HEADER = BT_IDEMPOTENCY_KEY_HEADER;\nconst BT_EXPOSE_PROXY_RESPONSE_HEADER = 'BT-EXPOSE-RAW-PROXY-RESPONSE';\nexports.BT_EXPOSE_PROXY_RESPONSE_HEADER = BT_EXPOSE_PROXY_RESPONSE_HEADER;\nconst CONTENT_TYPE_HEADER = 'Content-Type';\nexports.CONTENT_TYPE_HEADER = CONTENT_TYPE_HEADER;\nconst MERGE_CONTENT_TYPE = 'application/merge-patch+json';\nexports.MERGE_CONTENT_TYPE = MERGE_CONTENT_TYPE;\nconst USER_AGENT_HEADER = 'User-Agent';\nexports.USER_AGENT_HEADER = USER_AGENT_HEADER;\nconst CLIENT_USER_AGENT_HEADER = 'BT-CLIENT-USER-AGENT';\nexports.CLIENT_USER_AGENT_HEADER = CLIENT_USER_AGENT_HEADER;\nconst USER_AGENT_CLIENT = 'BasisTheoryJS';\nexports.USER_AGENT_CLIENT = USER_AGENT_CLIENT;\nconst DEFAULT_BASE_URL = `https://${\"api.basistheory.com\"}`;\nexports.DEFAULT_BASE_URL = DEFAULT_BASE_URL;\nconst DEFAULT_ELEMENTS_BASE_URL = `https://${\"js.basistheory.com/hosted-elements\"}`;\nexports.DEFAULT_ELEMENTS_BASE_URL = DEFAULT_ELEMENTS_BASE_URL;\nconst DD_TOKEN = \"pub5f53501515584007899577554c4aeda6\";\nexports.DD_TOKEN = DD_TOKEN;\nconst DD_GIT_SHA = \"b862d8e634020f77c61023ffeee4f0e01c36e871\";\nexports.DD_GIT_SHA = DD_GIT_SHA;\nconst CLIENT_BASE_PATHS = {\n tokens: 'tokens',\n tokenize: 'tokenize',\n applications: 'applications',\n applicationKeys: 'applications',\n applicationTemplates: 'application-templates',\n tenants: 'tenants/self',\n logs: 'logs',\n reactorFormulas: 'reactor-formulas',\n reactors: 'reactors',\n permissions: 'permissions',\n proxies: 'proxies',\n proxy: 'proxy',\n sessions: 'sessions',\n threeds: '3ds',\n tokenIntents: 'token-intents'\n};\nexports.CLIENT_BASE_PATHS = CLIENT_BASE_PATHS;\nconst BROWSER_LIST = [{\n browserName: 'Firefox',\n browserUA: 'Firefox'\n}, {\n browserName: 'SamsungBrowser',\n browserUA: 'SamsungBrowser'\n}, {\n browserName: 'Opera',\n browserUA: 'Opera'\n}, {\n browserName: 'Opera',\n browserUA: 'OPR'\n}, {\n browserName: 'Microsoft Internet Explorer',\n browserUA: 'Trident'\n}, {\n browserName: 'Microsoft Edge (Legacy)',\n browserUA: 'Edge'\n}, {\n browserName: 'Microsoft Edge (Chromium)',\n browserUA: 'Edg'\n}, {\n browserName: 'Google Chrome/Chromium',\n browserUA: 'Chrome'\n}, {\n browserName: 'Safari',\n browserUA: 'Safari'\n}];\nexports.BROWSER_LIST = BROWSER_LIST;", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n", "import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n", "import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n", "\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n", "export const VERSION = \"1.13.2\";", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n", "'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "'use strict';\n\nconst isObject = value => typeof value === 'object' && value !== null;\nconst mapObjectSkip = Symbol('skip');\n\n// Customized for this use-case\nconst isObjectCustom = value =>\n\tisObject(value) &&\n\t!(value instanceof RegExp) &&\n\t!(value instanceof Error) &&\n\t!(value instanceof Date);\n\nconst mapObject = (object, mapper, options, isSeen = new WeakMap()) => {\n\toptions = {\n\t\tdeep: false,\n\t\ttarget: {},\n\t\t...options\n\t};\n\n\tif (isSeen.has(object)) {\n\t\treturn isSeen.get(object);\n\t}\n\n\tisSeen.set(object, options.target);\n\n\tconst {target} = options;\n\tdelete options.target;\n\n\tconst mapArray = array => array.map(element => isObjectCustom(element) ? mapObject(element, mapper, options, isSeen) : element);\n\tif (Array.isArray(object)) {\n\t\treturn mapArray(object);\n\t}\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tconst mapResult = mapper(key, value, object);\n\n\t\tif (mapResult === mapObjectSkip) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [newKey, newValue, {shouldRecurse = true} = {}] = mapResult;\n\n\t\t// Drop `__proto__` keys.\n\t\tif (newKey === '__proto__') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (options.deep && shouldRecurse && isObjectCustom(newValue)) {\n\t\t\tnewValue = Array.isArray(newValue) ?\n\t\t\t\tmapArray(newValue) :\n\t\t\t\tmapObject(newValue, mapper, options, isSeen);\n\t\t}\n\n\t\ttarget[newKey] = newValue;\n\t}\n\n\treturn target;\n};\n\nmodule.exports = (object, mapper, options) => {\n\tif (!isObject(object)) {\n\t\tthrow new TypeError(`Expected an object, got \\`${object}\\` (${typeof object})`);\n\t}\n\n\treturn mapObject(object, mapper, options);\n};\n\nmodule.exports.mapObjectSkip = mapObjectSkip;\n", "'use strict';\n\nconst preserveCamelCase = string => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = Object.assign({\n\t\tpascalCase: false\n\t}, options);\n\n\tconst postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n\t}\n\n\tconst hasUpperCase = input !== input.toLowerCase();\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input);\n\t}\n\n\tinput = input\n\t\t.replace(/^[_.\\- ]+/, '')\n\t\t.toLowerCase()\n\t\t.replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n\t\t.replace(/\\d+(\\w|$)/g, m => m.toUpperCase());\n\n\treturn postProcess(input);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n", "'use strict';\n\nclass QuickLRU {\n\tconstructor(options = {}) {\n\t\tif (!(options.maxSize && options.maxSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tthis.maxSize = options.maxSize;\n\t\tthis.cache = new Map();\n\t\tthis.oldCache = new Map();\n\t\tthis._size = 0;\n\t}\n\n\t_set(key, value) {\n\t\tthis.cache.set(key, value);\n\t\tthis._size++;\n\n\t\tif (this._size >= this.maxSize) {\n\t\t\tthis._size = 0;\n\t\t\tthis.oldCache = this.cache;\n\t\t\tthis.cache = new Map();\n\t\t}\n\t}\n\n\tget(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this.cache.get(key);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\tconst value = this.oldCache.get(key);\n\t\t\tthis.oldCache.delete(key);\n\t\t\tthis._set(key, value);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tset(key, value) {\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.set(key, value);\n\t\t} else {\n\t\t\tthis._set(key, value);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\thas(key) {\n\t\treturn this.cache.has(key) || this.oldCache.has(key);\n\t}\n\n\tpeek(key) {\n\t\tif (this.cache.has(key)) {\n\t\t\treturn this.cache.get(key);\n\t\t}\n\n\t\tif (this.oldCache.has(key)) {\n\t\t\treturn this.oldCache.get(key);\n\t\t}\n\t}\n\n\tdelete(key) {\n\t\tconst deleted = this.cache.delete(key);\n\t\tif (deleted) {\n\t\t\tthis._size--;\n\t\t}\n\n\t\treturn this.oldCache.delete(key) || deleted;\n\t}\n\n\tclear() {\n\t\tthis.cache.clear();\n\t\tthis.oldCache.clear();\n\t\tthis._size = 0;\n\t}\n\n\t* keys() {\n\t\tfor (const [key] of this) {\n\t\t\tyield key;\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const [, value] of this) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const item of this.cache) {\n\t\t\tyield item;\n\t\t}\n\n\t\tfor (const item of this.oldCache) {\n\t\t\tconst [key] = item;\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\tget size() {\n\t\tlet oldCacheSize = 0;\n\t\tfor (const key of this.oldCache.keys()) {\n\t\t\tif (!this.cache.has(key)) {\n\t\t\t\toldCacheSize++;\n\t\t\t}\n\t\t}\n\n\t\treturn this._size + oldCacheSize;\n\t}\n}\n\nmodule.exports = QuickLRU;\n", "'use strict';\nconst mapObj = require('map-obj');\nconst camelCase = require('camelcase');\nconst QuickLru = require('quick-lru');\n\nconst has = (array, key) => array.some(x => {\n\tif (typeof x === 'string') {\n\t\treturn x === key;\n\t}\n\n\tx.lastIndex = 0;\n\treturn x.test(key);\n});\n\nconst cache = new QuickLru({maxSize: 100000});\n\n// Reproduces behavior from `map-obj`\nconst isObject = value =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\t!(value instanceof RegExp) &&\n\t!(value instanceof Error) &&\n\t!(value instanceof Date);\n\nconst camelCaseConvert = (input, options) => {\n\tif (!isObject(input)) {\n\t\treturn input;\n\t}\n\n\toptions = {\n\t\tdeep: false,\n\t\tpascalCase: false,\n\t\t...options\n\t};\n\n\tconst {exclude, pascalCase, stopPaths, deep} = options;\n\n\tconst stopPathsSet = new Set(stopPaths);\n\n\tconst makeMapper = parentPath => (key, value) => {\n\t\tif (deep && isObject(value)) {\n\t\t\tconst path = parentPath === undefined ? key : `${parentPath}.${key}`;\n\n\t\t\tif (!stopPathsSet.has(path)) {\n\t\t\t\tvalue = mapObj(value, makeMapper(path));\n\t\t\t}\n\t\t}\n\n\t\tif (!(exclude && has(exclude, key))) {\n\t\t\tconst cacheKey = pascalCase ? `${key}_` : key;\n\n\t\t\tif (cache.has(cacheKey)) {\n\t\t\t\tkey = cache.get(cacheKey);\n\t\t\t} else {\n\t\t\t\tconst ret = camelCase(key, {pascalCase});\n\n\t\t\t\tif (key.length < 100) { // Prevent abuse\n\t\t\t\t\tcache.set(cacheKey, ret);\n\t\t\t\t}\n\n\t\t\t\tkey = ret;\n\t\t\t}\n\t\t}\n\n\t\treturn [key, value];\n\t};\n\n\treturn mapObj(input, makeMapper(undefined));\n};\n\nmodule.exports = (input, options) => {\n\tif (Array.isArray(input)) {\n\t\treturn Object.keys(input).map(key => camelCaseConvert(input[key], options));\n\t}\n\n\treturn camelCaseConvert(input, options);\n};\n", "module.exports = require('os')\n", "/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n", "/**\n * Locale character mapping rules.\n */\ninterface Locale {\n regexp: RegExp;\n map: Record<string, string>;\n}\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\nconst SUPPORTED_LOCALE: Record<string, Locale> = {\n tr: {\n regexp: /\\u0130|\\u0049|\\u0049\\u0307/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n az: {\n regexp: /\\u0130/g,\n map: {\n İ: \"\\u0069\",\n I: \"\\u0131\",\n İ: \"\\u0069\",\n },\n },\n lt: {\n regexp: /\\u0049|\\u004A|\\u012E|\\u00CC|\\u00CD|\\u0128/g,\n map: {\n I: \"\\u0069\\u0307\",\n J: \"\\u006A\\u0307\",\n Į: \"\\u012F\\u0307\",\n Ì: \"\\u0069\\u0307\\u0300\",\n Í: \"\\u0069\\u0307\\u0301\",\n Ĩ: \"\\u0069\\u0307\\u0303\",\n },\n },\n};\n\n/**\n * Localized lower case.\n */\nexport function localeLowerCase(str: string, locale: string) {\n const lang = SUPPORTED_LOCALE[locale.toLowerCase()];\n if (lang) return lowerCase(str.replace(lang.regexp, (m) => lang.map[m]));\n return lowerCase(str);\n}\n\n/**\n * Lower case as a function.\n */\nexport function lowerCase(str: string) {\n return str.toLowerCase();\n}\n", "import { lowerCase } from \"lower-case\";\n\nexport interface Options {\n splitRegexp?: RegExp | RegExp[];\n stripRegexp?: RegExp | RegExp[];\n delimiter?: string;\n transform?: (part: string, index: number, parts: string[]) => string;\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nconst DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n\n// Remove all non-word characters.\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nexport function noCase(input: string, options: Options = {}) {\n const {\n splitRegexp = DEFAULT_SPLIT_REGEXP,\n stripRegexp = DEFAULT_STRIP_REGEXP,\n transform = lowerCase,\n delimiter = \" \",\n } = options;\n\n let result = replace(\n replace(input, splitRegexp, \"$1\\0$2\"),\n stripRegexp,\n \"\\0\"\n );\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input: string, re: RegExp | RegExp[], value: string) {\n if (re instanceof RegExp) return input.replace(re, value);\n return re.reduce((input, re) => input.replace(re, value), input);\n}\n", "import { noCase, Options } from \"no-case\";\n\nexport { Options };\n\nexport function dotCase(input: string, options: Options = {}) {\n return noCase(input, {\n delimiter: \".\",\n ...options,\n });\n}\n", "import { dotCase, Options } from \"dot-case\";\n\nexport { Options };\n\nexport function snakeCase(input: string, options: Options = {}) {\n return dotCase(input, {\n delimiter: \"_\",\n ...options,\n });\n}\n", "\n/**\n * Export.\n */\n\nmodule.exports = toNoCase\n\n/**\n * Test whether a string is camel-case.\n */\n\nvar hasSpace = /\\s/\nvar hasSeparator = /(_|-|\\.|:)/\nvar hasCamel = /([a-z][A-Z]|[A-Z][a-z])/\n\n/**\n * Remove any starting case from a `string`, like camel or snake, but keep\n * spaces and punctuation that may be important otherwise.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toNoCase(string) {\n if (hasSpace.test(string)) return string.toLowerCase()\n if (hasSeparator.test(string)) return (unseparate(string) || string).toLowerCase()\n if (hasCamel.test(string)) return uncamelize(string).toLowerCase()\n return string.toLowerCase()\n}\n\n/**\n * Separator splitter.\n */\n\nvar separatorSplitter = /[\\W_]+(.|$)/g\n\n/**\n * Un-separate a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction unseparate(string) {\n return string.replace(separatorSplitter, function (m, next) {\n return next ? ' ' + next : ''\n })\n}\n\n/**\n * Camelcase splitter.\n */\n\nvar camelSplitter = /(.)([A-Z]+)/g\n\n/**\n * Un-camelcase a `string`.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction uncamelize(string) {\n return string.replace(camelSplitter, function (m, previous, uppers) {\n return previous + ' ' + uppers.toLowerCase().split('').join(' ')\n })\n}\n", "\nvar clean = require('to-no-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSpaceCase\n\n/**\n * Convert a `string` to space case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSpaceCase(string) {\n return clean(string).replace(/[\\W_]+(.|$)/g, function (matches, match) {\n return match ? ' ' + match : ''\n }).trim()\n}\n", "\nvar toSpace = require('to-space-case')\n\n/**\n * Export.\n */\n\nmodule.exports = toSnakeCase\n\n/**\n * Convert a `string` to snake case.\n *\n * @param {String} string\n * @return {String}\n */\n\nfunction toSnakeCase(string) {\n return toSpace(string).replace(/\\s/g, '_')\n}\n", "'use strict'\n\nconst map = require('map-obj')\nconst snakeCase = require('to-snake-case')\n\nmodule.exports = function (obj, options) {\n options = Object.assign({ deep: true, exclude: [] }, options)\n\n return map(obj, function (key, val) {\n return [\n matches(options.exclude, key) ? key : snakeCase(key),\n val\n ]\n }, options)\n}\n\nfunction matches (patterns, value) {\n return patterns.some(function (pattern) {\n return typeof pattern === 'string'\n ? pattern === value\n : pattern.test(value)\n })\n}\n", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryApiError = void 0;\n\nfunction _extendableBuiltin(cls) {\n function ExtendableBuiltin() {\n var instance = Reflect.construct(cls, Array.from(arguments));\n Object.setPrototypeOf(instance, Object.getPrototypeOf(this));\n return instance;\n }\n\n ExtendableBuiltin.prototype = Object.create(cls.prototype, {\n constructor: {\n value: cls,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(ExtendableBuiltin, cls);\n } else {\n ExtendableBuiltin.__proto__ = cls;\n }\n\n return ExtendableBuiltin;\n}\n\nclass BasisTheoryApiError extends _extendableBuiltin(Error) {\n constructor(message, status, data, _debug) {\n super(message);\n this.status = status;\n this.data = data;\n this._debug = _debug;\n this.name = 'BasisTheoryApiError';\n Object.setPrototypeOf(this, BasisTheoryApiError.prototype);\n }\n\n}\n\nexports.BasisTheoryApiError = BasisTheoryApiError;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.logger = void 0;\n\nvar _constants = require(\"./constants\");\n\nconst logger = (() => {\n const ddTok = 'pubb96b84a13912504f4354f2d794ea4fab';\n let isTelemetryEnabled = undefined !== 'test';\n\n const log = async (message, level, attributes = {}) => {\n if (!isTelemetryEnabled) {\n return;\n }\n\n try {\n var _document, _window, _window$location, _window2, _window2$location, _navigator;\n\n let env;\n\n if (_constants.DEFAULT_BASE_URL.includes('localhost')) {\n env = 'local';\n } else if (_constants.DEFAULT_BASE_URL.includes('dev')) {\n env = 'dev';\n } else {\n env = 'prod';\n }\n\n const payload = {\n // dd info\n level,\n message,\n // for basis theory tracking\n service: 'js-sdk',\n env,\n // browser information\n referrer: (_document = document) === null || _document === void 0 ? void 0 : _document.referrer,\n origin: (_window = window) === null || _window === void 0 ? void 0 : (_window$location = _window.location) === null || _window$location === void 0 ? void 0 : _window$location.origin,\n url: (_window2 = window) === null || _window2 === void 0 ? void 0 : (_window2$location = _window2.location) === null || _window2$location === void 0 ? void 0 : _window2$location.href,\n userAgent: (_navigator = navigator) === null || _navigator === void 0 ? void 0 : _navigator.userAgent,\n // custom values\n ...attributes\n };\n await fetch(`https://http-intake.logs.datadoghq.com/v1/input/${ddTok}`, {\n method: 'POST',\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n } catch {\n // eslint-disable-next-line no-console\n console.warn('There was an error sending telemetry.');\n }\n };\n\n const setTelemetryEnabled = enabled => {\n isTelemetryEnabled = enabled;\n };\n\n return {\n setTelemetryEnabled,\n log: {\n error: (message, attributes = {}) => log(message, 'error', attributes),\n info: (message, attributes = {}) => log(message, 'info', attributes),\n warn: (message, attributes = {}) => log(message, 'warn', attributes)\n }\n };\n})();\n\nexports.logger = logger;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.transformTokenResponseCamelCase = exports.transformTokenRequestSnakeCase = exports.transformResponseCamelCase = exports.transformRequestSnakeCase = exports.transformReactorResponseCamelCase = exports.transformReactorRequestSnakeCase = exports.transformProxyResponseCamelCase = exports.transformProxyRequestSnakeCase = exports.proxyRaw = exports.getRuntime = exports.getQueryParams = exports.getOSVersion = exports.getBrowser = exports.errorInterceptorDebug = exports.errorInterceptor = exports.debugTransform = exports.dataExtractor = exports.dataAndHeadersExtractor = exports.createRequestConfig = exports.concatResponseTransformerWithDefault = exports.concatRequestTransformerWithDefault = exports.buildUserAgentString = exports.buildClientUserAgentString = exports.assertInit = void 0;\n\nvar _axios = _interopRequireDefault(require(\"axios\"));\n\nvar _camelcaseKeys = _interopRequireDefault(require(\"camelcase-keys\"));\n\nvar _os = _interopRequireDefault(require(\"os\"));\n\nvar _snakeCase = require(\"snake-case\");\n\nvar _snakecaseKeys = _interopRequireDefault(require(\"snakecase-keys\"));\n\nvar _BasisTheoryApiError = require(\"./BasisTheoryApiError\");\n\nvar _constants = require(\"./constants\");\n\nvar _logging = require(\"./logging\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst assertInit = prop => {\n if (prop === null || prop === undefined) {\n throw new Error('BasisTheory has not yet been properly initialized.');\n }\n\n return prop;\n};\n\nexports.assertInit = assertInit;\n\nconst transformRequestSnakeCase = data => {\n if (typeof data === 'undefined') {\n return undefined;\n }\n\n return (0, _snakecaseKeys.default)(data, {\n deep: true\n });\n};\n\nexports.transformRequestSnakeCase = transformRequestSnakeCase;\n\nconst proxyRaw = data => data;\n\nexports.proxyRaw = proxyRaw;\n\nconst transformReactorRequestSnakeCase = reactor => {\n if (typeof reactor === 'undefined') {\n return undefined;\n }\n\n return { ...(0, _snakecaseKeys.default)(reactor, {\n deep: true\n }),\n ...(reactor.configuration !== undefined ? {\n configuration: reactor.configuration\n } : {})\n };\n};\n\nexports.transformReactorRequestSnakeCase = transformReactorRequestSnakeCase;\n\nconst transformProxyRequestSnakeCase = proxy => {\n if (typeof proxy === 'undefined') {\n return undefined;\n }\n\n return { ...(0, _snakecaseKeys.default)(proxy, {\n deep: true\n }),\n ...(proxy.configuration !== undefined ? {\n configuration: proxy.configuration\n } : {})\n };\n};\n\nexports.transformProxyRequestSnakeCase = transformProxyRequestSnakeCase;\n\nconst transformTokenRequestSnakeCase = payload => {\n if (typeof payload === 'undefined') {\n return undefined;\n }\n\n return { ...(0, _snakecaseKeys.default)(payload, {\n deep: true\n }),\n ...(payload.data !== undefined ? {\n data: payload.data\n } : {}),\n ...(payload.metadata !== undefined ? {\n metadata: payload.metadata\n } : {})\n };\n};\n\nexports.transformTokenRequestSnakeCase = transformTokenRequestSnakeCase;\n\nconst isList = arg => arg && (arg === null || arg === void 0 ? void 0 : arg.pagination) !== undefined && (arg === null || arg === void 0 ? void 0 : arg.data) !== undefined;\n\nconst transformTokenResponseCamelCase = tokenResponse => {\n if (typeof tokenResponse === 'undefined') {\n return undefined;\n }\n\n if (isList(tokenResponse)) {\n const transformedData = tokenResponse.data.map(t => ({ ...(0, _camelcaseKeys.default)(t, {\n deep: true\n }),\n ...(t.data !== undefined ? {\n data: t.data\n } : {}),\n ...(t.metadata !== undefined ? {\n metadata: t.metadata\n } : {})\n }));\n const transformedToken = {\n data: transformedData,\n pagination: (0, _camelcaseKeys.default)(tokenResponse.pagination, {\n deep: true\n })\n };\n return transformedToken;\n }\n\n return { ...(0, _camelcaseKeys.default)(tokenResponse, {\n deep: true\n }),\n ...(tokenResponse.data !== undefined ? {\n data: tokenResponse.data\n } : {}),\n ...(tokenResponse.metadata !== undefined ? {\n metadata: tokenResponse.metadata\n } : {})\n };\n};\n\nexports.transformTokenResponseCamelCase = transformTokenResponseCamelCase;\n\nconst transformReactorResponseCamelCase = reactorResponse => {\n if (typeof reactorResponse === 'undefined') {\n return undefined;\n }\n\n if (isList(reactorResponse)) {\n const transformedData = reactorResponse.data.map(r => ({ ...(0, _camelcaseKeys.default)(r, {\n deep: true\n }),\n ...(r.configuration !== undefined ? {\n configuration: r.configuration\n } : {})\n }));\n const transformedReactor = {\n data: transformedData,\n pagination: (0, _camelcaseKeys.default)(reactorResponse.pagination, {\n deep: true\n })\n };\n return transformedReactor;\n }\n\n return { ...(0, _camelcaseKeys.default)(reactorResponse, {\n deep: true\n }),\n ...(reactorResponse.configuration !== undefined ? {\n configuration: reactorResponse.configuration\n } : {})\n };\n};\n\nexports.transformReactorResponseCamelCase = transformReactorResponseCamelCase;\n\nconst transformProxyResponseCamelCase = proxyResponse => {\n if (typeof proxyResponse === 'undefined') {\n return undefined;\n }\n\n if (isList(proxyResponse)) {\n const transformedData = proxyResponse.data.map(p => ({ ...(0, _camelcaseKeys.default)(p, {\n deep: true\n }),\n ...(p.configuration !== undefined ? {\n configuration: p.configuration\n } : {})\n }));\n const transformedReactor = {\n data: transformedData,\n pagination: (0, _camelcaseKeys.default)(proxyResponse.pagination, {\n deep: true\n })\n };\n return transformedReactor;\n }\n\n return { ...(0, _camelcaseKeys.default)(proxyResponse, {\n deep: true\n }),\n ...(proxyResponse.configuration !== undefined ? {\n configuration: proxyResponse.configuration\n } : {})\n };\n};\n\nexports.transformProxyResponseCamelCase = transformProxyResponseCamelCase;\n\nconst transformResponseCamelCase = data => {\n if (typeof data === 'undefined') {\n return undefined;\n }\n\n return (0, _camelcaseKeys.default)(data, {\n deep: true\n });\n};\n\nexports.transformResponseCamelCase = transformResponseCamelCase;\n\nconst dataExtractor = res => res === null || res === void 0 ? void 0 : res.data;\n\nexports.dataExtractor = dataExtractor;\n\nconst dataAndHeadersExtractor = res => ({\n data: res === null || res === void 0 ? void 0 : res.data,\n headers: res === null || res === void 0 ? void 0 : res.headers\n});\n\nexports.dataAndHeadersExtractor = dataAndHeadersExtractor;\n\nconst concatRequestTransformerWithDefault = requestTransformer => [...[], ...[requestTransformer], ..._axios.default.defaults.transformRequest];\n\nexports.concatRequestTransformerWithDefault = concatRequestTransformerWithDefault;\n\nconst concatResponseTransformerWithDefault = responseTransformer => [..._axios.default.defaults.transformResponse, ...[responseTransformer]];\n\nexports.concatResponseTransformerWithDefault = concatResponseTransformerWithDefault;\n\nconst createRequestConfig = (options, transformers) => {\n if (!options) {\n if (!transformers) {\n return undefined;\n }\n\n return { ...(transformers.transformRequest !== undefined ? {\n transformRequest: concatRequestTransformerWithDefault(transformers.transformRequest)\n } : {}),\n ...(transformers.transformResponse !== undefined ? {\n transformResponse: concatResponseTransformerWithDefault(transformers.transformResponse)\n } : {})\n };\n }\n\n const {\n apiKey,\n correlationId,\n idempotencyKey,\n query,\n headers\n } = options;\n const apiKeyHeader = apiKey ? {\n [_constants.API_KEY_HEADER]: apiKey\n } : {};\n const correlationIdHeader = correlationId ? {\n [_constants.BT_TRACE_ID_HEADER]: correlationId\n } : {};\n const idempotencyKeyHeader = idempotencyKey ? {\n [_constants.BT_IDEMPOTENCY_KEY_HEADER]: idempotencyKey\n } : {};\n return {\n headers: { ...apiKeyHeader,\n ...correlationIdHeader,\n ...idempotencyKeyHeader,\n ...(typeof headers !== 'undefined' && { ...headers\n })\n },\n ...(typeof query !== 'undefined' && {\n params: query\n }),\n ...((transformers === null || transformers === void 0 ? void 0 : transformers.transformRequest) !== undefined ? {\n transformRequest: concatRequestTransformerWithDefault(transformers.transformRequest)\n } : {}),\n ...((transformers === null || transformers === void 0 ? void 0 : transformers.transformResponse) !== undefined ? {\n transformResponse: concatResponseTransformerWithDefault(transformers.transformResponse)\n } : {})\n };\n};\n\nexports.createRequestConfig = createRequestConfig;\n\nconst handleAxiosError = (error, debug) => {\n var _error$response$statu, _error$response, _error$response2, _error$config, _error$config$method, _error$config2, _error$config3, _error$config4, _error$config4$method, _error$config5, _error$config5$header, _error$response5, _error$response6, _error$response7, _error$response8;\n\n const status = (_error$response$statu = error === null || error === void 0 ? void 0 : (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) !== null && _error$response$statu !== void 0 ? _error$response$statu : -1;\n const data = error === null || error === void 0 ? void 0 : (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data;\n\n let _debug;\n\n if (debug) {\n var _error$response3, _error$response3$head, _error$response4, _error$response4$head;\n\n _debug = {\n cfRay: error === null || error === void 0 ? void 0 : (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : (_error$response3$head = _error$response3.headers) === null || _error$response3$head === void 0 ? void 0 : _error$response3$head[_constants.CF_RAY_HEADER],\n btTraceId: error === null || error === void 0 ? void 0 : (_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : (_error$response4$head = _error$response4.headers) === null || _error$response4$head === void 0 ? void 0 : _error$response4$head[_constants.BT_TRACE_ID_HEADER]\n };\n }\n\n const logSeverity = status > -1 && status < 499 ? 'warn' : 'error';\n\n _logging.logger.log[logSeverity](`Error when making ${error === null || error === void 0 ? void 0 : (_error$config = error.config) === null || _error$config === void 0 ? void 0 : (_error$config$method = _error$config.method) === null || _error$config$method === void 0 ? void 0 : _error$config$method.toUpperCase()} request to ${error === null || error === void 0 ? void 0 : (_error$config2 = error.config) === null || _error$config2 === void 0 ? void 0 : _error$config2.baseURL} from the JS SDK`, {\n apiStatus: status,\n logType: 'axiosError',\n logOrigin: 'axiosErrorInterceptor',\n requestDetails: {\n url: error === null || error === void 0 ? void 0 : (_error$config3 = error.config) === null || _error$config3 === void 0 ? void 0 : _error$config3.baseURL,\n method: error === null || error === void 0 ? void 0 : (_error$config4 = error.config) === null || _error$config4 === void 0 ? void 0 : (_error$config4$method = _error$config4.method) === null || _error$config4$method === void 0 ? void 0 : _error$config4$method.toUpperCase(),\n btUserAgent: error === null || error === void 0 ? void 0 : (_error$config5 = error.config) === null || _error$config5 === void 0 ? void 0 : (_error$config5$header = _error$config5.headers) === null || _error$config5$header === void 0 ? void 0 : _error$config5$header[_constants.CLIENT_USER_AGENT_HEADER]\n },\n errorDetails: {\n code: error === null || error === void 0 ? void 0 : error.code,\n name: error === null || error === void 0 ? void 0 : error.name,\n stack: error === null || error === void 0 ? void 0 : error.stack,\n headers: error === null || error === void 0 ? void 0 : (_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : _error$response5.headers,\n message: error === null || error === void 0 ? void 0 : error.message,\n status: error === null || error === void 0 ? void 0 : (_error$response6 = error.response) === null || _error$response6 === void 0 ? void 0 : _error$response6.status,\n statusText: error === null || error === void 0 ? void 0 : (_error$response7 = error.response) === null || _error$response7 === void 0 ? void 0 : _error$response7.statusText,\n data: error === null || error === void 0 ? void 0 : (_error$response8 = error.response) === null || _error$response8 === void 0 ? void 0 : _error$response8.data\n }\n });\n\n throw new _BasisTheoryApiError.BasisTheoryApiError(error.message, status, data, _debug);\n};\n\nconst errorInterceptor = error => handleAxiosError(error, false);\n\nexports.errorInterceptor = errorInterceptor;\n\nconst errorInterceptorDebug = error => handleAxiosError(error, true);\n\nexports.errorInterceptorDebug = errorInterceptorDebug;\n\nconst getQueryParams = (query = {}) => {\n const keys = Object.keys(query);\n\n if (keys.length) {\n const params = new URLSearchParams();\n\n const appendSafe = (key, value, isNested = false) => {\n const type = typeof value;\n const formattedKey = isNested ? key : (0, _snakeCase.snakeCase)(key);\n\n if (value === null || ['boolean', 'number', 'string'].includes(type)) {\n params.append(formattedKey, value);\n }\n };\n\n keys.forEach(key => {\n const value = query[key];\n\n if (Array.isArray(value)) {\n value.forEach(aValue => {\n appendSafe(String(key), aValue);\n });\n } else if (value && typeof value === 'object') {\n const objectKeys = Object.keys(value);\n objectKeys.forEach(objectKey => {\n appendSafe(`${String(key)}.${objectKey}`, value[objectKey], true);\n });\n } else {\n appendSafe(String(key), value);\n }\n });\n return `?${params.toString()}`;\n }\n\n return '';\n};\n\nexports.getQueryParams = getQueryParams;\n\nconst appInfoToUserAgentString = appInfo => `(${appInfo.name || ''}; ${appInfo.version || ''}; ${appInfo.url || ''})`;\n\nconst buildUserAgentString = appInfo => {\n let userAgent = `${_constants.USER_AGENT_CLIENT}/${undefined || 'unknown'}`;\n\n if (appInfo && Object.keys(appInfo || {}).length) {\n userAgent += ` ${appInfoToUserAgentString(appInfo)}`;\n }\n\n return userAgent;\n};\n\nexports.buildUserAgentString = buildUserAgentString;\n\nconst getBrowser = () => {\n const {\n userAgent\n } = window.navigator;\n let version = 'unknown';\n\n const browser = _constants.BROWSER_LIST.find(b => userAgent.includes(b.browserUA));\n\n if (browser) {\n try {\n version = userAgent.split(`${browser.browserUA}/`)[1];\n } catch {\n version = 'unknown';\n }\n }\n\n return `${(browser === null || browser === void 0 ? void 0 : browser.browserName) || 'unknown'}/${version}`;\n}; // the following product property is deprecated but it's the only way\n// I've found to detect react-native\n\n\nexports.getBrowser = getBrowser;\n\nconst isEnvReactNative = () => typeof window === 'object' && window.navigator.product === 'ReactNative';\n\nconst getOSVersion = () => {\n // react-native\n if (isEnvReactNative()) {\n return 'ReactNative';\n } // node\n\n\n if (typeof window === 'undefined') {\n try {\n return `${_os.default.type()}/${_os.default.version()}`;\n } catch {\n return 'unknown';\n }\n } // browser\n\n\n try {\n const appVersionString = window.navigator.appVersion;\n const osMatch = appVersionString.match(/\\(([^)]+)\\)/u);\n\n if (osMatch && osMatch.length > 1) {\n return osMatch[1];\n }\n\n return 'unknown';\n } catch {\n return 'unknown';\n }\n};\n\nexports.getOSVersion = getOSVersion;\n\nconst getRuntime = () => {\n // react-native\n if (isEnvReactNative()) {\n return 'ReactNative';\n } // node\n\n\n if (typeof window === 'undefined') {\n return `NodeJS/${process.version}`;\n } // browser\n\n\n return getBrowser();\n};\n\nexports.getRuntime = getRuntime;\n\nconst buildClientUserAgentString = appInfo => {\n const clientUserAgent = {\n client: _constants.USER_AGENT_CLIENT,\n clientVersion: undefined || 'unknown',\n osVersion: getOSVersion(),\n runtimeVersion: getRuntime(),\n application: {}\n };\n\n if (appInfo) {\n clientUserAgent.application = appInfo;\n }\n\n return JSON.stringify((0, _snakecaseKeys.default)(clientUserAgent));\n};\n\nexports.buildClientUserAgentString = buildClientUserAgentString;\n\nconst debugTransform = (data, headers) => {\n if (headers && typeof data === 'object' && data !== undefined) {\n // we are deliberately mutating the data object here to include the debug headers\n // eslint-disable-next-line no-param-reassign\n data._debug = { ...data._debug,\n cfRay: headers[_constants.CF_RAY_HEADER],\n btTraceId: headers[_constants.BT_TRACE_ID_HEADER]\n };\n }\n\n return data;\n};\n\nexports.debugTransform = debugTransform;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryValidationError = void 0;\n\nfunction _extendableBuiltin(cls) {\n function ExtendableBuiltin() {\n var instance = Reflect.construct(cls, Array.from(arguments));\n Object.setPrototypeOf(instance, Object.getPrototypeOf(this));\n return instance;\n }\n\n ExtendableBuiltin.prototype = Object.create(cls.prototype, {\n constructor: {\n value: cls,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(ExtendableBuiltin, cls);\n } else {\n ExtendableBuiltin.__proto__ = cls;\n }\n\n return ExtendableBuiltin;\n}\n\nclass BasisTheoryValidationError extends _extendableBuiltin(Error) {\n constructor(message, details, validation) {\n super(message);\n this.details = details;\n this.validation = validation;\n this.name = 'BasisTheoryValidationError';\n Object.setPrototypeOf(this, BasisTheoryValidationError.prototype);\n }\n\n}\n\nexports.BasisTheoryValidationError = BasisTheoryValidationError;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HttpClientError = void 0;\n\nfunction _extendableBuiltin(cls) {\n function ExtendableBuiltin() {\n var instance = Reflect.construct(cls, Array.from(arguments));\n Object.setPrototypeOf(instance, Object.getPrototypeOf(this));\n return instance;\n }\n\n ExtendableBuiltin.prototype = Object.create(cls.prototype, {\n constructor: {\n value: cls,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(ExtendableBuiltin, cls);\n } else {\n ExtendableBuiltin.__proto__ = cls;\n }\n\n return ExtendableBuiltin;\n}\n\nclass HttpClientError extends _extendableBuiltin(Error) {\n constructor(message, status, data, headers) {\n super(message);\n this.name = 'HttpClientError';\n this.status = status;\n this.data = data;\n this.headers = headers;\n Object.setPrototypeOf(this, HttpClientError.prototype);\n }\n\n}\n\nexports.HttpClientError = HttpClientError;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar _exportNames = {\n BasisTheoryApiError: true,\n BasisTheoryValidationError: true,\n HttpClientError: true\n};\nObject.defineProperty(exports, \"BasisTheoryApiError\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryApiError.BasisTheoryApiError;\n }\n});\nObject.defineProperty(exports, \"BasisTheoryValidationError\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryValidationError.BasisTheoryValidationError;\n }\n});\nObject.defineProperty(exports, \"HttpClientError\", {\n enumerable: true,\n get: function () {\n return _HttpClientError.HttpClientError;\n }\n});\n\nvar _constants = require(\"./constants\");\n\nObject.keys(_constants).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _constants[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _constants[key];\n }\n });\n});\n\nvar _utils = require(\"./utils\");\n\nObject.keys(_utils).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _utils[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _utils[key];\n }\n });\n});\n\nvar _BasisTheoryApiError = require(\"./BasisTheoryApiError\");\n\nvar _BasisTheoryValidationError = require(\"./BasisTheoryValidationError\");\n\nvar _HttpClientError = require(\"./HttpClientError\");", "\"use strict\";", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryService = void 0;\n\nvar _axios = _interopRequireDefault(require(\"axios\"));\n\nvar _common = require(\"./../common\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nclass BasisTheoryService {\n constructor(options) {\n const {\n apiKey,\n baseURL,\n transformRequest,\n transformResponse,\n appInfo,\n debug\n } = options;\n\n if (typeof _axios.default === 'string') {\n // known issue with create react app\n // eslint-disable-next-line unicorn/prefer-type-error\n throw new Error('basis-theory-js@1.77.0+ and basis-theory-react@1.12.1+ are not supported with CRA 5, go to https://github.com/Basis-Theory/basis-theory-js/issues/365#issuecomment-1662883062 for workarounds.');\n } else {\n this.client = _axios.default.create({\n baseURL,\n headers: {\n [_common.API_KEY_HEADER]: apiKey,\n [_common.CLIENT_USER_AGENT_HEADER]: (0, _common.buildClientUserAgentString)(appInfo),\n ...(typeof window === 'undefined' && {\n [_common.USER_AGENT_HEADER]: (0, _common.buildUserAgentString)(appInfo)\n })\n },\n\n /* eslint-disable unicorn/prefer-spread */\n transformRequest: [].concat(transformRequest || _common.transformRequestSnakeCase, _axios.default.defaults.transformRequest),\n transformResponse: _axios.default.defaults.transformResponse.concat(transformResponse || _common.transformResponseCamelCase, debug ? _common.debugTransform : [])\n /* eslint-enable unicorn/prefer-spread */\n\n });\n this.client.interceptors.response.use(undefined, debug ? _common.errorInterceptorDebug : _common.errorInterceptor);\n }\n }\n\n}\n\nexports.BasisTheoryService = BasisTheoryService;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _types = require(\"./types\");\n\nObject.keys(_types).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _types[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _types[key];\n }\n });\n});\n\nvar _BasisTheoryService = require(\"./BasisTheoryService\");\n\nObject.keys(_BasisTheoryService).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _BasisTheoryService[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _BasisTheoryService[key];\n }\n });\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CrudBuilder = void 0;\n\nvar _common = require(\"./../common\");\n\n/* eslint-disable max-classes-per-file, @typescript-eslint/no-shadow */\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\nconst Create = Service => class Create extends Service {\n create(model, options) {\n return this.client.post('/', model, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n};\n\nconst Retrieve = Service => class Retrieve extends Service {\n retrieve(id, options) {\n return this.client.get(id, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n};\n\nconst Update = Service => class Update extends Service {\n update(id, model, options) {\n return this.client.put(id, model, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n};\n\nconst Patch = Service => class Patch extends Service {\n patch(id, model, options) {\n const config = (0, _common.createRequestConfig)(options);\n return this.client.patch(id, model, { ...config,\n headers: { ...((config === null || config === void 0 ? void 0 : config.headers) || {}),\n [_common.CONTENT_TYPE_HEADER]: _common.MERGE_CONTENT_TYPE\n }\n }).then(_common.dataExtractor);\n }\n\n};\n\nconst Delete = Service => class Delete extends Service {\n async delete(id, options) {\n await this.client.delete(id, (0, _common.createRequestConfig)(options));\n }\n\n};\n\nconst List = Service => class List extends Service {\n list(query = {}, options = {}) {\n const url = `/${(0, _common.getQueryParams)(query)}`;\n return this.client.get(url, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n};\n\nclass CrudBuilder {\n constructor(baseService) {\n this.BaseService = baseService;\n }\n\n create() {\n // eslint-disable-next-line new-cap\n this.BaseService = Create(this.BaseService);\n return this;\n }\n\n retrieve() {\n // eslint-disable-next-line new-cap\n this.BaseService = Retrieve(this.BaseService);\n return this;\n }\n\n update() {\n // eslint-disable-next-line new-cap\n this.BaseService = Update(this.BaseService);\n return this;\n }\n\n patch() {\n // eslint-disable-next-line new-cap\n this.BaseService = Patch(this.BaseService);\n return this;\n }\n\n delete() {\n // eslint-disable-next-line new-cap\n this.BaseService = Delete(this.BaseService);\n return this;\n }\n\n list() {\n // eslint-disable-next-line new-cap\n this.BaseService = List(this.BaseService);\n return this;\n }\n\n build() {\n return this.BaseService;\n }\n\n}\n/* eslint-enable max-classes-per-file, @typescript-eslint/no-shadow */\n\n\nexports.CrudBuilder = CrudBuilder;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryApplicationTemplates = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryApplicationTemplates = new _CrudBuilder.CrudBuilder(class BasisTheoryApplicationTemplates extends _service.BasisTheoryService {\n list(options) {\n return this.client.get('/', (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n}).retrieve().build();\nexports.BasisTheoryApplicationTemplates = BasisTheoryApplicationTemplates;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryApplicationTemplates\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryApplicationTemplates.BasisTheoryApplicationTemplates;\n }\n});\n\nvar _BasisTheoryApplicationTemplates = require(\"./BasisTheoryApplicationTemplates\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryApplicationKeys = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryApplicationKeys = new _CrudBuilder.CrudBuilder(class BasisTheoryApplicationKeys extends _service.BasisTheoryService {\n create(applicationId) {\n return this.client.post(`${applicationId}/keys`).then(_common.dataExtractor);\n }\n\n get(applicationId) {\n return this.client.get(`${applicationId}/keys`).then(_common.dataExtractor);\n }\n\n getById(applicationId, keyId) {\n return this.client.get(`${applicationId}/keys/${keyId}`).then(_common.dataExtractor);\n }\n\n delete(applicationId, keyId) {\n return this.client.delete(`${applicationId}/keys/${keyId}`).then(_common.dataExtractor);\n }\n\n}).build();\nexports.BasisTheoryApplicationKeys = BasisTheoryApplicationKeys;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryApplicationKeys\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryApplicationKeys.BasisTheoryApplicationKeys;\n }\n});\n\nvar _BasisTheoryApplicationKeys = require(\"./BasisTheoryApplicationKeys\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryApplications = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryApplications = new _CrudBuilder.CrudBuilder(class BasisTheoryApplications extends _service.BasisTheoryService {\n /**\n * @deprecated use {@link retrieveByKey} instead\n */\n getApplicationByKey() {\n return this.retrieveByKey();\n }\n\n retrieveByKey(options) {\n return this.client.get('/key', (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n /**\n * @deprecated This method is deprecated. Use Terraform or https://portal.basistheory.com to manage keys instead.\n */\n\n\n regenerateKey(id, options) {\n return this.client.post(`${id}/regenerate`, undefined, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n}).create().retrieve().update().delete().list().build();\nexports.BasisTheoryApplications = BasisTheoryApplications;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryApplications\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryApplications.BasisTheoryApplications;\n }\n});\n\nvar _BasisTheoryApplications = require(\"./BasisTheoryApplications\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryTokenize = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nclass BasisTheoryTokenize extends _service.BasisTheoryService {\n tokenize(tokens, options = {}) {\n return this.client.post('/', tokens, (0, _common.createRequestConfig)(options, {\n transformRequest: _common.proxyRaw,\n transformResponse: _common.proxyRaw\n })).then(_common.dataExtractor);\n }\n\n}\n\nexports.BasisTheoryTokenize = BasisTheoryTokenize;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryTokenize\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryTokenize.BasisTheoryTokenize;\n }\n});\n\nvar _BasisTheoryTokenize = require(\"./BasisTheoryTokenize\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.delegateTokenize = void 0;\n\nvar _tokenize = require(\"./../../tokenize\");\n\nconst delegateTokenize = elements => class BasisTheoryTokenizesElementsDelegate extends _tokenize.BasisTheoryTokenize {\n tokenize(payload, requestOptions) {\n if (elements !== null && elements !== void 0 && elements.hasElement(payload)) {\n return elements.tokenize(payload, requestOptions);\n }\n\n return super.tokenize(payload, requestOptions);\n }\n\n};\n\nexports.delegateTokenize = delegateTokenize;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryTokens = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _utils = require(\"./../common/utils\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryTokens = new _CrudBuilder.CrudBuilder(class BasisTheoryTokens extends _service.BasisTheoryService {\n constructor(options) {\n const _options = options; // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformRequest = [].concat(_utils.transformTokenRequestSnakeCase, options.transformRequest || []); // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformResponse = [].concat(_utils.transformTokenResponseCamelCase, options.transformResponse || []);\n super(_options);\n }\n\n retrieve(id, options = {} // avoid casting when accessing token data props\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) {\n const url = `/${id}`;\n return this.client.get(url, (0, _common.createRequestConfig)(options)).then(_utils.dataExtractor);\n }\n\n update(id, model, options = {}) {\n const url = `/${id}`;\n const config = (0, _common.createRequestConfig)(options);\n return this.client.patch(url, model, { ...config,\n headers: { ...((config === null || config === void 0 ? void 0 : config.headers) || {}),\n [_common.CONTENT_TYPE_HEADER]: _common.MERGE_CONTENT_TYPE\n }\n }).then(_utils.dataExtractor);\n }\n\n search(searchRequest, options) {\n return this.client.post('/search', searchRequest, (0, _common.createRequestConfig)(options)).then(_utils.dataExtractor);\n }\n\n}).create().delete().list().build();\nexports.BasisTheoryTokens = BasisTheoryTokens;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryTokens\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryTokens.BasisTheoryTokens;\n }\n});\n\nvar _BasisTheoryTokens = require(\"./BasisTheoryTokens\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.delegateTokens = void 0;\n\nvar _tokens = require(\"./../../tokens\");\n\nconst delegateTokens = elements => class BasisTheoryTokensElementsDelegate extends _tokens.BasisTheoryTokens {\n create(payload, requestOptions) {\n if (elements !== null && elements !== void 0 && elements.hasElement(payload)) {\n return elements.tokens.create(payload, requestOptions);\n }\n\n return super.create(payload, requestOptions);\n }\n\n update(id, payload, requestOptions) {\n if (elements !== null && elements !== void 0 && elements.hasElement(payload)) {\n return elements.tokens.update(id, payload, requestOptions);\n }\n\n return super.update(id, payload, requestOptions);\n }\n\n retrieve(id, requestOptions) {\n if (elements !== undefined) {\n return elements.tokens.retrieve(id, requestOptions);\n }\n\n return super.retrieve(id, requestOptions);\n }\n\n};\n\nexports.delegateTokens = delegateTokens;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryProxy = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nclass BasisTheoryProxy extends _service.BasisTheoryService {\n get(options) {\n return this.proxyRequest('get', options);\n }\n\n post(options) {\n return this.proxyRequest('post', options);\n }\n\n put(options) {\n return this.proxyRequest('put', options);\n }\n\n patch(options) {\n return this.proxyRequest('patch', options);\n }\n\n delete(options) {\n return this.proxyRequest('delete', options);\n }\n\n proxyRequest(method, options) {\n var _options$path2;\n\n if (method === 'post' || method === 'put' || method === 'patch') {\n var _options$path, _options$body;\n\n const extractor = options !== null && options !== void 0 && options.includeResponseHeaders && method === 'post' ? _common.dataAndHeadersExtractor : _common.dataExtractor;\n return this.client[method]((_options$path = options === null || options === void 0 ? void 0 : options.path) !== null && _options$path !== void 0 ? _options$path : '', (_options$body = options === null || options === void 0 ? void 0 : options.body) !== null && _options$body !== void 0 ? _options$body : undefined, (0, _common.createRequestConfig)(options, {\n transformRequest: _common.proxyRaw,\n transformResponse: _common.proxyRaw\n })).then(extractor);\n }\n\n return this.client[method]((_options$path2 = options === null || options === void 0 ? void 0 : options.path) !== null && _options$path2 !== void 0 ? _options$path2 : '/', (0, _common.createRequestConfig)(options, {\n transformRequest: _common.proxyRaw,\n transformResponse: _common.proxyRaw\n })).then(_common.dataExtractor);\n }\n\n}\n\nexports.BasisTheoryProxy = BasisTheoryProxy;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _BasisTheoryProxy = require(\"./BasisTheoryProxy\");\n\nObject.keys(_BasisTheoryProxy).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _BasisTheoryProxy[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _BasisTheoryProxy[key];\n }\n });\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.delegateProxy = void 0;\n\nvar _proxy = require(\"./../../proxy\");\n\nconst delegateProxy = elements => class BasisTheoryProxyElementsDelegate extends _proxy.BasisTheoryProxy {\n get(options) {\n if (elements !== undefined) {\n return elements.proxy.get(options);\n }\n\n return super.get(options);\n }\n\n post(options) {\n if (elements !== undefined) {\n return elements.proxy.post(options);\n }\n\n return super.post(options);\n }\n\n put(options) {\n if (elements !== undefined) {\n return elements.proxy.put(options);\n }\n\n return super.put(options);\n }\n\n patch(options) {\n if (elements !== undefined) {\n return elements.proxy.patch(options);\n }\n\n return super.patch(options);\n }\n\n delete(options) {\n if (elements !== undefined) {\n return elements.proxy.delete(options);\n }\n\n return super.delete(options);\n }\n\n};\n\nexports.delegateProxy = delegateProxy;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryTokenIntents = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryTokenIntents = new _CrudBuilder.CrudBuilder(class BasisTheoryTokenIntents extends _service.BasisTheoryService {\n constructor(options) {\n const _options = options; // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformRequest = [].concat(_common.transformTokenRequestSnakeCase, options.transformRequest || []); // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformResponse = [].concat(_common.transformTokenResponseCamelCase, options.transformResponse || []);\n super(_options);\n }\n\n}).create().delete().build();\nexports.BasisTheoryTokenIntents = BasisTheoryTokenIntents;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryTokenIntents\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryTokenIntents.BasisTheoryTokenIntents;\n }\n});\n\nvar _BasisTheoryTokenIntents = require(\"./BasisTheoryTokenIntents\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.delegateTokenIntents = void 0;\n\nvar _tokenIntents = require(\"./../../token-intents\");\n\nconst delegateTokenIntents = elements => class BasisTheoryTokenIntentsElementsDelegate extends _tokenIntents.BasisTheoryTokenIntents {\n create(payload, requestOptions) {\n if (elements !== null && elements !== void 0 && elements.hasElement(payload)) {\n return elements.tokenIntents.create(payload, requestOptions);\n }\n\n return super.create(payload, requestOptions);\n }\n\n};\n\nexports.delegateTokenIntents = delegateTokenIntents;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _tokenize = require(\"./tokenize\");\n\nObject.keys(_tokenize).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _tokenize[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _tokenize[key];\n }\n });\n});\n\nvar _tokens = require(\"./tokens\");\n\nObject.keys(_tokens).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _tokens[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _tokens[key];\n }\n });\n});\n\nvar _proxy = require(\"./proxy\");\n\nObject.keys(_proxy).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _proxy[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _proxy[key];\n }\n });\n});\n\nvar _tokenIntents = require(\"./token-intents\");\n\nObject.keys(_tokenIntents).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _tokenIntents[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _tokenIntents[key];\n }\n });\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.injectScript = exports.findScript = void 0;\n\nconst findScript = url => document.querySelector(`script[src^=\"${url}\"]`);\n\nexports.findScript = findScript;\n\nconst injectScript = url => {\n const script = document.createElement('script');\n script.src = url;\n const parent = document.head || document.body;\n\n if (!parent) {\n throw new Error('No <head> or <body> elements found in document.');\n }\n\n parent.append(script);\n return script;\n};\n\nexports.injectScript = injectScript;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE = exports.ELEMENTS_SCRIPT_LOAD_ERROR_MESSAGE = exports.ELEMENTS_SCRIPT_FAILED_TO_DELIVER = exports.ELEMENTS_NOM_DOM_ERROR_MESSAGE = exports.ELEMENTS_INIT_ERROR_MESSAGE = exports.CARD_ICON_POSITIONS = exports.CARD_BRANDS = exports.AUTOCOMPLETE_VALUES = void 0;\nconst ELEMENTS_INIT_ERROR_MESSAGE = 'BasisTheory Elements was not properly initialized.';\nexports.ELEMENTS_INIT_ERROR_MESSAGE = ELEMENTS_INIT_ERROR_MESSAGE;\nconst ELEMENTS_NOM_DOM_ERROR_MESSAGE = 'Tried to load BasisTheoryElements in a non-DOM environment.';\nexports.ELEMENTS_NOM_DOM_ERROR_MESSAGE = ELEMENTS_NOM_DOM_ERROR_MESSAGE;\nconst ELEMENTS_SCRIPT_LOAD_ERROR_MESSAGE = 'Basis Theory Elements did not load properly. Check network tab for more details.';\nexports.ELEMENTS_SCRIPT_LOAD_ERROR_MESSAGE = ELEMENTS_SCRIPT_LOAD_ERROR_MESSAGE;\nconst ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE = 'Unable to load the Elements script. This may be due to network restrictions or browser extensions like ad blockers interfering with script loading. Check browser settings or network connection and try again.';\nexports.ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE = ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE;\nconst ELEMENTS_SCRIPT_FAILED_TO_DELIVER = 'Failed to deliver Elements script from Basis Theory. Check your network connection and try again or contact support@basistheory.com';\nexports.ELEMENTS_SCRIPT_FAILED_TO_DELIVER = ELEMENTS_SCRIPT_FAILED_TO_DELIVER;\nconst CARD_BRANDS = ['visa', 'mastercard', 'american-express', 'discover', 'diners-club', 'jcb', 'unionpay', 'maestro', 'elo', 'hiper', 'hipercard', 'mir', 'unknown'];\nexports.CARD_BRANDS = CARD_BRANDS;\nconst CARD_ICON_POSITIONS = ['left', 'right', 'none']; // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n\nexports.CARD_ICON_POSITIONS = CARD_ICON_POSITIONS;\nconst AUTOCOMPLETE_VALUES = ['additional-name', 'address-level1', 'address-level2', 'address-level3', 'address-level4', 'address-line1', 'address-line2', 'address-line3', 'bday-day', 'bday-month', 'bday-year', 'bday', 'billing', 'cc-additional-name', 'cc-csc', 'cc-exp-month', 'cc-exp-year', 'cc-exp', 'cc-family-name', 'cc-given-name', 'cc-name', 'cc-number', 'cc-type', 'country-name', 'country', 'current-password', 'email', 'family-name', 'fax', 'given-name', 'home', 'honorific-prefix', 'honorific-suffix', 'language', 'mobile', 'name', 'new-password', 'nickname', 'off', 'on', 'one-time-code', 'organization-title', 'organization', 'page', 'postal-code', 'sex', 'shipping', 'street-address', 'tel-area-code', 'tel-country-code', 'tel-extension', 'tel-local-prefix', 'tel-local-suffix', 'tel-local', 'tel-national', 'tel', 'transaction-amount', 'transaction-currency', 'url', 'username', 'work'];\nexports.AUTOCOMPLETE_VALUES = AUTOCOMPLETE_VALUES;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.loadElements = void 0;\n\nvar _logging = require(\"./../common/logging\");\n\nvar _constants = require(\"./constants\");\n\nvar _script2 = require(\"./script\");\n\nlet elementsPromise;\n\nconst loadScript = (url, retryCount) => new Promise((resolve, reject) => {\n let script = (0, _script2.findScript)(url);\n\n if (!script) {\n script = (0, _script2.injectScript)(url);\n } else {\n if (window.BasisTheoryElements) {\n resolve(window.BasisTheoryElements);\n return;\n }\n\n if (retryCount > 0) {\n // script already exists in dom\n // remove it to avoid duplicates\n try {\n var _script;\n\n (_script = script) === null || _script === void 0 ? void 0 : _script.remove();\n } catch (error) {\n (async () => {\n await _logging.logger.log.error(`Error removing script from DOM on retry attempt ${retryCount}`, {\n logType: 'scriptRemovalError',\n logOrigin: 'loadScript',\n retryCount,\n removalError: error\n });\n })();\n\n reject(new Error(_constants.ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE));\n return;\n } // re-inject the script\n\n\n script = (0, _script2.injectScript)(url);\n }\n } // script load success\n\n\n script.addEventListener('load', () => {\n if (window.BasisTheoryElements) {\n resolve(window.BasisTheoryElements);\n return;\n }\n\n (async () => {\n await _logging.logger.log.error('Elements not found on window on load', {\n logType: 'elementsNotFoundOnWindow',\n logOrigin: 'loadScript',\n retryCount\n });\n })();\n\n reject(new Error(_constants.ELEMENTS_SCRIPT_LOAD_ERROR_MESSAGE));\n return;\n }); // script error event\n\n script.addEventListener('error', async event => {\n await _logging.logger.log.error('Elements script onError event', {\n logType: 'elementsScriptOnError',\n logOrigin: 'loadScript',\n retryCount,\n event: {\n message: event === null || event === void 0 ? void 0 : event.message,\n source: event === null || event === void 0 ? void 0 : event.filename,\n lineno: event === null || event === void 0 ? void 0 : event.lineno,\n colno: event === null || event === void 0 ? void 0 : event.colno,\n error: event === null || event === void 0 ? void 0 : event.error,\n target: event === null || event === void 0 ? void 0 : event.target\n }\n }); // retry 1x if first attempt\n\n if (retryCount === 0) {\n loadScript(url, retryCount + 1).then(resolve).catch(reject);\n return;\n } // second attempt has failed: try fetching the script to inspect the response\n\n\n try {\n const response = await fetch(url);\n let responseObject;\n let responseText;\n\n try {\n responseText = await response.text();\n responseObject = JSON.parse(responseText);\n } catch {\n var _responseText;\n\n responseObject = (_responseText = responseText) !== null && _responseText !== void 0 ? _responseText : '';\n }\n\n if (!response.ok) {\n await _logging.logger.log.error(`Second attempt to load elements script failed, fetch failed with status: ${response.status}.`, {\n logType: 'elementsScriptFetchFailure',\n logOrigin: 'loadScript',\n retryCount,\n fetchResult: 'error',\n fetchResponse: responseObject,\n fetchHeaders: response.headers,\n fetchStatusText: response.statusText\n });\n reject(new Error(_constants.ELEMENTS_SCRIPT_FAILED_TO_DELIVER));\n return;\n }\n\n await _logging.logger.log.error(`Second attempt to load elements script failed, fetch success`, {\n logType: 'elementsScriptFetchFailure',\n logOrigin: 'loadScript',\n retryCount,\n fetchResult: 'success',\n fetchResponse: responseObject,\n fetchHeaders: response.headers,\n fetchStatusText: response.statusText\n });\n reject(new Error(_constants.ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE));\n return;\n } catch (error) {\n // fetch also failed to make the request; most likely a browser/network error\n await _logging.logger.log.error('Second attempt failed to load elements script failed, fetch network error.', {\n logType: 'elementsScriptFetchError',\n logOrigin: 'loadScript',\n retryCount,\n fetchResult: 'error',\n fetchError: JSON.stringify(error !== null && error !== void 0 ? error : 'Unknown Error')\n });\n reject(new Error(_constants.ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE));\n return;\n }\n });\n});\n\nconst loadElements = elementsClientUrl => {\n if (!elementsPromise) {\n elementsPromise = new Promise((resolve, reject) => {\n if (typeof window !== 'object') {\n (async () => {\n await _logging.logger.log.warn(_constants.ELEMENTS_NOM_DOM_ERROR_MESSAGE, {\n logType: 'elementsNonDomError',\n logOrigin: 'loadElements'\n });\n reject(new Error(_constants.ELEMENTS_NOM_DOM_ERROR_MESSAGE));\n })();\n\n return;\n }\n\n if (window.BasisTheoryElements) {\n resolve(window.BasisTheoryElements);\n return;\n }\n\n let url = `https://${\"js.basistheory.com\"}/web-elements/1.5.0/client/index.js`;\n\n if (typeof elementsClientUrl !== 'undefined') {\n try {\n const urlObject = new URL(elementsClientUrl);\n url = urlObject.toString().replace(/\\/$/u, '');\n } catch {\n (async () => {\n await _logging.logger.log.warn('Invalid format for the given Elements client url.', {\n logType: 'invalidClientUrlError',\n logOrigin: 'loadElements'\n });\n })();\n\n throw new Error('Invalid format for the given Elements client url.');\n }\n }\n\n loadScript(url, 0).then(resolve).catch(error => {\n reject(error);\n });\n });\n }\n\n return elementsPromise;\n};\n\nexports.loadElements = loadElements;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _services = require(\"./services\");\n\nObject.keys(_services).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _services[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _services[key];\n }\n });\n});\n\nvar _script = require(\"./script\");\n\nObject.keys(_script).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _script[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _script[key];\n }\n });\n});\n\nvar _load = require(\"./load\");\n\nObject.keys(_load).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _load[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _load[key];\n }\n });\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryLogs = void 0;\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryLogs = new _CrudBuilder.CrudBuilder(class BasisTheoryLogs extends _service.BasisTheoryService {}).list().build();\nexports.BasisTheoryLogs = BasisTheoryLogs;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryLogs\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryLogs.BasisTheoryLogs;\n }\n});\n\nvar _BasisTheoryLogs = require(\"./BasisTheoryLogs\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryPermissions = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nclass BasisTheoryPermissions extends _service.BasisTheoryService {\n list(query, options) {\n const url = `/${(0, _common.getQueryParams)(query)}`;\n return this.client.get(url, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n}\n\nexports.BasisTheoryPermissions = BasisTheoryPermissions;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryPermissions\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryPermissions.BasisTheoryPermissions;\n }\n});\n\nvar _BasisTheoryPermissions = require(\"./BasisTheoryPermissions\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryProxies = void 0;\n\nvar _utils = require(\"./../common/utils\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryProxies = new _CrudBuilder.CrudBuilder(class BasisTheoryProxies extends _service.BasisTheoryService {\n constructor(options) {\n const _options = { ...options\n }; // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformRequest = [].concat(_utils.transformProxyRequestSnakeCase, options.transformRequest || []); // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformResponse = [].concat(_utils.transformProxyResponseCamelCase, options.transformResponse || []);\n super(_options);\n }\n\n}).create().retrieve().update().patch().delete().list().build();\nexports.BasisTheoryProxies = BasisTheoryProxies;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _BasisTheoryProxies = require(\"./BasisTheoryProxies\");\n\nObject.keys(_BasisTheoryProxies).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _BasisTheoryProxies[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _BasisTheoryProxies[key];\n }\n });\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryReactorFormulas = void 0;\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryReactorFormulas = new _CrudBuilder.CrudBuilder(class BasisTheoryReactorFormulas extends _service.BasisTheoryService {}).create().retrieve().update().delete().list().build();\nexports.BasisTheoryReactorFormulas = BasisTheoryReactorFormulas;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryReactorFormulas\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryReactorFormulas.BasisTheoryReactorFormulas;\n }\n});\n\nvar _BasisTheoryReactorFormulas = require(\"./BasisTheoryReactorFormulas\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryReactors = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _utils = require(\"./../common/utils\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryReactors = new _CrudBuilder.CrudBuilder(class BasisTheoryReactors extends _service.BasisTheoryService {\n constructor(options) {\n const _options = { ...options\n }; // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformRequest = [].concat(_utils.transformReactorRequestSnakeCase, options.transformRequest || []); // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformResponse = [].concat(_utils.transformReactorResponseCamelCase, options.transformResponse || []);\n super(_options);\n }\n\n react(reactorId, request, options) {\n return this.client.post(`/${reactorId}/react`, request, (0, _common.createRequestConfig)(options, {\n transformRequest: _common.proxyRaw,\n transformResponse: _common.proxyRaw\n })).then(_common.dataExtractor);\n }\n\n}).create().retrieve().update().patch().delete().list().build();\nexports.BasisTheoryReactors = BasisTheoryReactors;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryReactors\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryReactors.BasisTheoryReactors;\n }\n});\n\nvar _BasisTheoryReactors = require(\"./BasisTheoryReactors\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheorySessions = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _utils = require(\"./../common/utils\");\n\nvar _service = require(\"./../service\");\n\nclass BasisTheorySessions extends _service.BasisTheoryService {\n constructor(options) {\n const _options = { ...options\n }; // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformRequest = [].concat(_utils.transformProxyRequestSnakeCase, options.transformRequest || []); // eslint-disable-next-line unicorn/prefer-spread\n\n _options.transformResponse = [].concat(_utils.transformProxyResponseCamelCase, options.transformResponse || []);\n super(_options);\n }\n\n create(options = {}) {\n return this.client.post('/', undefined, (0, _common.createRequestConfig)(options)).then(_utils.dataExtractor);\n }\n\n authorize(authorizeSessionRequest, options = {}) {\n const url = `/authorize`;\n return this.client.post(url, authorizeSessionRequest, (0, _common.createRequestConfig)(options)).then(_utils.dataExtractor);\n }\n\n}\n\nexports.BasisTheorySessions = BasisTheorySessions;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheorySessions\", {\n enumerable: true,\n get: function () {\n return _BasisTheorySessions.BasisTheorySessions;\n }\n});\n\nvar _BasisTheorySessions = require(\"./BasisTheorySessions\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryTenants = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nvar _CrudBuilder = require(\"./../service/CrudBuilder\");\n\nconst BasisTheoryTenants = new _CrudBuilder.CrudBuilder(class BasisTheoryTenants extends _service.BasisTheoryService {\n retrieve(options) {\n return this.client.get('/', (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n update(model, options) {\n return this.client.put('/', model, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n async delete(options) {\n await this.client.delete('/', (0, _common.createRequestConfig)(options));\n }\n\n retrieveUsageReport(options) {\n return this.client.get('/reports/usage', (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n createInvitation(model, options) {\n return this.client.post('/invitations', model, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n resendInvitation(invitationId, options) {\n return this.client.post(`/invitations/${invitationId}/resend`, {}, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n listInvitations(query, options) {\n const url = `/invitations${(0, _common.getQueryParams)(query)}`;\n return this.client.get(url, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n retrieveInvitation(invitationId, options) {\n return this.client.get(`/invitations/${invitationId}`, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n async deleteInvitation(invitationId, options) {\n await this.client.delete(`/invitations/${invitationId}`, (0, _common.createRequestConfig)(options));\n }\n\n listMembers(query, options) {\n const url = `/members${(0, _common.getQueryParams)(query)}`;\n return this.client.get(url, (0, _common.createRequestConfig)(options)).then(_common.dataExtractor);\n }\n\n async deleteMember(memberId, options) {\n await this.client.delete(`/members/${memberId}`, (0, _common.createRequestConfig)(options));\n }\n\n}).build();\nexports.BasisTheoryTenants = BasisTheoryTenants;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"BasisTheoryTenants\", {\n enumerable: true,\n get: function () {\n return _BasisTheoryTenants.BasisTheoryTenants;\n }\n});\n\nvar _BasisTheoryTenants = require(\"./BasisTheoryTenants\");", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheoryThreeDS = void 0;\n\nvar _common = require(\"./../common\");\n\nvar _service = require(\"./../service\");\n\nclass BasisTheoryThreeDS extends _service.BasisTheoryService {\n createSession(createRequest) {\n return this.client.post('/sessions', createRequest).then(_common.dataExtractor);\n }\n\n getSessionById(sessionId) {\n return this.client.get(`/sessions/${sessionId}`).then(_common.dataExtractor);\n }\n\n authenticateSession(sessionId, authenticateRequest) {\n return this.client.post(`/sessions/${sessionId}/authenticate`, authenticateRequest).then(_common.dataExtractor);\n }\n\n getChallengeResult(sessionId) {\n return this.client.get(`/sessions/${sessionId}/challenge-result`).then(_common.dataExtractor);\n }\n\n}\n\nexports.BasisTheoryThreeDS = BasisTheoryThreeDS;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _BasisTheoryThreeDs = require(\"./BasisTheoryThreeDs\");\n\nObject.keys(_BasisTheoryThreeDs).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in exports && exports[key] === _BasisTheoryThreeDs[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _BasisTheoryThreeDs[key];\n }\n });\n});", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.BasisTheory = void 0;\n\nvar _applicationTemplates = require(\"./application-templates\");\n\nvar _applicationKeys = require(\"./applicationKeys\");\n\nvar _applications = require(\"./applications\");\n\nvar _common = require(\"./common\");\n\nvar _logging = require(\"./common/logging\");\n\nvar _elements = require(\"./elements\");\n\nvar _constants = require(\"./elements/constants\");\n\nvar _logs = require(\"./logs\");\n\nvar _permissions = require(\"./permissions\");\n\nvar _proxies = require(\"./proxies\");\n\nvar _reactorFormulas = require(\"./reactor-formulas\");\n\nvar _reactors = require(\"./reactors\");\n\nvar _sessions = require(\"./sessions\");\n\nvar _tenants = require(\"./tenants\");\n\nvar _threeds = require(\"./threeds\");\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nconst defaultInitOptions = {\n apiBaseUrl: _common.DEFAULT_BASE_URL,\n elements: false,\n disableTelemetry: false,\n debug: false,\n appInfo: {}\n};\n\nclass BasisTheory {\n constructor() {\n _defineProperty(this, \"_initStatus\", 'not-started');\n }\n\n async init(apiKey, options = {}) {\n if (this._initStatus !== 'not-started' && this._initStatus !== 'error') {\n throw new Error('This BasisTheory instance has been already initialized.');\n }\n\n this._initStatus = 'in-progress';\n\n try {\n this._initOptions = Object.freeze({ ...defaultInitOptions,\n ...options\n });\n let baseUrl = this._initOptions.apiBaseUrl;\n\n try {\n const baseUrlObject = new URL(this.initOptions.apiBaseUrl);\n\n if (baseUrlObject.hostname === 'localhost') {\n baseUrlObject.protocol = 'http';\n } else {\n baseUrlObject.protocol = 'https';\n }\n\n baseUrl = `${baseUrlObject.toString().replace(/\\/$/u, '')}/`;\n } catch {\n throw new Error('Invalid format for the given API base url.');\n }\n\n const appInfo = this._initOptions.appInfo;\n\n if (this._initOptions.elements) {\n await this.loadElements(apiKey);\n }\n\n this._tokens = new ((0, _elements.delegateTokens)(this._elements))({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.tokens, baseUrl).toString(),\n appInfo,\n debug: this._initOptions.debug\n });\n this._tokenize = new ((0, _elements.delegateTokenize)(this._elements))({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.tokenize, baseUrl).toString(),\n appInfo,\n debug: this._initOptions.debug\n });\n this._applications = new _applications.BasisTheoryApplications({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.applications, baseUrl).toString(),\n appInfo\n });\n this._applicationKeys = new _applicationKeys.BasisTheoryApplicationKeys({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.applicationKeys, baseUrl).toString(),\n appInfo\n });\n this._applicationTemplates = new _applicationTemplates.BasisTheoryApplicationTemplates({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.applicationTemplates, baseUrl).toString(),\n appInfo\n });\n this._tenants = new _tenants.BasisTheoryTenants({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.tenants, baseUrl).toString(),\n appInfo\n });\n this._logs = new _logs.BasisTheoryLogs({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.logs, baseUrl).toString(),\n appInfo\n });\n this._reactorFormulas = new _reactorFormulas.BasisTheoryReactorFormulas({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.reactorFormulas, baseUrl).toString(),\n appInfo\n });\n this._reactors = new _reactors.BasisTheoryReactors({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.reactors, baseUrl).toString(),\n appInfo\n });\n this._permissions = new _permissions.BasisTheoryPermissions({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.permissions, baseUrl).toString(),\n appInfo\n });\n this._proxies = new _proxies.BasisTheoryProxies({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.proxies, baseUrl).toString(),\n appInfo\n });\n this._proxy = new ((0, _elements.delegateProxy)(this._elements))({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.proxy, baseUrl).toString(),\n appInfo,\n debug: this._initOptions.debug\n });\n this._sessions = new _sessions.BasisTheorySessions({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.sessions, baseUrl).toString(),\n appInfo,\n debug: this._initOptions.debug\n });\n this._threeds = new _threeds.BasisTheoryThreeDS({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.threeds, baseUrl).toString(),\n appInfo\n });\n this._tokenIntents = new ((0, _elements.delegateTokenIntents)(this._elements))({\n apiKey,\n baseURL: new URL(_common.CLIENT_BASE_PATHS.tokenIntents, baseUrl).toString(),\n appInfo,\n debug: this._initOptions.debug\n });\n\n if (options.disableTelemetry) {\n _logging.logger.setTelemetryEnabled(false);\n }\n\n this._initStatus = 'done';\n } catch (error) {\n this._initStatus = 'error';\n throw error;\n }\n\n return this;\n }\n\n createElement(type, options) {\n if (!this._elements) {\n throw new Error(_constants.ELEMENTS_INIT_ERROR_MESSAGE);\n }\n\n return this._elements.createElement(type, options);\n }\n\n tokenize(tokens, options) {\n return (0, _common.assertInit)(this._tokenize).tokenize(tokens, options);\n }\n\n async loadElements(apiKey) {\n let elementsBaseUrl;\n\n try {\n elementsBaseUrl = new URL(this.initOptions.elementsBaseUrl || _common.DEFAULT_ELEMENTS_BASE_URL);\n } catch {\n throw new Error('Invalid format for the given Elements base url.');\n }\n\n const elements = await (0, _elements.loadElements)(this.initOptions.elementsClientUrl);\n const elementsUseNgApi = this.initOptions.elementsUseNgApi || false;\n const elementsUseSameOriginApi = this.initOptions.elementsUseSameOriginApi || false;\n const disableTelemetry = this.initOptions.disableTelemetry || false;\n const debug = this.initOptions.debug || false;\n await elements.init(apiKey, elementsBaseUrl.toString().replace(/\\/$/u, ''), elementsUseNgApi, elementsUseSameOriginApi, disableTelemetry, debug);\n this.elements = elements;\n } // these should be set by the init call only.\n\n /* eslint-disable accessor-pairs */\n\n\n get initOptions() {\n return (0, _common.assertInit)(this._initOptions);\n }\n\n get tokens() {\n return (0, _common.assertInit)(this._tokens);\n }\n\n get applications() {\n return (0, _common.assertInit)(this._applications);\n }\n\n get applicationKeys() {\n return (0, _common.assertInit)(this._applicationKeys);\n }\n\n get applicationTemplates() {\n return (0, _common.assertInit)(this._applicationTemplates);\n }\n\n get client() {\n if (this._elements) {\n var _this$_elements;\n\n return (_this$_elements = this._elements) === null || _this$_elements === void 0 ? void 0 : _this$_elements.client;\n } // eslint-disable-next-line no-console\n\n\n console.error('Elements are not initialized. Either initialize elements or use a regular HTTP client if no elements are needed.');\n return undefined;\n }\n\n get tenants() {\n return (0, _common.assertInit)(this._tenants);\n }\n\n get logs() {\n return (0, _common.assertInit)(this._logs);\n }\n /**\n * @deprecated Reactor Formulas are now deprecated and will be removed in a future release.\n * @description We have introduced a `code` property for Reactors to replace Formula's code. For more details visit [our API reference](https://developers.basistheory.com/docs/api/reactors#create-reactor).\n */\n\n\n get reactorFormulas() {\n return (0, _common.assertInit)(this._reactorFormulas);\n }\n\n get reactors() {\n return (0, _common.assertInit)(this._reactors);\n }\n\n get permissions() {\n return (0, _common.assertInit)(this._permissions);\n }\n\n get proxies() {\n return (0, _common.assertInit)(this._proxies);\n }\n\n get proxy() {\n return (0, _common.assertInit)(this._proxy);\n }\n\n get sessions() {\n return (0, _common.assertInit)(this._sessions);\n }\n\n get threeds() {\n return (0, _common.assertInit)(this._threeds);\n }\n\n get tokenIntents() {\n return (0, _common.assertInit)(this._tokenIntents);\n }\n /* eslint-enable accessor-pairs */\n\n /**\n * @deprecated\n */\n\n\n get elements() {\n return (0, _common.assertInit)(this._elements);\n }\n\n set elements(elements) {\n this._elements = elements;\n }\n\n}\n\nexports.BasisTheory = BasisTheory;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar _exportNames = {\n _instance: true\n};\nexports._instance = void 0;\n\nvar _BasisTheory = require(\"./BasisTheory\");\n\nObject.keys(_BasisTheory).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _BasisTheory[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _BasisTheory[key];\n }\n });\n});\n\nvar _applications = require(\"./applications\");\n\nObject.keys(_applications).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _applications[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _applications[key];\n }\n });\n});\n\nvar _tokens = require(\"./tokens\");\n\nObject.keys(_tokens).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n if (key in exports && exports[key] === _tokens[key]) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return _tokens[key];\n }\n });\n});\n\n/**\n * Default instance used to expose bundle in <script> tags. <br/>\n * Not meant to be used in Node environment.\n */\nconst _instance = new _BasisTheory.BasisTheory();\n\nexports._instance = _instance;", "const $ede1e6694b13a411$export$3f521420530811cf = {\n FRAME_CONTAINER_ID: \"methodFrameContainer\",\n IFRAME_NAME: \"methodIframe\",\n FORM_NAME: \"threeDSMethodForm\",\n INPUT_NAME: \"threeDSMethodData\"\n};\nconst $ede1e6694b13a411$export$9aef2de9a9febd46 = {\n FRAME_CONTAINER_ID: \"challengeFrameContainer\",\n IFRAME_NAME: \"challengeIframe\",\n FORM_NAME: \"threeDSCReqForm\"\n};\nconst $ede1e6694b13a411$export$909c260dfc8c4a = {\n IFRAME: \"iframe\",\n REDIRECT: \"redirect\"\n};\nconst $ede1e6694b13a411$export$a831561ce8167be0 = \"BT-API-KEY\";\nconst $ede1e6694b13a411$export$e575008eba482a0 = \"BT-TRACE-ID\";\nconst $ede1e6694b13a411$export$c3ee1e672e1e24e7 = \"https://api.basistheory.com\";\nconst $ede1e6694b13a411$export$c823725bfc2e0c49 = \"https://3ds.basistheory.com\";\nconst $ede1e6694b13a411$export$16a30e6d25dd54ab = \"pages/method.html\";\nconst $ede1e6694b13a411$export$260aceedd9fe5f81 = \"pages/challenge.html\";\n\n\n\nlet $9baa5c7531c09ef3$var$disableTelemetry = false;\nconst $9baa5c7531c09ef3$export$bfcc8eb13073c803 = ({ disableTelemetry: disableTelemetryArg })=>{\n $9baa5c7531c09ef3$var$disableTelemetry = disableTelemetryArg;\n};\nconst $9baa5c7531c09ef3$export$af88d00dbe7f521 = (()=>{\n const ddTok = \"pubb96b84a13912504f4354f2d794ea4fab\";\n const log = async (message, level, error, attributes = {})=>{\n if ($9baa5c7531c09ef3$var$disableTelemetry) return;\n const payload = {\n application: \"3ds-web\",\n ddsource: \"3ds-web\",\n service: \"3ds-web\",\n ...attributes,\n level: level,\n message: level === \"error\" && error ? `${message}: ${error.message}` : message\n };\n try {\n const response = await fetch(`https://http-intake.logs.datadoghq.com/v1/input/${ddTok}`, {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n if (!response.ok) throw new Error(\"Network response was not ok\");\n } catch {\n // Do nothing\n }\n };\n return {\n log: {\n error: (message, error, attributes)=>log(message, \"error\", error, attributes),\n info: (message, attributes)=>log(message, \"info\", undefined, attributes),\n warn: (message, attributes)=>log(message, \"warn\", undefined, attributes)\n }\n };\n})();\n\n\nvar $12389938bc382e86$export$f73e2cb993c10d36;\n(function(WindowSizeId) {\n WindowSizeId[\"ONE\"] = \"01\";\n WindowSizeId[\"TWO\"] = \"02\";\n WindowSizeId[\"THREE\"] = \"03\";\n WindowSizeId[\"FOUR\"] = \"04\";\n WindowSizeId[\"FIVE\"] = \"05\";\n})($12389938bc382e86$export$f73e2cb993c10d36 || ($12389938bc382e86$export$f73e2cb993c10d36 = {}));\nconst $12389938bc382e86$var$stringifyValue = (val)=>{\n if (val === null || val === undefined) return \"\";\n return JSON.stringify(val);\n};\nconst $12389938bc382e86$export$fa80f116bca647aa = ()=>{\n const validColorDepths = [\n 1,\n 4,\n 8,\n 15,\n 16,\n 24,\n 32,\n 48\n ];\n const actualColorDepth = window.screen.colorDepth;\n const possibleValues = validColorDepths.filter((val)=>val <= actualColorDepth);\n if (possibleValues.length === 0) return validColorDepths[0];\n return Math.max(...possibleValues);\n};\nconst $12389938bc382e86$export$524b4f5938fca0ea = (c)=>c?.split(\"-\").slice(0, 2).join(\"-\");\nconst $12389938bc382e86$export$a5202107d3e3cdb0 = ()=>({\n browserColorDepth: $12389938bc382e86$var$stringifyValue($12389938bc382e86$export$fa80f116bca647aa()),\n browserJavascriptEnabled: true,\n browserJavaEnabled: window.navigator.javaEnabled(),\n browserLanguage: $12389938bc382e86$export$524b4f5938fca0ea(window.navigator.language),\n browserScreenHeight: $12389938bc382e86$var$stringifyValue(window.screen.height),\n browserScreenWidth: $12389938bc382e86$var$stringifyValue(window.screen.width),\n browserTZ: $12389938bc382e86$var$stringifyValue(new Date().getTimezoneOffset()),\n browserUserAgent: window.navigator.userAgent\n });\nconst $12389938bc382e86$export$d96f5f7405a82f1b = (challengeWindowSize = \"05\")=>{\n const sizeMap = {\n [\"01\"]: [\n \"250px\",\n \"400px\"\n ],\n [\"02\"]: [\n \"390px\",\n \"400px\"\n ],\n [\"03\"]: [\n \"500px\",\n \"600px\"\n ],\n [\"04\"]: [\n \"600px\",\n \"400px\"\n ],\n [\"05\"]: [\n \"100%\",\n \"100%\"\n ]\n };\n const size = sizeMap[challengeWindowSize];\n if (size) return size;\n else {\n const err = new Error(`Window size ${challengeWindowSize} is not supported`);\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(\"Unsupported window size\", err);\n throw err;\n }\n};\n\n\n\nconst $c64965f72f06da5e$var$isHTMLElement = (obj)=>!obj || obj instanceof HTMLElement;\nconst $c64965f72f06da5e$export$eca25244f8f7df8e = (container, name, id, width = \"0\", height = \"0\", onLoadCallback)=>{\n if (!$c64965f72f06da5e$var$isHTMLElement(container) || !name || !id) {\n const msg = `Unable to create iframe. Container must be a HTML element ${JSON.stringify(container)} ${name} ${id}`;\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(`Unable to create iframe`, new Error());\n throw Error(msg);\n }\n const iframe = document.createElement(\"iframe\");\n iframe.name = name;\n iframe.width = width;\n iframe.height = height;\n iframe.setAttribute(\"id\", id);\n iframe.setAttribute(\"frameborder\", \"0\");\n iframe.setAttribute(\"border\", \"0\");\n if (onLoadCallback && typeof onLoadCallback === \"function\") iframe.addEventListener(\"onload\", onLoadCallback);\n container.appendChild(iframe);\n return iframe;\n};\nconst $c64965f72f06da5e$export$f681a8129d2e9d28 = (formName, formAction, formTarget)=>{\n const form = document.createElement(\"form\");\n form.name = formName;\n form.action = formAction;\n form.method = \"POST\";\n form.target = formTarget;\n return form;\n};\nconst $c64965f72f06da5e$export$d80fffb1deb3b97e = (name, value)=>{\n const input = document.createElement(\"input\");\n input.name = name;\n input.value = value;\n return input;\n};\nconst $c64965f72f06da5e$export$c8a8987d4410bf2d = (tagName, child)=>{\n const element = document.createElement(tagName);\n element.appendChild(child);\n return element;\n};\nconst $c64965f72f06da5e$export$b824392d62597b74 = (id, /**\n * Sets display none on the iframe container\n */ hidden = false)=>{\n let container;\n // check if container exists and just wipe content\n container = document.getElementById(id);\n if (container) {\n container.innerHTML = \"\";\n if (hidden) container.setAttribute(\"style\", \"display:none;\");\n return;\n }\n container = document.createElement(\"div\");\n container.id = id;\n if (hidden) container.setAttribute(\"style\", \"display:none;\");\n document.body.appendChild(container);\n};\nconst $c64965f72f06da5e$export$78907e7ba1b6c00e = (ids)=>ids?.map((id)=>document.getElementById(id)?.remove());\n\n\nconst $fa75e9b184a0a110$var$convertCasing = (obj, transformKey)=>{\n const convertCase = (input)=>{\n if (typeof input === \"string\") return transformKey(input);\n if (typeof input !== \"object\" || input === null) return input;\n if (Array.isArray(input)) return input.map(convertCase);\n return Object.fromEntries(Object.entries(input).map(([key, value])=>[\n transformKey(key),\n typeof value === \"object\" || Array.isArray(value) ? convertCase(value) : value\n ]));\n };\n return convertCase(obj);\n};\nconst $fa75e9b184a0a110$export$3561b44d041d13c = (obj)=>$fa75e9b184a0a110$var$convertCasing(obj, (val)=>val.replace(/([a-z])([A-Z])/g, \"$1_$2\").toLowerCase());\nconst $fa75e9b184a0a110$export$72d485cca95ce2e2 = (obj)=>$fa75e9b184a0a110$var$convertCasing(obj, (val)=>val.replace(/_./g, (match)=>match[1].toUpperCase()));\n\n\nconst $bb80761c88de0bf5$export$c564cdbbe6da493 = (obj)=>btoa(JSON.stringify(obj)).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n\n\n\n\nconst $263638c749818df0$export$7d6f1c8842f9f527 = (()=>{\n let _apiKey;\n let _baseUrl;\n const client = async (method, path, body, correlationId)=>{\n if (!_apiKey) throw Error(\"Missing api key\");\n if (_baseUrl) (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.info(`Using custom api base url in 3DS SDK ${_baseUrl}`);\n const additional_headers = {};\n if (correlationId) additional_headers[0, $ede1e6694b13a411$export$e575008eba482a0] = correlationId;\n return await fetch(`${_baseUrl ?? (0, $ede1e6694b13a411$export$c3ee1e672e1e24e7)}/3ds${path}`, {\n method: method,\n body: JSON.stringify(body),\n headers: {\n [(0, $ede1e6694b13a411$export$a831561ce8167be0)]: _apiKey,\n \"Content-Type\": \"application/json\",\n ...additional_headers\n }\n });\n };\n const init = (apiKey, baseUrl)=>{\n _apiKey = apiKey;\n _baseUrl = baseUrl;\n };\n return {\n client: client,\n init: init\n };\n})();\n\n\n\nvar $9e6eab7e85fe68ea$export$9130146a86a85749;\n(function(NotificationType) {\n NotificationType[\"METHOD\"] = \"method\";\n NotificationType[\"CHALLENGE\"] = \"challenge\";\n NotificationType[\"METHOD_TIME_OUT\"] = \"methodTimeout\";\n NotificationType[\"START_METHOD_TIME_OUT\"] = \"startMethodTimeout\";\n NotificationType[\"ERROR\"] = \"error\";\n})($9e6eab7e85fe68ea$export$9130146a86a85749 || ($9e6eab7e85fe68ea$export$9130146a86a85749 = {}));\nconst $9e6eab7e85fe68ea$export$5e14cdade93d6f7b = (notification)=>window.postMessage(notification, \"*\");\nconst $9e6eab7e85fe68ea$export$c1c631b5969e899b = (obj)=>typeof obj === \"object\" && obj !== null && \"isCompleted\" in obj && typeof obj.isCompleted === \"boolean\" && \"id\" in obj && typeof obj.id === \"string\" && \"type\" in obj && Object.values($9e6eab7e85fe68ea$export$9130146a86a85749).includes(obj.type);\n\n\n\n\n\n\n\nconst $b7edf56a6b60e294$var$getIframeId = (type)=>({\n [(0, $9e6eab7e85fe68ea$export$9130146a86a85749).CHALLENGE]: (0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME,\n [(0, $9e6eab7e85fe68ea$export$9130146a86a85749).METHOD]: (0, $ede1e6694b13a411$export$3f521420530811cf).IFRAME_NAME,\n [(0, $9e6eab7e85fe68ea$export$9130146a86a85749).METHOD_TIME_OUT]: (0, $ede1e6694b13a411$export$3f521420530811cf).IFRAME_NAME,\n [(0, $9e6eab7e85fe68ea$export$9130146a86a85749).ERROR]: `${(0, $ede1e6694b13a411$export$3f521420530811cf).IFRAME_NAME},${(0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME}`,\n [(0, $9e6eab7e85fe68ea$export$9130146a86a85749).START_METHOD_TIME_OUT]: \"\"\n })[type]?.split(\",\");\nconst $b7edf56a6b60e294$export$c41ae42ecc348abb = (session)=>{\n let timeout;\n return new Promise((resolve, reject)=>{\n const handleMessage = (event)=>{\n if ((0, $9e6eab7e85fe68ea$export$c1c631b5969e899b)(event.data)) {\n if (event.data.type === (0, $9e6eab7e85fe68ea$export$9130146a86a85749).ERROR) {\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(`Error occurred during session creation: ${event?.data?.details}`);\n reject(new Error(`An error occurred during session creation: ${event?.data?.details}`));\n (0, $c64965f72f06da5e$export$78907e7ba1b6c00e)($b7edf56a6b60e294$var$getIframeId(event.data?.type));\n clearTimeout(timeout);\n } else if (event.data.type === (0, $9e6eab7e85fe68ea$export$9130146a86a85749).START_METHOD_TIME_OUT) timeout = setTimeout(()=>{\n (0, $9e6eab7e85fe68ea$export$5e14cdade93d6f7b)({\n id: event.data.id,\n type: (0, $9e6eab7e85fe68ea$export$9130146a86a85749).METHOD_TIME_OUT,\n isCompleted: false\n });\n }, 10000);\n else if (event.data.type === (0, $9e6eab7e85fe68ea$export$9130146a86a85749).CHALLENGE) ;\n else if (!event.isTrusted) ;\n else {\n // handle session creation event\n window.removeEventListener(\"message\", handleMessage);\n const toResponse = (event)=>{\n const transformedSession = (0, $fa75e9b184a0a110$export$72d485cca95ce2e2)(session);\n const response = {\n id: event.data.id,\n cardBrand: transformedSession.cardBrand,\n correlationId: transformedSession.correlationId\n };\n if (transformedSession.additionalCardBrands) response.additionalCardBrands = transformedSession.additionalCardBrands;\n return response;\n };\n const response = toResponse(event);\n resolve(response);\n (0, $c64965f72f06da5e$export$78907e7ba1b6c00e)($b7edf56a6b60e294$var$getIframeId(event.data?.type));\n clearTimeout(timeout);\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n });\n};\n\n\nconst $36674fed137cfc63$var$errorMessagesMap = {\n};\nconst $36674fed137cfc63$var$validationErrorMessagesMap = {\n \"The card was not supported by any card schemes\": \"3DS is not supported for the provided card\"\n};\nconst $36674fed137cfc63$var$isValidationApiError = (error)=>{\n return \"errors\" in error && error.errors !== undefined && typeof error.errors === \"object\" && error.errors !== null;\n};\nconst $36674fed137cfc63$export$89d83cc97c52a37 = (error)=>{\n return typeof error === \"object\" && error !== null && (\"title\" in error || \"status\" in error || \"detail\" in error);\n};\nconst $36674fed137cfc63$export$1e46c02a50c8708f = (apiError)=>{\n if ($36674fed137cfc63$var$isValidationApiError(apiError)) for (const errorKey of Object.keys(apiError.errors)){\n if ($36674fed137cfc63$var$validationErrorMessagesMap[errorKey]) throw new Error($36674fed137cfc63$var$validationErrorMessagesMap[errorKey]);\n }\n else if (apiError.status === 424 && apiError.error) {\n // handle 3DS service error case\n const errorParts = [];\n if (apiError.error.message) errorParts.push(apiError.error.message);\n if (apiError.error.details) errorParts.push(\"details: \" + apiError.error.details);\n const errorMessage = errorParts.length > 0 ? errorParts.join(\" - \") : apiError.title || \"An unknown 3DS service error occurred\";\n throw new Error(errorMessage);\n } else {\n if (apiError.title && $36674fed137cfc63$var$errorMessagesMap[apiError.title]) throw new Error($36674fed137cfc63$var$errorMessagesMap[apiError.title]);\n }\n // if no matching mapping is found, throw a generic error\n throw new Error(apiError.title || \"An unknown error occurred\");\n};\n\n\n\n/**\n * @deprecated This function is deprecated and will be removed in the next major version.\n */ const $2bc795de5a692819$var$submitMethodRequestRedirect = (threeDSMethodURL, threeDSServerTransID, methodNotificationURL)=>{\n const threeDSMethodDataBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)({\n threeDSServerTransID: threeDSServerTransID,\n threeDSMethodNotificationURL: `${methodNotificationURL}?mode=redirect`\n });\n const newWindow = window.open(\"\", \"threeDSMethodForm\");\n if (!newWindow) {\n console.error(\"Popup blocked or unable to open the window.\");\n return;\n }\n const form = (0, $c64965f72f06da5e$export$f681a8129d2e9d28)((0, $ede1e6694b13a411$export$3f521420530811cf).FORM_NAME, threeDSMethodURL, \"threeDSMethodForm\");\n form.appendChild((0, $c64965f72f06da5e$export$d80fffb1deb3b97e)((0, $ede1e6694b13a411$export$3f521420530811cf).INPUT_NAME, threeDSMethodDataBase64));\n document.body.appendChild(form);\n form.submit();\n // check periodically if method window is closed (it closes immediatelly on completion)\n const checkClosedInterval = window.setInterval(()=>{\n if (newWindow.closed) {\n clearInterval(checkClosedInterval);\n (0, $9e6eab7e85fe68ea$export$5e14cdade93d6f7b)({\n isCompleted: true,\n id: threeDSServerTransID,\n type: (0, $9e6eab7e85fe68ea$export$9130146a86a85749).METHOD\n });\n }\n }, 500);\n};\nconst $2bc795de5a692819$var$submitMethodRequest = (threeDSMethodURL, threeDSServerTransID, methodNotificationURL)=>{\n const threeDSMethodDataBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)({\n threeDSServerTransID: threeDSServerTransID,\n threeDSMethodNotificationURL: methodNotificationURL\n });\n const container = document.getElementById((0, $ede1e6694b13a411$export$3f521420530811cf).FRAME_CONTAINER_ID);\n const iframe = (0, $c64965f72f06da5e$export$eca25244f8f7df8e)(container, (0, $ede1e6694b13a411$export$3f521420530811cf).IFRAME_NAME, (0, $ede1e6694b13a411$export$3f521420530811cf).IFRAME_NAME, \"0\", \"0\");\n iframe.src = `${0, $78b3785cefa2a9d4$export$7cd62790311d5c9}/${0, $ede1e6694b13a411$export$16a30e6d25dd54ab}`;\n iframe.onload = ()=>{\n iframe.contentWindow?.postMessage({\n type: \"startMethod\",\n threeDSMethodURL: threeDSMethodURL,\n threeDSMethodData: threeDSMethodDataBase64\n }, \"*\");\n };\n};\nconst $2bc795de5a692819$var$makeSessionRequest = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode, challengeMode: challengeMode, correlationId: correlationId })=>{\n const providedParams = [\n pan,\n tokenId,\n tokenIntentId\n ].filter((param)=>param !== undefined);\n if (providedParams.length === 0) throw new Error(\"One of pan, tokenId, or tokenIntentId is required.\");\n if (providedParams.length > 1) throw new Error(\"Only one of pan, tokenId, or tokenIntentId should be provided.\");\n const sessionParamKey = pan ? \"pan\" : tokenId ? \"tokenId\" : \"tokenIntentId\";\n const sessionParamValue = pan || tokenId || tokenIntentId;\n const deviceInfo = (0, $12389938bc382e86$export$a5202107d3e3cdb0)();\n const response = await (0, $263638c749818df0$export$7d6f1c8842f9f527).client(\"POST\", `/sessions`, (0, $fa75e9b184a0a110$export$3561b44d041d13c)({\n [sessionParamKey]: sessionParamValue,\n device: \"browser\",\n deviceInfo: deviceInfo,\n webChallengeMode: challengeMode\n }), correlationId);\n if (!response.ok) {\n let json;\n try {\n json = await response.json();\n } catch {\n const msg = `Failed to parse error response. HTTP Status: ${response.status}`;\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(msg);\n throw new Error(msg);\n }\n if ((0, $36674fed137cfc63$export$89d83cc97c52a37)(json)) (0, $36674fed137cfc63$export$1e46c02a50c8708f)(json);\n else {\n const msg = `An unknown error occurred while creating session. Status: ${response.status}.`;\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(`${msg} Response: ${JSON.stringify(json, null, 2)}`);\n throw new Error(msg);\n }\n }\n const session = (0, $fa75e9b184a0a110$export$72d485cca95ce2e2)(await response.json());\n session.correlationId = response.headers?.get((0, $ede1e6694b13a411$export$e575008eba482a0)) || \"\";\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.info(`3DS session response received with ID ${session.id}`);\n if (session.methodUrl && !skipMethodRequest) {\n (0, $9e6eab7e85fe68ea$export$5e14cdade93d6f7b)({\n isCompleted: false,\n id: session.id,\n type: (0, $9e6eab7e85fe68ea$export$9130146a86a85749).START_METHOD_TIME_OUT\n });\n if (methodRequestMode === (0, $ede1e6694b13a411$export$909c260dfc8c4a).REDIRECT) $2bc795de5a692819$var$submitMethodRequestRedirect(session.methodUrl, session.id, session.methodNotificationUrl);\n else $2bc795de5a692819$var$submitMethodRequest(session.methodUrl, session.id, session.methodNotificationUrl);\n }\n return session;\n};\nconst $2bc795de5a692819$export$f7c62c73429afa28 = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = (0, $ede1e6694b13a411$export$909c260dfc8c4a).IFRAME, challengeMode: challengeMode = (0, $ede1e6694b13a411$export$909c260dfc8c4a).IFRAME, correlationId: correlationId = \"\" })=>{\n const session = await $2bc795de5a692819$var$makeSessionRequest({\n tokenId: tokenId,\n tokenIntentId: tokenIntentId,\n pan: pan,\n skipMethodRequest: skipMethodRequest,\n methodRequestMode: methodRequestMode,\n challengeMode: challengeMode,\n correlationId: correlationId\n }).catch((error)=>{\n return Promise.reject(error.message);\n });\n // skip message handling, no method request necessary\n if (!session.methodUrl || skipMethodRequest) {\n const response = {\n id: session.id,\n cardBrand: session.cardBrand\n };\n if (session.additionalCardBrands) response.additionalCardBrands = session.additionalCardBrands;\n return response;\n }\n return await (0, $b7edf56a6b60e294$export$c41ae42ecc348abb)(session);\n};\n\n\n\n\n\n\n\n\nconst $0db30e8bab82ecdb$export$8181f6b5c58f6044 = (timeout = 60000)=>{\n let timeoutId;\n return new Promise((resolve, reject)=>{\n const handleMessage = (event)=>{\n if ((0, $9e6eab7e85fe68ea$export$c1c631b5969e899b)(event.data)) {\n if (event.data.type === (0, $9e6eab7e85fe68ea$export$9130146a86a85749).ERROR) {\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(`Error occurred during challenge: ${event?.data?.details}`);\n reject(new Error(`An error occurred during challenge: ${event?.data?.details}`));\n (0, $c64965f72f06da5e$export$78907e7ba1b6c00e)([\n (0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME\n ]);\n clearTimeout(timeout);\n } else if (event.data.type === (0, $9e6eab7e85fe68ea$export$9130146a86a85749).CHALLENGE) {\n clearTimeout(timeoutId);\n window.removeEventListener(\"message\", handleMessage);\n const toResponse = (event)=>({\n id: event.data.id,\n isCompleted: event.data.isCompleted,\n authenticationStatus: event.data.authenticationStatus\n });\n const response = toResponse(event);\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.info(`${event.data.type} notification received for session: ${response.id}`);\n resolve(response);\n (0, $c64965f72f06da5e$export$78907e7ba1b6c00e)([\n (0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME\n ]);\n } else event.isTrusted;\n }\n };\n window.addEventListener(\"message\", handleMessage);\n timeoutId = setTimeout(()=>{\n window.removeEventListener(\"message\", handleMessage);\n reject(new Error(\"Timed out waiting for a challenge response. Please try again.\"));\n (0, $c64965f72f06da5e$export$78907e7ba1b6c00e)([\n (0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME\n ]);\n }, timeout);\n });\n};\n\n\n\n\n\n\nfunction $d6091d0740832a34$var$isAcsThreeDSChallengeRequest(obj) {\n const { messageType: messageType, messageVersion: messageVersion, threeDSServerTransID: threeDSServerTransID, acsTransID: acsTransID, challengeWindowSize: challengeWindowSize } = obj;\n return typeof obj === \"object\" && obj !== null && typeof messageType === \"string\" && typeof messageVersion === \"string\" && typeof threeDSServerTransID === \"string\" && typeof acsTransID === \"string\" && Object.values((0, $12389938bc382e86$export$f73e2cb993c10d36)).includes(challengeWindowSize);\n}\nconst $d6091d0740832a34$var$submitChallengeRequest = (acsURL, creq, containerId)=>{\n const container = document.getElementById(containerId ?? (0, $ede1e6694b13a411$export$9aef2de9a9febd46).FRAME_CONTAINER_ID);\n const windowSize = (0, $12389938bc382e86$export$d96f5f7405a82f1b)(creq.challengeWindowSize);\n const creqBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)(creq);\n const challengeIframeName = (0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME;\n const challengeIframe = (0, $c64965f72f06da5e$export$eca25244f8f7df8e)(container, challengeIframeName, challengeIframeName, windowSize[0], windowSize[1]);\n challengeIframe.src = `${0, $78b3785cefa2a9d4$export$7cd62790311d5c9}/${0, $ede1e6694b13a411$export$260aceedd9fe5f81}`;\n challengeIframe.onload = ()=>{\n challengeIframe.contentWindow?.postMessage({\n type: \"startChallenge\",\n acsURL: acsURL,\n creq: creqBase64\n }, \"*\");\n };\n};\n/**\n * @deprecated This method is deprecated and will be removed in the next major version\n */ const $d6091d0740832a34$var$submitChallengeRequestRedirect = (acsURL, creq)=>{\n const windowSize = (0, $12389938bc382e86$export$d96f5f7405a82f1b)(creq.challengeWindowSize);\n const newWindow = window.open(\"\", \"threeDSChallenge\", `width=${windowSize[0]},height=${windowSize[1]}`);\n if (!newWindow) throw new Error(\"Popup blocked or unable to open the window.\");\n const creqBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)(creq);\n const form = (0, $c64965f72f06da5e$export$f681a8129d2e9d28)((0, $ede1e6694b13a411$export$9aef2de9a9febd46).FORM_NAME, acsURL, \"threeDSChallenge\");\n const creqInput = (0, $c64965f72f06da5e$export$d80fffb1deb3b97e)(\"creq\", creqBase64);\n form.appendChild(creqInput);\n document.body.appendChild(form);\n form.submit();\n};\nconst $d6091d0740832a34$var$makeChallengeRequest = ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, mode: mode, containerId: containerId })=>{\n if (!sessionId) throw new Error(\"Session ID is required\");\n const creq = {\n messageType: \"CReq\",\n messageVersion: threeDSVersion,\n threeDSServerTransID: sessionId,\n acsTransID: acsTransactionId,\n challengeWindowSize: windowSize ?? (0, $12389938bc382e86$export$f73e2cb993c10d36).THREE\n };\n if ($d6091d0740832a34$var$isAcsThreeDSChallengeRequest(creq)) {\n if (mode === (0, $ede1e6694b13a411$export$909c260dfc8c4a).REDIRECT) $d6091d0740832a34$var$submitChallengeRequestRedirect(acsChallengeUrl, creq);\n else $d6091d0740832a34$var$submitChallengeRequest(acsChallengeUrl, creq, containerId);\n } else {\n const err = `Invalid challenge request payload for session: ${sessionId}`;\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(err);\n return Promise.reject(new Error(err));\n }\n return Promise.resolve({\n id: sessionId\n });\n};\nconst $d6091d0740832a34$export$452d4d807a279e0d = async ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, mode: mode = \"iframe\", timeout: timeout = 60000, containerId: containerId })=>{\n await $d6091d0740832a34$var$makeChallengeRequest({\n sessionId: sessionId,\n acsTransactionId: acsTransactionId,\n acsChallengeUrl: acsChallengeUrl,\n threeDSVersion: threeDSVersion,\n windowSize: windowSize,\n mode: mode,\n containerId: containerId\n }).catch((error)=>{\n return Promise.reject(error.message);\n });\n return (0, $0db30e8bab82ecdb$export$8181f6b5c58f6044)(timeout);\n};\n\n\n\n\n\nlet $78b3785cefa2a9d4$export$7cd62790311d5c9 = (0, $ede1e6694b13a411$export$c823725bfc2e0c49);\nconst $78b3785cefa2a9d4$export$30207c6d2c13b02b = (()=>{\n return (apiKey, configOptions)=>{\n try {\n (0, $9baa5c7531c09ef3$export$bfcc8eb13073c803)({\n disableTelemetry: configOptions?.disableTelemetry ?? false\n });\n (0, $c64965f72f06da5e$export$b824392d62597b74)((0, $ede1e6694b13a411$export$3f521420530811cf).FRAME_CONTAINER_ID, true);\n (0, $c64965f72f06da5e$export$b824392d62597b74)((0, $ede1e6694b13a411$export$9aef2de9a9febd46).FRAME_CONTAINER_ID);\n } catch (error) {\n (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(\"Unable to create iframe container\", error);\n }\n $78b3785cefa2a9d4$export$7cd62790311d5c9 = configOptions?.sdkBaseUrl ?? (0, $ede1e6694b13a411$export$c823725bfc2e0c49);\n (0, $263638c749818df0$export$7d6f1c8842f9f527).init(apiKey, configOptions?.apiBaseUrl);\n return {\n createSession: $2bc795de5a692819$export$f7c62c73429afa28,\n startChallenge: $d6091d0740832a34$export$452d4d807a279e0d\n };\n };\n})();\nwindow.BasisTheory3ds = $78b3785cefa2a9d4$export$30207c6d2c13b02b;\n\n\nexport {$78b3785cefa2a9d4$export$7cd62790311d5c9 as sdkBaseUrl, $78b3785cefa2a9d4$export$30207c6d2c13b02b as BasisTheory3ds};\n", "/**\r\n * Standalone Adapter for TagadaPay SDK v2\r\n *\r\n * Provides a vanilla JS interface for using the SDK without a framework.\r\n * Suitable for standard HTML/JS sites or other frameworks (Svelte, Angular, etc).\r\n *\r\n * This layer is a very thin wrapper over the Core SDK.\r\n */\r\n\r\nimport { TagadaClient, TagadaClientConfig, TagadaState } from '../core/client';\r\nimport { ApiClient } from '../core/resources/apiClient';\r\nimport { CheckoutResource } from '../core/resources/checkout';\r\nimport { getAssignedStepConfig, getAssignedPaymentFlowId } from '../core/funnelClient';\r\nimport { detectEnvironment } from '../core/config/environment';\r\nimport { getBasisTheoryApiKey as _getBtApiKey, getBasisTheoryTenantId as _getBtTenantId } from '../../react/config/payment';\r\n\r\n// ============================================================================\r\n// AUTO SCRIPT INJECTOR\r\n// ============================================================================\r\n// Automatically injects and executes scripts from stepConfig when SDK loads\r\n// This runs for all standalone SDK users (not just React apps)\r\n\r\ninterface StepConfigScript {\r\n name: string;\r\n enabled: boolean;\r\n content: string;\r\n position?: 'head-start' | 'head-end' | 'body-start' | 'body-end';\r\n}\r\n\r\n/**\r\n * Parse step config from window variable or meta tag\r\n */\r\nfunction parseStepConfigScripts(): StepConfigScript[] {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return [];\r\n }\r\n\r\n // Try to get stepConfig (uses same logic as getAssignedStepConfig)\r\n const stepConfig = getAssignedStepConfig();\r\n if (stepConfig?.scripts) {\r\n return stepConfig.scripts.filter(s => s.enabled);\r\n }\r\n\r\n return [];\r\n}\r\n\r\n/**\r\n * Inject a script at the specified position\r\n */\r\nfunction injectScript(script: StepConfigScript, index: number): void {\r\n const position = script.position || 'body-end';\r\n const scriptId = `tagada-stepconfig-script-${index}`;\r\n\r\n // Skip if already injected\r\n if (document.getElementById(scriptId)) {\r\n return;\r\n }\r\n\r\n // Extract script content (remove <script> tags if present)\r\n let scriptBody = script.content.trim();\r\n const scriptTagMatch = scriptBody.match(/^<script[^>]*>([\\s\\S]*)<\\/script>$/i);\r\n if (scriptTagMatch) {\r\n scriptBody = scriptTagMatch[1].trim();\r\n }\r\n\r\n if (!scriptBody) return;\r\n\r\n // Wrap script content with error handling\r\n // NOTE: Use string concatenation instead of template literals to avoid breaking\r\n // when scriptBody contains backticks or ${...} expressions\r\n const wrappedScript = '(function() {\\n' +\r\n ' try {\\n' +\r\n ' // Script: ' + script.name + '\\n' +\r\n scriptBody + '\\n' +\r\n ' } catch (error) {\\n' +\r\n ' console.error(\"[TagadaPay] StepConfig script error:\", error);\\n' +\r\n ' }\\n' +\r\n '})();';\r\n\r\n // Create script element\r\n const scriptElement = document.createElement('script');\r\n scriptElement.id = scriptId;\r\n scriptElement.setAttribute('data-tagada-stepconfig-script', 'true');\r\n scriptElement.setAttribute('data-script-name', script.name);\r\n scriptElement.textContent = wrappedScript;\r\n\r\n // Inject at the correct position\r\n switch (position) {\r\n case 'head-start':\r\n if (document.head.firstChild) {\r\n document.head.insertBefore(scriptElement, document.head.firstChild);\r\n } else {\r\n document.head.appendChild(scriptElement);\r\n }\r\n break;\r\n case 'head-end':\r\n document.head.appendChild(scriptElement);\r\n break;\r\n case 'body-start':\r\n if (document.body.firstChild) {\r\n document.body.insertBefore(scriptElement, document.body.firstChild);\r\n } else {\r\n document.body.appendChild(scriptElement);\r\n }\r\n break;\r\n case 'body-end':\r\n default:\r\n document.body.appendChild(scriptElement);\r\n break;\r\n }\r\n}\r\n\r\n/**\r\n * Auto-inject all stepConfig scripts\r\n * Called automatically when SDK loads\r\n * Can also be called manually if needed (e.g., after dynamic config update)\r\n */\r\nexport function injectStepConfigScripts(): void {\r\n const scripts = parseStepConfigScripts();\r\n if (scripts.length === 0) return;\r\n\r\n scripts.forEach((script, index) => {\r\n injectScript(script, index);\r\n });\r\n}\r\n\r\n// Auto-run script injection when SDK loads\r\n// Uses requestIdleCallback or setTimeout fallback for non-blocking execution\r\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\r\n const runInjection = () => {\r\n // Wait for body to be available\r\n if (document.body) {\r\n injectStepConfigScripts();\r\n } else {\r\n // Body not ready, wait for DOMContentLoaded\r\n document.addEventListener('DOMContentLoaded', injectStepConfigScripts, { once: true });\r\n }\r\n };\r\n\r\n // Run after current script execution completes\r\n if ('requestIdleCallback' in window) {\r\n (window as any).requestIdleCallback(runInjection, { timeout: 100 });\r\n } else {\r\n setTimeout(runInjection, 0);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a Tagada Client instance.\r\n * Features (like funnel) can be toggled via the config.\r\n */\r\nexport function createTagadaClient(config: TagadaClientConfig = {}): TagadaClient {\r\n return new TagadaClient(config);\r\n}\r\n\r\n// Re-export Core Classes\r\nexport { TagadaClient, ApiClient, CheckoutResource };\r\n\r\n// Re-export Resource Classes (for standalone resolvers / builders)\r\nexport { ShippingRatesResource } from '../core/resources/shippingRates';\r\nexport { PaymentsResource } from '../core/resources/payments';\r\nexport { OrdersResource } from '../core/resources/orders';\r\nexport { ExpressPaymentMethodsResource } from '../core/resources/expressPaymentMethods';\r\nexport type { PaymentMethod as ExpressPaymentMethod } from '../core/resources/expressPaymentMethods';\r\nexport type { ShippingRate, ShippingRatesResponse, ShippingRatesPreviewParams } from '../core/resources/shippingRates';\r\nexport type {\r\n Payment,\r\n PaymentResponse,\r\n CardPaymentMethod,\r\n BasisTheoryInstance,\r\n GooglePayToken,\r\n ApplePayToken,\r\n PaymentInstrumentInput,\r\n PaymentInstrumentResponse,\r\n PaymentInstrumentCustomerResponse,\r\n} from '../core/resources/payments';\r\n\r\n// Re-export Store Config (for standalone resolvers / builders)\r\nexport { StoreConfigResource } from '../core/resources/storeConfig';\r\nexport type { StoreConfig } from '../core/resources/storeConfig';\r\n\r\n// Re-export 3DS Resource (for standalone resolvers / builders)\r\nexport { ThreedsResource } from '../core/resources/threeds';\r\n\r\n// Re-export ISO Data Core (for standalone address form / resolvers)\r\nexport { ISODataCore } from '../core/isoData';\r\nexport type { ISOCountry, ISORegion } from '../core/isoData';\r\n\r\n// Re-export Google Autocomplete Core (for standalone address form)\r\nexport { GoogleAutocompleteCore } from '../core/googleAutocomplete';\r\nexport type { GooglePrediction, GooglePlaceDetails, AddressComponents } from '../core/googleAutocomplete';\r\n\r\n// Re-export Error Types\r\nexport {\r\n TagadaError,\r\n TagadaApiError,\r\n TagadaNetworkError,\r\n TagadaAuthError,\r\n TagadaValidationError,\r\n TagadaCircuitBreakerError,\r\n TagadaErrorCode,\r\n} from '../core/errors';\r\nexport type { TagadaErrorOptions, TagadaErrorCodeValue } from '../core/errors';\r\n\r\n// Re-export Types\r\nexport type { TagadaClientConfig, TagadaState };\r\nexport { FunnelActionType } from '../core/resources/funnel';\r\nexport type { FunnelAction, FunnelNavigationResult, SimpleFunnelContext } from '../core/resources/funnel';\r\n\r\n// Re-export Checkout Types (for external builders)\r\nexport type {\r\n CheckoutData,\r\n CheckoutSession,\r\n CheckoutSummary,\r\n CheckoutSummaryItem,\r\n CheckoutLineItem,\r\n CheckoutInitParams,\r\n Promotion,\r\n} from '../core/resources/checkout';\r\n\r\n// Re-export Core Types (domain models)\r\nexport type {\r\n Order,\r\n OrderItem,\r\n OrderAddress,\r\n OrderSummary,\r\n OrderWithRelations,\r\n PaymentSummary,\r\n PromotionSummary,\r\n Subscription,\r\n DeviceInfo,\r\n PromotionCode,\r\n Customer,\r\n Store,\r\n PickupPoint,\r\n} from '../core/types';\r\n\r\n// Re-export Utilities (includes formatMoney from core/utils/currency)\r\nexport * from '../core/utils';\r\n\r\n// Re-export path remapping utilities (for SPA routing)\r\nexport {\r\n matchRoute,\r\n getInternalPath,\r\n isPathRemapped,\r\n getPathInfo,\r\n} from '../core/pathRemapping';\r\n\r\n// Re-export Step Config / Payment Flow helpers (for standalone resolvers / builders)\r\nexport { getAssignedPaymentFlowId };\r\nexport { getAssignedStepConfig } from '../core/funnelClient';\r\nexport type { RuntimeStepConfig } from '../core/funnelClient';\r\n\r\n// Re-export Payment Service (standalone payment processing \u2014 no React)\r\nexport { PaymentService } from './payment-service';\r\nexport type {\r\n PaymentServiceConfig,\r\n PaymentResult,\r\n PaymentCallbacks,\r\n CardData,\r\n ApmData,\r\n} from './payment-service';\r\n\r\n/**\r\n * Get BasisTheory public API key based on hostname detection.\r\n * Delegates to the centralized isProductionBasisTheory() logic.\r\n */\r\nexport function getBasisTheoryApiKey(): string {\r\n return _getBtApiKey();\r\n}\r\n\r\n/**\r\n * Get BasisTheory tenant ID based on hostname detection.\r\n */\r\nexport function getBasisTheoryTenantId(): string {\r\n return _getBtTenantId();\r\n}\r\n\r\n// ============================================================================\r\n// EXTERNAL PAGE TRACKER\r\n// ============================================================================\r\n// Lightweight tracker for external pages not hosted on Tagadapay\r\n// NOTE: This is also available as a standalone CDN bundle (external-tracker.min.js)\r\nexport {\r\n TagadaTracker,\r\n TagadaExternalTracker,\r\n} from './external-tracker';\r\n\r\nexport type {\r\n TagadaTrackerConfig,\r\n ExternalTrackerSession,\r\n NavigateOptions,\r\n} from './external-tracker';\r\n", "import { detectEnvironment, getEnvironmentConfig } from './config/environment';\r\nimport { FunnelClient } from './funnelClient';\r\nimport { ApiClient } from './resources/apiClient';\r\nimport {\r\n AnonymousTokenResponse,\r\n ApiConfig,\r\n AuthState,\r\n Currency,\r\n Customer,\r\n DeepPartial,\r\n Environment,\r\n EnvironmentConfig,\r\n Locale,\r\n Session,\r\n SessionInitResponse,\r\n Store,\r\n} from './types';\r\nimport { collectDeviceInfo, getBrowserLocale, getUrlParams } from './utils/deviceInfo';\r\nimport { EventBus } from './utils/eventBus';\r\nimport { EventDispatcher } from './utils/eventDispatcher';\r\nimport { decodeJWTClient, isTokenExpired } from './utils/jwtDecoder';\r\nimport { loadPluginConfig, PluginConfig, RawPluginConfig } from './utils/pluginConfig';\r\nimport { handlePreviewMode, isDraftMode, setDraftMode } from './utils/previewMode';\r\nimport { getClientToken, setClientToken } from './utils/tokenStorage';\r\nimport { shouldResolveAuthCode, resolveAuthHandoff } from './utils/authHandoff';\r\n\r\n\r\n\r\nexport interface TagadaClientConfig {\r\n environment?: Environment;\r\n customApiConfig?: DeepPartial<EnvironmentConfig>;\r\n debugMode?: boolean;\r\n localConfig?: string;\r\n rawPluginConfig?: RawPluginConfig;\r\n blockUntilSessionReady?: boolean;\r\n /**\r\n * Optional feature flags to enable/disable subsystems.\r\n * By default all features are enabled.\r\n */\r\n features?: {\r\n /**\r\n * Funnel session + navigation layer.\r\n * Set to false to completely disable funnel behaviour.\r\n * Pass object to configure behavior.\r\n */\r\n funnel?: boolean | {\r\n autoRedirect?: boolean;\r\n /** Skip automatic funnel initialization (use when caller handles init explicitly) */\r\n skipAutoInit?: boolean;\r\n };\r\n };\r\n}\r\n\r\nexport interface TagadaState {\r\n auth: AuthState;\r\n session: Session | null;\r\n customer: Customer | null;\r\n locale: Locale;\r\n currency: Currency;\r\n store: Store | null;\r\n environment: EnvironmentConfig;\r\n isLoading: boolean;\r\n isInitialized: boolean;\r\n isSessionInitialized: boolean;\r\n pluginConfig: PluginConfig;\r\n pluginConfigLoading: boolean;\r\n debugMode: boolean;\r\n token: string | null;\r\n}\r\n\r\nexport class TagadaClient {\r\n public apiClient: ApiClient;\r\n public state: TagadaState;\r\n /**\r\n * Optional funnel client.\r\n * Exposed so higher-level SDKs (React, Standalone, Vue) can reuse the same\r\n * low-level logic without instantiating a second client.\r\n */\r\n public funnel?: FunnelClient;\r\n /**\r\n * Event bus for domain events and coordination\r\n */\r\n public bus = new EventBus();\r\n\r\n private eventDispatcher = new EventDispatcher<TagadaState>();\r\n private tokenPromise: Promise<string | null> | null = null;\r\n private tokenResolver: ((token: string | null) => void) | null = null;\r\n private boundHandleStorageChange: () => void;\r\n private boundHandlePageshow: (event: PageTransitionEvent) => void;\r\n\r\n // Config\r\n private readonly config: TagadaClientConfig;\r\n private instanceId: string;\r\n\r\n // Track initialization state to prevent infinite loops\r\n private isInitializingSession = false;\r\n private lastSessionInitError: Error | null = null;\r\n private sessionInitRetryCount = 0;\r\n private readonly MAX_SESSION_INIT_RETRIES = 3;\r\n\r\n constructor(config: TagadaClientConfig = {}) {\r\n this.config = config;\r\n this.instanceId = Math.random().toString(36).substr(2, 9);\r\n this.boundHandleStorageChange = this.handleStorageChange.bind(this);\r\n this.boundHandlePageshow = (event: PageTransitionEvent) => {\r\n if (event.persisted) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Page restored from BFcache (back button), re-initializing funnel...`);\r\n }\r\n\r\n // If we have an active session and store, we only need to re-initialize the funnel\r\n // This ensures tracking is correct and the session is fresh on the backend\r\n if (this.funnel && this.state.session && this.state.store) {\r\n this.funnel.resetInitialization();\r\n\r\n const accountId = this.getAccountId();\r\n const urlParams = new URLSearchParams(typeof window !== 'undefined' ? window.location.search : '');\r\n const funnelId = urlParams.get('funnelId') || undefined;\r\n\r\n this.funnel.autoInitialize(\r\n { customerId: this.state.session.customerId, sessionId: this.state.session.sessionId },\r\n { id: this.state.store.id, accountId },\r\n funnelId,\r\n ).catch((err) => {\r\n console.error('[TagadaClient] Funnel re-initialization failed:', err);\r\n });\r\n } else {\r\n // If state is missing, perform a full initialization\r\n this.sessionInitRetryCount = 0;\r\n this.initialize();\r\n }\r\n }\r\n };\r\n\r\n console.log(`[TagadaClient ${this.instanceId}] Initializing...`);\r\n console.log(`[TagadaClient ${this.instanceId}] Config:`, {\r\n debugMode: config.debugMode,\r\n hasRawPluginConfig: !!config.rawPluginConfig,\r\n rawPluginConfig: config.rawPluginConfig,\r\n features: config.features,\r\n });\r\n\r\n // Handle preview mode FIRST - clears state if needed\r\n // This ensures clean state when CRM previews pages\r\n const previewModeActive = handlePreviewMode(this.config.debugMode);\r\n if (previewModeActive && this.config.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Preview mode active - state cleared`);\r\n }\r\n\r\n // Initialize default state\r\n const env = this.resolveEnvironment();\r\n let envConfig = getEnvironmentConfig(env);\r\n\r\n // Apply custom API config if provided\r\n if (config.customApiConfig) {\r\n envConfig = {\r\n ...envConfig,\r\n ...config.customApiConfig,\r\n apiConfig: {\r\n ...envConfig.apiConfig,\r\n ...config.customApiConfig.apiConfig,\r\n } as ApiConfig,\r\n };\r\n if (this.config.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Applied custom API config:`, envConfig.apiConfig.baseUrl);\r\n }\r\n }\r\n\r\n this.state = {\r\n auth: {\r\n isAuthenticated: false,\r\n isLoading: false,\r\n customer: null,\r\n session: null,\r\n },\r\n session: null,\r\n customer: null,\r\n locale: {\r\n locale: 'en-US',\r\n language: 'en',\r\n region: 'US',\r\n messages: {},\r\n },\r\n currency: {\r\n code: 'USD',\r\n symbol: '$',\r\n name: 'US Dollar',\r\n },\r\n store: null,\r\n environment: envConfig,\r\n isLoading: true,\r\n isInitialized: false,\r\n isSessionInitialized: false,\r\n pluginConfig: { basePath: '/', config: {} },\r\n pluginConfigLoading: true, // Always true - loadPluginConfig will process rawPluginConfig\r\n debugMode: config.debugMode ?? env !== 'production',\r\n token: null,\r\n };\r\n\r\n console.log(`[TagadaClient ${this.instanceId}] Initial state:`, {\r\n pluginConfigLoading: this.state.pluginConfigLoading,\r\n hasRawPluginConfig: !!config.rawPluginConfig,\r\n });\r\n\r\n // Initialize API Client\r\n this.apiClient = new ApiClient({\r\n baseURL: envConfig.apiConfig.baseUrl,\r\n });\r\n\r\n // Initialize optional funnel client (feature-flagged)\r\n const funnelFeature = config.features?.funnel;\r\n const funnelEnabled = funnelFeature !== false;\r\n\r\n if (funnelEnabled) {\r\n const funnelConfig = typeof funnelFeature === 'object' ? funnelFeature : {};\r\n\r\n this.funnel = new FunnelClient({\r\n apiClient: this.apiClient,\r\n debugMode: this.state.debugMode,\r\n pluginConfig: this.state.pluginConfig,\r\n environment: this.state.environment,\r\n autoRedirect: funnelConfig.autoRedirect,\r\n // Pass funnelId and stepId from rawPluginConfig to enable config-based initialization\r\n funnelId: config.rawPluginConfig?.funnelId,\r\n stepId: config.rawPluginConfig?.stepId,\r\n });\r\n }\r\n\r\n // Setup token waiting mechanism\r\n this.apiClient.setTokenProvider(this.waitForToken.bind(this));\r\n\r\n // Listen for storage changes (cross-tab sync)\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('storage', this.boundHandleStorageChange);\r\n window.addEventListener('pageshow', this.boundHandlePageshow);\r\n }\r\n\r\n // Setup config hot-reload listener (for live config editing)\r\n this.setupConfigHotReload();\r\n\r\n // Start initialization\r\n this.initialize();\r\n }\r\n\r\n /**\r\n * Cleanup client resources\r\n */\r\n destroy() {\r\n if (typeof window !== 'undefined') {\r\n window.removeEventListener('storage', this.boundHandleStorageChange);\r\n window.removeEventListener('pageshow', this.boundHandlePageshow);\r\n }\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Destroyed`);\r\n }\r\n this.eventDispatcher.clear();\r\n this.bus.clear();\r\n }\r\n\r\n /**\r\n * Handle storage changes (e.g. token update in another tab)\r\n */\r\n private handleStorageChange() {\r\n const storedToken = getClientToken();\r\n\r\n // Avoid unnecessary re-initialization if token hasn't changed\r\n if (storedToken === this.state.token) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Token unchanged (ignoring event)`);\r\n }\r\n return;\r\n }\r\n\r\n // Prevent infinite loop: Don't re-initialize if we're currently initializing\r\n if (this.isInitializingSession) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Session initialization in progress, skipping storage change`);\r\n }\r\n return;\r\n }\r\n\r\n // Prevent infinite loop: Don't retry if we've hit max retries\r\n if (this.sessionInitRetryCount >= this.MAX_SESSION_INIT_RETRIES && this.lastSessionInitError) {\r\n if (this.state.debugMode) {\r\n console.error(`[TagadaClient ${this.instanceId}] Max session init retries reached, giving up`, this.lastSessionInitError);\r\n }\r\n return;\r\n }\r\n\r\n // Re-run initialization when token may have changed\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Storage changed, re-initializing token...`);\r\n }\r\n this.initializeToken();\r\n }\r\n\r\n /**\r\n * Subscribe to state changes\r\n */\r\n subscribe(listener: (state: TagadaState) => void): () => void {\r\n return this.eventDispatcher.subscribe(listener);\r\n }\r\n\r\n /**\r\n * Get current state\r\n */\r\n getState(): TagadaState {\r\n return this.state;\r\n }\r\n\r\n /**\r\n * Update state and notify listeners\r\n */\r\n private updateState(updates: Partial<TagadaState>) {\r\n this.state = { ...this.state, ...updates };\r\n this.eventDispatcher.notify(this.state);\r\n }\r\n\r\n /**\r\n * Resolve environment\r\n */\r\n private resolveEnvironment(): Environment {\r\n if (this.config.environment) return this.config.environment;\r\n return detectEnvironment();\r\n }\r\n\r\n /**\r\n * Main initialization flow\r\n */\r\n private async initialize() {\r\n try {\r\n // 1. Load Plugin Config\r\n await this.initializePluginConfig();\r\n\r\n // 2. Initialize Token (Background or Blocking based on config)\r\n if (this.state.pluginConfig.storeId) {\r\n await this.initializeToken();\r\n } else {\r\n console.warn('[TagadaClient] No store ID found in plugin config. Skipping token initialization.');\r\n this.updateState({ isLoading: false, isInitialized: true });\r\n }\r\n } catch (error) {\r\n console.error('[TagadaClient] Initialization failed:', error);\r\n this.updateState({ isLoading: false, isInitialized: true });\r\n }\r\n }\r\n\r\n /**\r\n * Load plugin configuration\r\n */\r\n private async initializePluginConfig() {\r\n console.log(`[TagadaClient ${this.instanceId}] initializePluginConfig called`, {\r\n pluginConfigLoading: this.state.pluginConfigLoading,\r\n hasRawPluginConfig: !!this.config.rawPluginConfig,\r\n });\r\n\r\n if (!this.state.pluginConfigLoading) {\r\n console.log(`[TagadaClient ${this.instanceId}] Plugin config already loading or loaded, skipping...`);\r\n return;\r\n }\r\n\r\n try {\r\n const configVariant = this.config.localConfig || 'default';\r\n console.log(`[TagadaClient ${this.instanceId}] Loading plugin config with variant: ${configVariant}`);\r\n const config = await loadPluginConfig(configVariant, this.config.rawPluginConfig);\r\n\r\n console.log(`[TagadaClient ${this.instanceId}] Plugin config loaded:`, config);\r\n\r\n this.updateState({\r\n pluginConfig: config,\r\n pluginConfigLoading: false,\r\n });\r\n\r\n // Keep funnel client in sync with latest plugin config / environment\r\n if (this.funnel) {\r\n this.funnel.setConfig({\r\n pluginConfig: config,\r\n environment: this.state.environment,\r\n });\r\n }\r\n } catch (error) {\r\n console.error('[TagadaClient] Failed to load plugin config:', error);\r\n this.updateState({\r\n pluginConfig: { basePath: '/', config: {} },\r\n pluginConfigLoading: false,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Initialize token and session\r\n */\r\n private async initializeToken() {\r\n // \uD83D\uDD10 PRIORITY 1: Check for authCode (cross-domain handoff)\r\n // This ALWAYS takes precedence over existing tokens\r\n if (shouldResolveAuthCode()) {\r\n const storeId = this.state.pluginConfig.storeId;\r\n if (!storeId) {\r\n console.error('[TagadaClient] Cannot resolve authCode: storeId not found in config');\r\n return this.fallbackToNormalFlow();\r\n }\r\n\r\n console.log(`[TagadaClient ${this.instanceId}] \uD83D\uDD10 Cross-domain auth detected, resolving...`);\r\n\r\n try {\r\n const authCode = new URLSearchParams(window.location.search).get('authCode');\r\n if (!authCode) {\r\n return this.fallbackToNormalFlow();\r\n }\r\n\r\n // Resolve the handoff\r\n const handoffData = await resolveAuthHandoff(\r\n authCode,\r\n storeId,\r\n this.state.environment.apiConfig.baseUrl,\r\n this.state.debugMode\r\n );\r\n\r\n console.log(`[TagadaClient ${this.instanceId}] \u2705 Auth handoff resolved:`, {\r\n customerId: handoffData.customer.id,\r\n role: handoffData.customer.role,\r\n hasContext: Object.keys(handoffData.context).length > 0,\r\n });\r\n\r\n // Set the new token (already stored by resolveAuthHandoff)\r\n this.setToken(handoffData.token);\r\n\r\n // Decode session from token\r\n const decodedSession = decodeJWTClient(handoffData.token);\r\n if (decodedSession) {\r\n this.updateState({ session: decodedSession });\r\n await this.initializeSession(decodedSession);\r\n\r\n // If context has funnelSessionId, restore it\r\n if (handoffData.context?.funnelSessionId && this.funnel) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Restoring funnel session from handoff context:`, handoffData.context.funnelSessionId);\r\n }\r\n // The funnel client will pick this up during auto-initialization\r\n }\r\n } else {\r\n console.error('[TagadaClient] Failed to decode token from handoff');\r\n this.updateState({ isInitialized: true, isLoading: false });\r\n }\r\n\r\n return; // \u2705 Auth handoff resolved successfully, exit early\r\n } catch (error) {\r\n console.error(`[TagadaClient ${this.instanceId}] \u274C Auth handoff failed, falling back to normal flow:`, error);\r\n // Fall through to normal initialization\r\n }\r\n }\r\n\r\n // Continue with normal flow if no authCode or resolution failed\r\n await this.fallbackToNormalFlow();\r\n }\r\n\r\n /**\r\n * Normal token initialization flow (no cross-domain handoff)\r\n */\r\n private async fallbackToNormalFlow() {\r\n // \uD83D\uDD12 CRITICAL: Read URL token FIRST before any async operations\r\n // This prevents race conditions where anonymous token creation overwrites URL token\r\n const urlParams = new URLSearchParams(typeof window !== 'undefined' ? window.location.search : '');\r\n const queryToken = urlParams.get('token');\r\n\r\n // If URL has token, set it IMMEDIATELY to prevent any race condition\r\n if (queryToken) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] \uD83D\uDD12 URL token detected, setting immediately to prevent race condition`);\r\n }\r\n // Set token on API client immediately\r\n this.apiClient.updateToken(queryToken);\r\n // Also persist to localStorage\r\n setClientToken(queryToken);\r\n }\r\n\r\n // Now check storage (which should have the URL token if we just set it)\r\n const existingToken = getClientToken();\r\n\r\n console.log(`[TagadaClient ${this.instanceId}] Initializing token (normal flow)...`, {\r\n hasExistingToken: !!existingToken,\r\n hasQueryToken: !!queryToken,\r\n storeId: this.state.pluginConfig.storeId,\r\n });\r\n\r\n let tokenToUse: string | null = null;\r\n let shouldPersist = false;\r\n\r\n if (queryToken) {\r\n tokenToUse = queryToken;\r\n shouldPersist = true;\r\n } else if (existingToken && !isTokenExpired(existingToken)) {\r\n tokenToUse = existingToken;\r\n }\r\n\r\n if (tokenToUse) {\r\n this.setToken(tokenToUse);\r\n\r\n // Persist token if it came from query (updates localStorage and fires event)\r\n // We do this AFTER setToken so state is updated and handleStorageChange sees match\r\n if (shouldPersist) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Persisting query token to storage...`);\r\n }\r\n setClientToken(tokenToUse);\r\n }\r\n\r\n const decodedSession = decodeJWTClient(tokenToUse);\r\n if (decodedSession) {\r\n this.updateState({ session: decodedSession });\r\n await this.initializeSession(decodedSession);\r\n } else {\r\n console.error('[TagadaClient] Failed to decode token');\r\n this.updateState({ isInitialized: true, isLoading: false });\r\n }\r\n } else {\r\n // Create anonymous token\r\n const storeId = this.state.pluginConfig.storeId;\r\n console.log(`[TagadaClient ${this.instanceId}] No existing token, creating anonymous token...`, {\r\n hasStoreId: !!storeId,\r\n storeId,\r\n });\r\n if (storeId) {\r\n await this.createAnonymousToken(storeId);\r\n } else {\r\n console.warn(`[TagadaClient ${this.instanceId}] No storeId in plugin config, skipping anonymous token creation`);\r\n this.updateState({ isInitialized: true, isLoading: false });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set token and resolve waiting requests\r\n */\r\n private setToken(token: string | null) {\r\n this.apiClient.updateToken(token);\r\n this.updateState({ token });\r\n\r\n // Notify waiting requests\r\n if (this.tokenResolver) {\r\n this.tokenResolver(token);\r\n this.tokenPromise = null;\r\n this.tokenResolver = null;\r\n } else {\r\n // If we set a token but no one was waiting, ensure future requests don't wait unnecessarily\r\n // Actually, if we have a token, the provider won't be called by ApiClient logic if we handle it right.\r\n // But to be safe, if we set a token, we can pre-resolve the promise if it exists.\r\n // Wait, if tokenPromise exists, tokenResolver must exist.\r\n }\r\n }\r\n\r\n /**\r\n * Wait for token to be available\r\n */\r\n private waitForToken(): Promise<string | null> {\r\n if (this.apiClient.getCurrentToken()) {\r\n return Promise.resolve(this.apiClient.getCurrentToken());\r\n }\r\n\r\n if (!this.tokenPromise) {\r\n this.tokenPromise = new Promise<string | null>((resolve) => {\r\n this.tokenResolver = resolve;\r\n });\r\n }\r\n\r\n return this.tokenPromise;\r\n }\r\n\r\n /**\r\n * Create anonymous token\r\n */\r\n async createAnonymousToken(storeId: string) {\r\n // \uD83D\uDD12 CRITICAL: Never create anonymous token if URL has a token\r\n // This prevents race conditions during forceReset\r\n if (typeof window !== 'undefined') {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const urlToken = urlParams.get('token');\r\n if (urlToken) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] \uD83D\uDD12 URL has token, skipping anonymous token creation`);\r\n }\r\n // Use the URL token instead\r\n this.setToken(urlToken);\r\n setClientToken(urlToken);\r\n const decodedSession = decodeJWTClient(urlToken);\r\n if (decodedSession) {\r\n this.updateState({ session: decodedSession });\r\n await this.initializeSession(decodedSession);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n // Prevent concurrent anonymous token creation\r\n if (this.isInitializingSession) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Session initialization in progress, skipping anonymous token creation`);\r\n }\r\n return;\r\n }\r\n\r\n try {\r\n // \uD83C\uDFAF Check draft mode from URL, localStorage, or cookie\r\n const draft = isDraftMode();\r\n\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Creating anonymous token for store:', storeId, { draft });\r\n }\r\n\r\n // We use fetch directly or ApiClient with skipAuth to avoid waiting for itself\r\n const response = await this.apiClient.post<AnonymousTokenResponse>(\r\n '/api/v1/cms/session/anonymous',\r\n {\r\n storeId,\r\n role: 'anonymous',\r\n draft, // \uD83C\uDFAF Pass draft mode to anonymous login\r\n },\r\n { skipAuth: true }\r\n );\r\n\r\n this.setToken(response.token);\r\n setClientToken(response.token);\r\n\r\n const decodedSession = decodeJWTClient(response.token);\r\n if (decodedSession) {\r\n this.updateState({ session: decodedSession });\r\n await this.initializeSession(decodedSession);\r\n }\r\n\r\n this.updateState({ isSessionInitialized: true });\r\n\r\n } catch (error) {\r\n console.error('[TagadaClient] Failed to create anonymous token:', error);\r\n this.updateState({ isInitialized: true, isLoading: false });\r\n }\r\n }\r\n\r\n /**\r\n * Initialize session\r\n */\r\n async initializeSession(sessionData: Session) {\r\n // Prevent concurrent initialization attempts\r\n if (this.isInitializingSession) {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Session initialization already in progress, skipping`);\r\n }\r\n return;\r\n }\r\n\r\n this.isInitializingSession = true;\r\n\r\n try {\r\n if (this.state.debugMode) {\r\n console.log(`[TagadaClient ${this.instanceId}] Initializing session...`, { sessionId: sessionData.sessionId });\r\n }\r\n\r\n const deviceInfo = await collectDeviceInfo();\r\n const urlParams = getUrlParams();\r\n const browserLocale = getBrowserLocale();\r\n\r\n // \uD83C\uDFAF Check draft mode from URL, localStorage, or cookie\r\n const draft = isDraftMode();\r\n\r\n // Store draft mode if detected from URL (urlParams may have draft from query string)\r\n const draftParam = new URLSearchParams(window.location.search).get('draft');\r\n if (draftParam !== null) {\r\n setDraftMode(draftParam === 'true');\r\n }\r\n\r\n const sessionInitData = {\r\n storeId: sessionData.storeId,\r\n accountId: sessionData.accountId,\r\n customerId: sessionData.customerId,\r\n role: sessionData.role,\r\n browserLocale,\r\n queryLocale: urlParams.locale,\r\n queryCurrency: urlParams.currency,\r\n utmSource: urlParams.utmSource,\r\n utmMedium: urlParams.utmMedium,\r\n utmCampaign: urlParams.utmCampaign,\r\n browser: deviceInfo.userAgent.browser.name,\r\n browserVersion: deviceInfo.userAgent.browser.version,\r\n os: deviceInfo.userAgent.os.name,\r\n osVersion: deviceInfo.userAgent.os.version,\r\n deviceType: deviceInfo.userAgent.device?.type,\r\n deviceModel: deviceInfo.userAgent.device?.model,\r\n deviceVendor: deviceInfo.userAgent.device?.vendor,\r\n userAgent: deviceInfo.userAgent.name,\r\n engineName: deviceInfo.userAgent.engine.name,\r\n engineVersion: deviceInfo.userAgent.engine.version,\r\n cpuArchitecture: deviceInfo.userAgent.cpu.architecture,\r\n isBot: deviceInfo.flags?.isBot ?? false,\r\n isChromeFamily: deviceInfo.flags?.isChromeFamily ?? false,\r\n isStandalonePWA: deviceInfo.flags?.isStandalonePWA ?? false,\r\n isAppleSilicon: deviceInfo.flags?.isAppleSilicon ?? false,\r\n screenWidth: deviceInfo.screenResolution.width,\r\n screenHeight: deviceInfo.screenResolution.height,\r\n timeZone: deviceInfo.timeZone,\r\n draft, // \uD83C\uDFAF Pass draft mode to session init\r\n fetchMessages: false,\r\n };\r\n\r\n const response = await this.apiClient.post<SessionInitResponse>(\r\n '/api/v1/cms/session/v2/init',\r\n sessionInitData\r\n );\r\n\r\n // Success - reset error tracking\r\n this.lastSessionInitError = null;\r\n this.sessionInitRetryCount = 0;\r\n\r\n // Update state with session data\r\n this.updateSessionState(response, sessionData);\r\n\r\n this.updateState({\r\n isInitialized: true,\r\n isSessionInitialized: true,\r\n isLoading: false,\r\n });\r\n\r\n if (this.state.debugMode) console.log('[TagadaClient] Session initialized successfully');\r\n\r\n } catch (error) {\r\n // Track error and increment retry count\r\n this.lastSessionInitError = error as Error;\r\n this.sessionInitRetryCount++;\r\n\r\n console.error(`[TagadaClient] Error initializing session (attempt ${this.sessionInitRetryCount}/${this.MAX_SESSION_INIT_RETRIES}):`, error);\r\n\r\n this.updateState({\r\n isInitialized: true,\r\n isLoading: false,\r\n });\r\n } finally {\r\n // Always release the lock\r\n this.isInitializingSession = false;\r\n }\r\n }\r\n\r\n private updateSessionState(response: SessionInitResponse, sessionData: Session) {\r\n // Update Store\r\n if (response.store) {\r\n const storeData = response.store as any;\r\n const storeConfig = {\r\n ...response.store,\r\n // Ensure accountId is included - fallback to plugin config or session accountId\r\n accountId: storeData.accountId || this.state.pluginConfig?.accountId || sessionData.accountId || '',\r\n presentmentCurrencies: storeData.presentmentCurrencies || [response.store.currency || 'USD'],\r\n chargeCurrencies: storeData.chargeCurrencies || [response.store.currency || 'USD'],\r\n };\r\n this.updateState({ store: storeConfig });\r\n }\r\n\r\n // Update Locale (only if provided - V2 endpoint doesn't return locale)\r\n if (response.locale) {\r\n const localeConfig = {\r\n locale: response.locale,\r\n language: response.locale.split('-')[0],\r\n region: response.locale.split('-')[1] ?? 'US',\r\n messages: response.messages ?? {},\r\n };\r\n this.updateState({ locale: localeConfig });\r\n }\r\n\r\n // Update Currency\r\n if (response.store) {\r\n const currencyConfig = {\r\n code: response.store.currency,\r\n symbol: this.getCurrencySymbol(response.store.currency),\r\n name: this.getCurrencyName(response.store.currency),\r\n };\r\n this.updateState({ currency: currencyConfig });\r\n }\r\n\r\n // Update Customer & Auth\r\n const authState = {\r\n isAuthenticated: response.customer?.isAuthenticated ?? false,\r\n isLoading: false,\r\n customer: response.customer ?? null,\r\n session: sessionData,\r\n };\r\n this.updateState({\r\n customer: response.customer ?? null,\r\n auth: authState\r\n });\r\n\r\n // Auto-initialize funnel if enabled (skip when caller handles init explicitly)\r\n const funnelFeature = this.config.features?.funnel;\r\n const skipAutoInit = typeof funnelFeature === 'object' && funnelFeature.skipAutoInit;\r\n if (this.funnel && !skipAutoInit && sessionData.customerId && response.store?.id) {\r\n const accountId = response.store.accountId || this.state.pluginConfig?.accountId || sessionData.accountId || '';\r\n\r\n if (accountId) {\r\n // Get funnelId from URL or config\r\n const urlParams = new URLSearchParams(typeof window !== 'undefined' ? window.location.search : '');\r\n const funnelId = urlParams.get('funnelId') || undefined;\r\n\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Auto-initializing funnel...', {\r\n customerId: sessionData.customerId,\r\n storeId: response.store.id,\r\n accountId,\r\n funnelId: funnelId || 'auto-detect',\r\n });\r\n }\r\n\r\n // Auto-initialize funnel in background (don't block session init)\r\n this.funnel.autoInitialize(\r\n { customerId: sessionData.customerId, sessionId: sessionData.sessionId },\r\n { id: response.store.id, accountId },\r\n funnelId,\r\n ).catch((err) => {\r\n console.error('[TagadaClient] Funnel auto-initialization failed:', err);\r\n });\r\n } else {\r\n console.warn('[TagadaClient] Cannot auto-initialize funnel: accountId is missing');\r\n }\r\n }\r\n }\r\n\r\n // Helper methods\r\n private getCurrencySymbol(code: string): string {\r\n const symbols: Record<string, string> = {\r\n USD: '$', EUR: '\u20AC', GBP: '\u00A3', JPY: '\u00A5', CAD: 'C$', AUD: 'A$',\r\n };\r\n return symbols[code] || code;\r\n }\r\n\r\n private getCurrencyName(code: string): string {\r\n const names: Record<string, string> = {\r\n USD: 'US Dollar', EUR: 'Euro', GBP: 'British Pound',\r\n JPY: 'Japanese Yen', CAD: 'Canadian Dollar', AUD: 'Australian Dollar',\r\n };\r\n return names[code] || code;\r\n }\r\n\r\n /**\r\n * Helper to get accountId with fallbacks\r\n */\r\n getAccountId(): string {\r\n return this.state.store?.accountId || this.state.pluginConfig?.accountId || this.state.session?.accountId || '';\r\n }\r\n\r\n /**\r\n * Update plugin config dynamically (hot-reload)\r\n * Used for live config editing without page reload\r\n */\r\n updatePluginConfig(newConfig: Partial<PluginConfig['config']>) {\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Hot-reloading config:', newConfig);\r\n }\r\n\r\n // Merge new config with existing\r\n const updatedConfig = {\r\n ...this.state.pluginConfig.config,\r\n ...newConfig,\r\n };\r\n\r\n // Update state\r\n this.updateState({\r\n pluginConfig: {\r\n ...this.state.pluginConfig,\r\n config: updatedConfig,\r\n },\r\n });\r\n\r\n // Emit config update event\r\n this.bus.emit('CONFIG_UPDATED', updatedConfig);\r\n\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Config updated successfully');\r\n }\r\n }\r\n\r\n /**\r\n * Setup listener for config updates from parent window (config editor)\r\n * Enables live config editing via postMessage\r\n */\r\n private setupConfigHotReload() {\r\n if (typeof window === 'undefined') return;\r\n\r\n const handleMessage = (event: MessageEvent) => {\r\n // Security: Only accept messages from same origin or trusted origins\r\n // In production, you might want to check event.origin more strictly\r\n\r\n if (event.data?.type === 'TAGADAPAY_CONFIG_UPDATE') {\r\n const { config } = event.data;\r\n\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Received config update from parent:', config);\r\n }\r\n\r\n this.updatePluginConfig(config);\r\n } else if (event.data?.type === 'APPLY_STYLES_TO_ELEMENT') {\r\n const { elementId, styles } = event.data;\r\n\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Received style application request:', { elementId, styles });\r\n }\r\n\r\n this.applyStylesToElement(elementId, styles);\r\n }\r\n };\r\n\r\n window.addEventListener('message', handleMessage);\r\n\r\n if (this.state.debugMode) {\r\n console.log('[TagadaClient] Config hot-reload and style manipulation listeners enabled');\r\n }\r\n }\r\n\r\n /**\r\n * Apply CSS properties to a real div child element for highlighting\r\n * Used by config editor to highlight elements in preview without altering the element's style\r\n */\r\n private applyStylesToElement(elementId: string, styles?: Record<string, string>) {\r\n if (typeof document === 'undefined') return;\r\n\r\n // Always remove any existing highlight, even if the target element is not found\r\n const staticHighlightId = 'tagada-editor-highlight';\r\n const existingHighlight = document.getElementById(staticHighlightId) as HTMLElement | null;\r\n if (existingHighlight) {\r\n existingHighlight.remove();\r\n }\r\n\r\n const applyToElement = (element: HTMLElement) => {\r\n // List of void/self-closing elements that don't accept children\r\n const voidElements = new Set([\r\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\r\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\r\n ]);\r\n\r\n const isVoidElement = voidElements.has(element.tagName.toLowerCase());\r\n\r\n // For void elements, wrap them in a container div\r\n let targetElement = element;\r\n\r\n if (isVoidElement) {\r\n // Check if element is already wrapped (from a previous highlight)\r\n const parent = element.parentElement;\r\n const existingWrapper = parent?.getAttribute('data-tagada-highlight-wrapper');\r\n\r\n if (existingWrapper === 'true' && parent instanceof HTMLElement) {\r\n // Reuse existing wrapper\r\n targetElement = parent;\r\n } else {\r\n // Create a new wrapper\r\n const newWrapper = document.createElement('div');\r\n newWrapper.setAttribute('data-tagada-highlight-wrapper', 'true');\r\n\r\n // Preserve the element's layout behavior by matching its display style\r\n // This minimizes the visual impact of the wrapper\r\n const computedStyle = window.getComputedStyle(element);\r\n const elementDisplay = computedStyle.display;\r\n\r\n // Match the display type to preserve layout\r\n // For inline elements, use inline-block (to support position: relative)\r\n // For all others, use the same display value\r\n if (elementDisplay === 'inline') {\r\n newWrapper.style.display = 'inline-block';\r\n } else {\r\n newWrapper.style.display = elementDisplay;\r\n }\r\n\r\n newWrapper.style.position = 'relative';\r\n\r\n // Preserve vertical alignment for inline elements\r\n if (elementDisplay === 'inline' || elementDisplay.includes('inline')) {\r\n const verticalAlign = computedStyle.verticalAlign;\r\n if (verticalAlign && verticalAlign !== 'baseline') {\r\n newWrapper.style.verticalAlign = verticalAlign;\r\n }\r\n }\r\n\r\n // Preserve spacing and layout properties from the original element\r\n // List of CSS properties that affect spacing and layout\r\n const spacingProperties = [\r\n // Width and height\r\n 'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight',\r\n // Flex properties\r\n 'flex', 'flexGrow', 'flexShrink', 'flexBasis',\r\n // Grid properties\r\n 'gridColumn', 'gridRow', 'gridColumnStart', 'gridColumnEnd',\r\n 'gridRowStart', 'gridRowEnd', 'gridArea',\r\n // Alignment properties\r\n 'alignSelf', 'justifySelf',\r\n // Box sizing\r\n 'boxSizing',\r\n // Gap (for grid/flex)\r\n 'gap', 'rowGap', 'columnGap',\r\n // Order (for flex/grid)\r\n 'order',\r\n // Aspect ratio\r\n 'aspectRatio',\r\n ];\r\n\r\n spacingProperties.forEach(prop => {\r\n const camelProp = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n const value = computedStyle.getPropertyValue(camelProp);\r\n\r\n // Only copy if the value is not empty\r\n // For most properties, we want to preserve the value even if it's 'auto' or '0px'\r\n // as these might be intentional layout choices\r\n if (value && value.trim() !== '') {\r\n // Handle special cases\r\n if (prop === 'flex' && value !== 'none' && value !== '0 1 auto') {\r\n newWrapper.style.flex = value;\r\n } else if (prop === 'boxSizing') {\r\n newWrapper.style.boxSizing = value;\r\n } else {\r\n // Use setProperty for kebab-case properties\r\n // Preserve all values including percentages, auto, etc.\r\n newWrapper.style.setProperty(camelProp, value);\r\n }\r\n }\r\n });\r\n\r\n // Also check inline styles for spacing properties\r\n // This handles cases where styles are set directly on the element\r\n if (element.style) {\r\n const inlineSpacingProps = [\r\n 'width', 'height', 'min-width', 'min-height', 'max-width', 'max-height',\r\n 'flex', 'flex-grow', 'flex-shrink', 'flex-basis',\r\n 'grid-column', 'grid-row', 'grid-column-start', 'grid-column-end',\r\n 'grid-row-start', 'grid-row-end', 'grid-area',\r\n 'align-self', 'justify-self',\r\n 'box-sizing', 'gap', 'row-gap', 'column-gap', 'order', 'aspect-ratio'\r\n ];\r\n\r\n inlineSpacingProps.forEach(prop => {\r\n const inlineValue = element.style.getPropertyValue(prop);\r\n if (inlineValue) {\r\n newWrapper.style.setProperty(prop, inlineValue);\r\n }\r\n });\r\n }\r\n\r\n // Insert wrapper before element\r\n element.parentNode?.insertBefore(newWrapper, element);\r\n // Move element into wrapper\r\n newWrapper.appendChild(element);\r\n targetElement = newWrapper;\r\n }\r\n }\r\n\r\n // Ensure element has position relative for absolute child positioning\r\n const computedStyle = getComputedStyle(isVoidElement ? element : targetElement);\r\n if (targetElement.style.position === 'static' || !targetElement.style.position) {\r\n targetElement.style.position = 'relative';\r\n }\r\n\r\n // Create new highlight div with static ID\r\n const highlightDiv = document.createElement('div');\r\n highlightDiv.id = staticHighlightId;\r\n highlightDiv.style.position = 'absolute';\r\n highlightDiv.style.inset = '0';\r\n highlightDiv.style.pointerEvents = 'none';\r\n highlightDiv.style.zIndex = '9999';\r\n highlightDiv.style.boxSizing = 'border-box';\r\n highlightDiv.style.background = 'none';\r\n highlightDiv.style.border = 'none';\r\n highlightDiv.style.outline = 'none';\r\n highlightDiv.style.margin = '0';\r\n highlightDiv.style.padding = '0';\r\n\r\n // Inherit border radius from parent\r\n const borderRadius = computedStyle.borderRadius;\r\n if (borderRadius) {\r\n highlightDiv.style.borderRadius = borderRadius;\r\n }\r\n\r\n // Append the new highlight div to the target element\r\n targetElement.appendChild(highlightDiv);\r\n\r\n // Apply CSS properties to the highlight div\r\n const stylesToApply = styles || { boxShadow: '0 0 0 2px rgb(239 68 68)' }; // Default red ring\r\n\r\n Object.entries(stylesToApply).forEach(([property, value]) => {\r\n // Convert kebab-case to camelCase for style object\r\n const camelProperty = property.includes('-')\r\n ? property.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\r\n : property;\r\n\r\n // Use setProperty for kebab-case or direct assignment for camelCase\r\n if (property.includes('-')) {\r\n highlightDiv.style.setProperty(property, value);\r\n } else {\r\n (highlightDiv.style as any)[camelProperty] = value;\r\n }\r\n });\r\n\r\n // Scroll element into view\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n\r\n if (this.state.debugMode) {\r\n const appliedStyles = Object.entries(stylesToApply).map(([k, v]) => `${k}: ${v}`).join('; ');\r\n console.log(`[TagadaClient] Applied styles to highlight div of element #${elementId}:`, appliedStyles);\r\n }\r\n };\r\n\r\n // Support multiple IDs in editor-id attribute (space-separated)\r\n // Use ~= selector to match elementId as a space-separated value\r\n const maxAttempts = 5;\r\n const intervalMs = 1000;\r\n let attempts = 0;\r\n\r\n const isElementHidden = (element: HTMLElement): boolean => {\r\n const style = window.getComputedStyle(element);\r\n return (\r\n style.display === 'none' ||\r\n style.visibility === 'hidden' ||\r\n style.opacity === '0' ||\r\n element.hidden ||\r\n element.offsetWidth === 0 ||\r\n element.offsetHeight === 0\r\n );\r\n };\r\n\r\n const findAndApply = () => {\r\n const elements = document.querySelectorAll(`[editor-id~=\"${elementId}\"]`) as NodeListOf<HTMLElement>;\r\n\r\n if (elements.length === 0) {\r\n attempts += 1;\r\n\r\n if (attempts >= maxAttempts) {\r\n if (this.state.debugMode) {\r\n console.warn(\r\n `[TagadaClient] Element with editor-id containing \"${elementId}\" not found after ${maxAttempts} attempts`\r\n );\r\n }\r\n return;\r\n }\r\n\r\n if (this.state.debugMode) {\r\n console.warn(\r\n `[TagadaClient] Element with editor-id containing \"${elementId}\" not found (attempt ${attempts}/${maxAttempts}), retrying in ${intervalMs / 1000}s`\r\n );\r\n }\r\n\r\n setTimeout(findAndApply, intervalMs);\r\n return;\r\n }\r\n\r\n // If multiple elements found, prioritize the one that is not hidden\r\n let element: HTMLElement | null = null;\r\n\r\n if (elements.length === 1) {\r\n element = elements[0];\r\n } else {\r\n // Find the first non-hidden element\r\n for (let i = 0; i < elements.length; i++) {\r\n if (!isElementHidden(elements[i])) {\r\n element = elements[i];\r\n break;\r\n }\r\n }\r\n // If all are hidden, use the first one\r\n if (!element) {\r\n element = elements[0];\r\n }\r\n }\r\n\r\n if (element) {\r\n applyToElement(element);\r\n }\r\n };\r\n\r\n findAndApply();\r\n }\r\n}\r\n\r\n", "'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n", "'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n", "// eslint-disable-next-line strict\nexport default null;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n", "'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n", "'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n", "'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n", "'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n", "'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n", "import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n", "const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n", "import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n", "'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n", "'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n", "'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n", "'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n", "'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n", "'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n", "'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n", "'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n", "'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n", "/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n", "import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n", "import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n", "import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n", "'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n", "'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n", "'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n", "'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n", "import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n", "import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n", "\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n", "import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n", "import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n", "'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n", "export const VERSION = \"1.13.2\";", "'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n", "'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n", "'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n", "'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n", "'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n", "const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n", "'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n", "import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n", "/**\r\n * TagadaPay SDK Error Types\r\n *\r\n * Structured error hierarchy for programmatic error handling.\r\n * All SDK errors extend TagadaError, which extends native Error.\r\n */\r\n\r\nexport const TagadaErrorCode = {\r\n NETWORK_ERROR: 'network_error',\r\n API_ERROR: 'api_error',\r\n AUTH_REQUIRED: 'auth_required',\r\n TOKEN_EXPIRED: 'token_expired',\r\n NOT_FOUND: 'not_found',\r\n VALIDATION_ERROR: 'validation_error',\r\n CIRCUIT_BREAKER: 'circuit_breaker',\r\n PAYMENT_FAILED: 'payment_failed',\r\n CARD_DECLINED: 'card_declined',\r\n SESSION_EXPIRED: 'session_expired',\r\n RATE_LIMITED: 'rate_limited',\r\n TIMEOUT: 'timeout',\r\n UNKNOWN: 'unknown',\r\n} as const;\r\n\r\nexport type TagadaErrorCodeValue = typeof TagadaErrorCode[keyof typeof TagadaErrorCode];\r\n\r\nexport interface TagadaErrorOptions {\r\n code: TagadaErrorCodeValue | string;\r\n statusCode?: number;\r\n retryable?: boolean;\r\n details?: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Base error class for all TagadaPay SDK errors.\r\n *\r\n * @example\r\n * ```typescript\r\n * try {\r\n * await checkout.applyPromotionCode(sessionId, 'SAVE10');\r\n * } catch (err) {\r\n * if (err instanceof TagadaError) {\r\n * console.log(err.code); // 'not_found'\r\n * console.log(err.statusCode); // 404\r\n * console.log(err.retryable); // false\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport class TagadaError extends Error {\r\n readonly code: string;\r\n readonly statusCode?: number;\r\n readonly retryable: boolean;\r\n readonly details?: Record<string, unknown>;\r\n\r\n constructor(message: string, options: TagadaErrorOptions) {\r\n super(message);\r\n this.name = 'TagadaError';\r\n this.code = options.code;\r\n this.statusCode = options.statusCode;\r\n this.retryable = options.retryable ?? false;\r\n this.details = options.details;\r\n\r\n // Maintain proper prototype chain for instanceof checks\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n }\r\n}\r\n\r\n/** API returned a non-2xx response with an error body. */\r\nexport class TagadaApiError extends TagadaError {\r\n constructor(message: string, statusCode: number, options?: { code?: string; details?: Record<string, unknown>; retryable?: boolean }) {\r\n super(message, {\r\n code: options?.code ?? TagadaErrorCode.API_ERROR,\r\n statusCode,\r\n retryable: options?.retryable ?? (statusCode >= 500),\r\n details: options?.details,\r\n });\r\n this.name = 'TagadaApiError';\r\n }\r\n}\r\n\r\n/** Network-level failure (no response received). */\r\nexport class TagadaNetworkError extends TagadaError {\r\n constructor(message: string = 'Network request failed') {\r\n super(message, {\r\n code: TagadaErrorCode.NETWORK_ERROR,\r\n retryable: true,\r\n });\r\n this.name = 'TagadaNetworkError';\r\n }\r\n}\r\n\r\n/** 401/403 \u2014 authentication or authorization failure. */\r\nexport class TagadaAuthError extends TagadaError {\r\n constructor(message: string = 'Authentication required', statusCode: number = 401) {\r\n super(message, {\r\n code: TagadaErrorCode.AUTH_REQUIRED,\r\n statusCode,\r\n retryable: false,\r\n });\r\n this.name = 'TagadaAuthError';\r\n }\r\n}\r\n\r\n/** Input validation failed (client-side or 400 from server). */\r\nexport class TagadaValidationError extends TagadaError {\r\n constructor(message: string, details?: Record<string, unknown>) {\r\n super(message, {\r\n code: TagadaErrorCode.VALIDATION_ERROR,\r\n statusCode: 400,\r\n retryable: false,\r\n details,\r\n });\r\n this.name = 'TagadaValidationError';\r\n }\r\n}\r\n\r\n/** Circuit breaker tripped \u2014 too many requests in a short window. */\r\nexport class TagadaCircuitBreakerError extends TagadaError {\r\n constructor(message: string) {\r\n super(message, {\r\n code: TagadaErrorCode.CIRCUIT_BREAKER,\r\n retryable: false,\r\n });\r\n this.name = 'TagadaCircuitBreakerError';\r\n }\r\n}\r\n", "/**\r\n * Base API Client using Axios\r\n * Shared between all resource clients\r\n */\r\n\r\nimport axios, { AxiosInstance, AxiosRequestConfig, AxiosError, InternalAxiosRequestConfig } from 'axios';\r\nimport {\r\n TagadaApiError,\r\n TagadaAuthError,\r\n TagadaNetworkError,\r\n TagadaCircuitBreakerError,\r\n TagadaError,\r\n TagadaErrorCode,\r\n} from '../errors';\r\n\r\n// Extend AxiosRequestConfig to include skipAuth\r\ndeclare module 'axios' {\r\n export interface AxiosRequestConfig {\r\n skipAuth?: boolean;\r\n }\r\n}\r\n\r\nexport interface ApiClientConfig {\r\n baseURL: string;\r\n headers?: Record<string, string>;\r\n timeout?: number;\r\n}\r\n\r\nexport type TokenProvider = () => Promise<string | null>;\r\n\r\nexport class ApiClient {\r\n public axios: AxiosInstance;\r\n private currentToken: string | null = null;\r\n private tokenProvider: TokenProvider | null = null;\r\n\r\n // Circuit breaker state\r\n private requestHistory: Map<string, { count: number; firstRequestTime: number }> = new Map();\r\n private readonly WINDOW_MS = 5000; // 5 seconds window\r\n private readonly MAX_REQUESTS = 30; // Max 30 requests per endpoint in window\r\n\r\n constructor(config: ApiClientConfig) {\r\n this.axios = axios.create({\r\n baseURL: config.baseURL,\r\n timeout: config.timeout || 60000, // 60 seconds for payment operations\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...config.headers,\r\n },\r\n });\r\n\r\n // Cleanup interval for circuit breaker history\r\n if (typeof setInterval !== 'undefined') {\r\n setInterval(() => this.cleanupHistory(), 10000);\r\n }\r\n\r\n // Request interceptor for logging and auth\r\n this.axios.interceptors.request.use(\r\n async (config: InternalAxiosRequestConfig) => {\r\n // Circuit Breaker Check\r\n if (config.url) {\r\n try {\r\n this.checkRequestLimit(`${config.method?.toUpperCase()}:${config.url}`);\r\n } catch (error) {\r\n console.error('[SDK] \uD83D\uDED1 Request blocked by Circuit Breaker:', error);\r\n return Promise.reject(error);\r\n }\r\n }\r\n\r\n // Check if we need to wait for token\r\n if (!config.skipAuth && !this.currentToken && this.tokenProvider) {\r\n try {\r\n console.log('[SDK] Waiting for token...');\r\n const token = await this.tokenProvider();\r\n if (token) {\r\n this.updateToken(token);\r\n // Ensure header is set on this specific request config\r\n config.headers['x-cms-token'] = token;\r\n }\r\n } catch (error) {\r\n console.error('[SDK] Failed to get token from provider:', error);\r\n }\r\n }\r\n\r\n // Ensure token is in headers if we have it (and not skipped)\r\n if (!config.skipAuth && this.currentToken) {\r\n config.headers['x-cms-token'] = this.currentToken;\r\n }\r\n\r\n console.log(`[SDK] Making ${config.method?.toUpperCase()} request to: ${config.baseURL || ''}${config.url}`);\r\n // console.log('[SDK] Request headers:', config.headers);\r\n\r\n return config;\r\n },\r\n (error) => {\r\n console.error('[SDK] Request error:', error);\r\n return Promise.reject(error instanceof Error ? error : new Error(String(error)));\r\n }\r\n );\r\n\r\n // Response interceptor \u2014 maps Axios errors to structured TagadaError subtypes\r\n this.axios.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n console.error('[SDK] Response error:', error.message);\r\n\r\n if (error instanceof TagadaError) {\r\n return Promise.reject(error);\r\n }\r\n\r\n if (axios.isAxiosError(error)) {\r\n return Promise.reject(this.toTagadaError(error));\r\n }\r\n\r\n return Promise.reject(\r\n error instanceof Error ? error : new Error(String(error))\r\n );\r\n }\r\n );\r\n }\r\n\r\n // Set a provider that returns a promise resolving to the token\r\n // This allows requests to wait until the token is ready\r\n setTokenProvider(provider: TokenProvider) {\r\n this.tokenProvider = provider;\r\n }\r\n\r\n // Convenience methods\r\n async get<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T> {\r\n const response = await this.axios.get<T>(url, config);\r\n return response.data;\r\n }\r\n\r\n async post<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\r\n const response = await this.axios.post<T>(url, data, config);\r\n return response.data;\r\n }\r\n\r\n async put<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\r\n const response = await this.axios.put<T>(url, data, config);\r\n return response.data;\r\n }\r\n\r\n async patch<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T> {\r\n const response = await this.axios.patch<T>(url, data, config);\r\n return response.data;\r\n }\r\n\r\n async delete<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T> {\r\n const response = await this.axios.delete<T>(url, config);\r\n return response.data;\r\n }\r\n\r\n // Update headers (useful for auth tokens)\r\n setHeader(key: string, value: string) {\r\n this.axios.defaults.headers.common[key] = value;\r\n }\r\n\r\n removeHeader(key: string) {\r\n delete this.axios.defaults.headers.common[key];\r\n }\r\n\r\n // Token management methods (matching old ApiService pattern)\r\n updateToken(token: string | null) {\r\n this.currentToken = token;\r\n if (token) {\r\n this.setHeader('x-cms-token', token);\r\n // console.log('[SDK] Token updated in ApiClient:', token.substring(0, 8) + '...');\r\n } else {\r\n this.removeHeader('x-cms-token');\r\n console.log('[SDK] Token removed from ApiClient');\r\n }\r\n }\r\n\r\n getCurrentToken(): string | null {\r\n return this.currentToken;\r\n }\r\n\r\n // Update configuration (useful for environment changes)\r\n updateConfig(config: Partial<ApiClientConfig>) {\r\n if (config.baseURL) {\r\n this.axios.defaults.baseURL = config.baseURL;\r\n }\r\n if (config.timeout) {\r\n this.axios.defaults.timeout = config.timeout;\r\n }\r\n if (config.headers) {\r\n Object.assign(this.axios.defaults.headers.common, config.headers);\r\n }\r\n console.log('[SDK] ApiClient configuration updated');\r\n }\r\n\r\n // Circuit Breaker Implementation\r\n private checkRequestLimit(key: string) {\r\n const now = Date.now();\r\n const history = this.requestHistory.get(key);\r\n\r\n if (!history) {\r\n this.requestHistory.set(key, { count: 1, firstRequestTime: now });\r\n return;\r\n }\r\n\r\n if (now - history.firstRequestTime > this.WINDOW_MS) {\r\n // Window expired, reset\r\n this.requestHistory.set(key, { count: 1, firstRequestTime: now });\r\n return;\r\n }\r\n\r\n history.count++;\r\n if (history.count > this.MAX_REQUESTS) {\r\n throw new TagadaCircuitBreakerError(\r\n `Circuit Breaker: Too many requests to ${key} (${history.count} in ${this.WINDOW_MS}ms)`\r\n );\r\n }\r\n }\r\n\r\n private cleanupHistory() {\r\n const now = Date.now();\r\n for (const [key, history] of this.requestHistory.entries()) {\r\n if (now - history.firstRequestTime > this.WINDOW_MS) {\r\n this.requestHistory.delete(key);\r\n }\r\n }\r\n }\r\n\r\n /** Convert an AxiosError into the appropriate TagadaError subclass. */\r\n private toTagadaError(error: AxiosError): TagadaError {\r\n const status = error.response?.status;\r\n const data = error.response?.data as Record<string, unknown> | undefined;\r\n const serverMessage =\r\n (data?.message as string) ??\r\n (data?.error as string) ??\r\n error.message;\r\n\r\n // No response at all \u2192 network-level failure\r\n if (!error.response) {\r\n if (error.code === 'ECONNABORTED') {\r\n return new TagadaApiError('Request timed out', 0, {\r\n code: TagadaErrorCode.TIMEOUT,\r\n retryable: true,\r\n });\r\n }\r\n return new TagadaNetworkError(serverMessage);\r\n }\r\n\r\n // Auth failures\r\n if (status === 401 || status === 403) {\r\n return new TagadaAuthError(serverMessage, status);\r\n }\r\n\r\n // Rate-limited\r\n if (status === 429) {\r\n return new TagadaApiError(serverMessage, 429, {\r\n code: TagadaErrorCode.RATE_LIMITED,\r\n retryable: true,\r\n });\r\n }\r\n\r\n // Not found\r\n if (status === 404) {\r\n return new TagadaApiError(serverMessage, 404, {\r\n code: TagadaErrorCode.NOT_FOUND,\r\n retryable: false,\r\n });\r\n }\r\n\r\n // Generic API error\r\n return new TagadaApiError(serverMessage, status ?? 0, {\r\n code: (data?.code as string) ?? TagadaErrorCode.API_ERROR,\r\n details: data,\r\n retryable: (status ?? 0) >= 500,\r\n });\r\n }\r\n}\r\n", "export interface DeviceInfo {\r\n userAgent: {\r\n name: string;\r\n browser: {\r\n major: string;\r\n name: string;\r\n version: string;\r\n };\r\n os: {\r\n name: string;\r\n version: string;\r\n };\r\n device?: {\r\n model?: string;\r\n type?: string;\r\n vendor?: string;\r\n };\r\n engine: {\r\n name: string;\r\n version: string;\r\n };\r\n cpu: {\r\n architecture: string;\r\n };\r\n };\r\n screenResolution: {\r\n width: number;\r\n height: number;\r\n };\r\n timeZone: string;\r\n flags?: {\r\n isBot: boolean;\r\n isChromeFamily: boolean;\r\n isStandalonePWA: boolean;\r\n isAppleSilicon: boolean;\r\n };\r\n}\r\n\r\nfunction getScreenResolution(): { width: number; height: number } {\r\n return { width: window.screen.width, height: window.screen.height };\r\n}\r\n\r\nfunction getTimeZone(): string {\r\n try {\r\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n } catch {\r\n return 'UTC';\r\n }\r\n}\r\n\r\nexport function getBrowserLocale(): string {\r\n try {\r\n return navigator.language || 'en-US';\r\n } catch {\r\n return 'en-US';\r\n }\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Lightweight UA parsing \u2014 no third-party library needed\r\n// ---------------------------------------------------------------------------\r\n\r\nconst UA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\r\n\r\n/** Extract first match's groups from a UA string */\r\nfunction match(ua: string, ...patterns: RegExp[]): RegExpMatchArray | null {\r\n for (const p of patterns) {\r\n const m = ua.match(p);\r\n if (m) return m;\r\n }\r\n return null;\r\n}\r\n\r\nfunction parseBrowser(ua: string): { name: string; version: string; major: string } {\r\n // Order matters \u2014 more specific first\r\n const tests: [RegExp, string][] = [\r\n [/EdgA?\\/([\\d.]+)/i, 'Edge'],\r\n [/OPR\\/([\\d.]+)/i, 'Opera'],\r\n [/Brave\\/([\\d.]+)/i, 'Brave'],\r\n [/Vivaldi\\/([\\d.]+)/i, 'Vivaldi'],\r\n [/SamsungBrowser\\/([\\d.]+)/i, 'Samsung Internet'],\r\n [/UCBrowser\\/([\\d.]+)/i, 'UC Browser'],\r\n [/Firefox\\/([\\d.]+)/i, 'Firefox'],\r\n [/CriOS\\/([\\d.]+)/i, 'Chrome'], // Chrome on iOS\r\n [/FxiOS\\/([\\d.]+)/i, 'Firefox'], // Firefox on iOS\r\n [/Chrome\\/([\\d.]+)/i, 'Chrome'],\r\n [/Version\\/([\\d.]+).*Safari/i, 'Safari'],\r\n [/Safari\\/([\\d.]+)/i, 'Safari'],\r\n ];\r\n for (const [re, name] of tests) {\r\n const m = ua.match(re);\r\n if (m) {\r\n const version = m[1] || '';\r\n return { name, version, major: version.split('.')[0] || '' };\r\n }\r\n }\r\n return { name: '', version: '', major: '' };\r\n}\r\n\r\nfunction parseOS(ua: string): { name: string; version: string } {\r\n const m =\r\n match(ua, /Windows NT ([\\d.]+)/i) ||\r\n match(ua, /Mac OS X ([\\d_.]+)/i) ||\r\n match(ua, /Android ([\\d.]+)/i) ||\r\n match(ua, /iPhone OS ([\\d_]+)/i) ||\r\n match(ua, /iPad.*OS ([\\d_]+)/i) ||\r\n match(ua, /CrOS[\\w ]*\\/([\\d.]+)/i) ||\r\n match(ua, /Linux/i);\r\n\r\n if (!m) return { name: '', version: '' };\r\n\r\n const raw = m[0];\r\n const version = (m[1] || '').replace(/_/g, '.');\r\n\r\n if (/Windows/i.test(raw)) {\r\n const ntMap: Record<string, string> = {\r\n '10.0': '10', '6.3': '8.1', '6.2': '8', '6.1': '7', '6.0': 'Vista', '5.1': 'XP',\r\n };\r\n return { name: 'Windows', version: ntMap[version] || version };\r\n }\r\n if (/Mac OS X/i.test(raw)) return { name: 'macOS', version };\r\n if (/Android/i.test(raw)) return { name: 'Android', version };\r\n if (/iPhone|iPad/i.test(raw)) return { name: 'iOS', version };\r\n if (/CrOS/i.test(raw)) return { name: 'Chrome OS', version };\r\n if (/Linux/i.test(raw)) return { name: 'Linux', version: '' };\r\n\r\n return { name: '', version: '' };\r\n}\r\n\r\nfunction parseDevice(ua: string): { type?: string; model?: string; vendor?: string } | undefined {\r\n if (/iPad/i.test(ua)) return { type: 'tablet', vendor: 'Apple', model: 'iPad' };\r\n if (/iPhone/i.test(ua)) return { type: 'mobile', vendor: 'Apple', model: 'iPhone' };\r\n if (/iPod/i.test(ua)) return { type: 'mobile', vendor: 'Apple', model: 'iPod' };\r\n if (/Android/i.test(ua)) {\r\n const m = ua.match(/Android[\\s\\d.]+;\\s*([^)]+?)(?:\\s+Build)/i);\r\n const mobile = /Mobile/i.test(ua);\r\n return { type: mobile ? 'mobile' : 'tablet', model: m?.[1]?.trim() };\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction parseEngine(ua: string): { name: string; version: string } {\r\n const m =\r\n match(ua, /AppleWebKit\\/([\\d.]+)/i) ||\r\n match(ua, /Gecko\\/([\\d.]+)/i) ||\r\n match(ua, /Trident\\/([\\d.]+)/i) ||\r\n match(ua, /Presto\\/([\\d.]+)/i);\r\n\r\n if (!m) return { name: '', version: '' };\r\n const raw = m[0];\r\n const version = m[1] || '';\r\n if (/AppleWebKit/i.test(raw)) return { name: 'WebKit', version };\r\n if (/Gecko/i.test(raw)) return { name: 'Gecko', version };\r\n if (/Trident/i.test(raw)) return { name: 'Trident', version };\r\n if (/Presto/i.test(raw)) return { name: 'Presto', version };\r\n return { name: '', version: '' };\r\n}\r\n\r\nfunction parseCPU(ua: string): { architecture: string } {\r\n if (/x86_64|x64|amd64|Win64/i.test(ua)) return { architecture: 'amd64' };\r\n if (/ia32|x86/i.test(ua)) return { architecture: 'ia32' };\r\n if (/aarch64|arm64/i.test(ua)) return { architecture: 'arm64' };\r\n if (/arm/i.test(ua)) return { architecture: 'arm' };\r\n return { architecture: '' };\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Flags\r\n// ---------------------------------------------------------------------------\r\n\r\nfunction detectIsBot(): boolean {\r\n if (navigator.webdriver) return true;\r\n return /bot|crawl|spider|slurp|Googlebot|bingbot|yandex|baidu|duckduck|facebookexternalhit|Twitterbot|linkedinbot|embedly|quora|pinterest|redditbot|Slackbot|Discordbot|WhatsApp|TelegramBot|Applebot/i.test(UA);\r\n}\r\n\r\nfunction detectIsChromeFamily(browserName: string): boolean {\r\n return /Chrome|Chromium|Edge|Brave|Opera|Vivaldi|Arc/i.test(browserName);\r\n}\r\n\r\nfunction detectIsStandalonePWA(): boolean {\r\n return window.matchMedia('(display-mode: standalone)').matches\r\n || (navigator as any).standalone === true;\r\n}\r\n\r\nfunction detectIsAppleSilicon(osName: string): boolean {\r\n if (!/mac/i.test(osName)) return false;\r\n return navigator.maxTouchPoints > 0;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Main\r\n// ---------------------------------------------------------------------------\r\n\r\nexport function collectDeviceInfo(): DeviceInfo {\r\n if (typeof window === 'undefined') {\r\n return {\r\n userAgent: {\r\n name: '',\r\n browser: { major: '', name: '', version: '' },\r\n os: { name: '', version: '' },\r\n device: undefined,\r\n engine: { name: '', version: '' },\r\n cpu: { architecture: '' },\r\n },\r\n screenResolution: { width: 0, height: 0 },\r\n timeZone: 'UTC',\r\n flags: { isBot: false, isChromeFamily: false, isStandalonePWA: false, isAppleSilicon: false },\r\n };\r\n }\r\n\r\n const browser = parseBrowser(UA);\r\n const os = parseOS(UA);\r\n const device = parseDevice(UA);\r\n const engine = parseEngine(UA);\r\n const cpu = parseCPU(UA);\r\n\r\n let flags: DeviceInfo['flags'];\r\n try {\r\n flags = {\r\n isBot: detectIsBot(),\r\n isChromeFamily: detectIsChromeFamily(browser.name),\r\n isStandalonePWA: detectIsStandalonePWA(),\r\n isAppleSilicon: detectIsAppleSilicon(os.name),\r\n };\r\n } catch {\r\n flags = { isBot: false, isChromeFamily: false, isStandalonePWA: false, isAppleSilicon: false };\r\n }\r\n\r\n return {\r\n userAgent: { name: UA, browser, os, device, engine, cpu },\r\n screenResolution: getScreenResolution(),\r\n timeZone: getTimeZone(),\r\n flags,\r\n };\r\n}\r\n\r\nexport function getUrlParams(): {\r\n locale?: string;\r\n currency?: string;\r\n utmSource?: string;\r\n utmMedium?: string;\r\n utmCampaign?: string;\r\n} {\r\n if (typeof window === 'undefined') return {};\r\n const params = new URLSearchParams(window.location.search);\r\n return {\r\n locale: params.get('locale') || undefined,\r\n currency: params.get('currency') || undefined,\r\n utmSource: params.get('utm_source') || undefined,\r\n utmMedium: params.get('utm_medium') || undefined,\r\n utmCampaign: params.get('utm_campaign') || undefined,\r\n };\r\n}\r\n", "/**\r\n * Event Bus for handling domain events and coordination\r\n */\r\nexport type EventCallback<T = any> = (data: T) => void | Promise<void>;\r\n\r\nexport class EventBus {\r\n private listeners: Map<string, Set<EventCallback>> = new Map();\r\n\r\n on<T = any>(event: string, callback: EventCallback<T>): () => void {\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, new Set());\r\n }\r\n this.listeners.get(event)!.add(callback);\r\n return () => this.off(event, callback);\r\n }\r\n\r\n off<T = any>(event: string, callback: EventCallback<T>): void {\r\n if (this.listeners.has(event)) {\r\n this.listeners.get(event)!.delete(callback);\r\n }\r\n }\r\n\r\n async emit<T = any>(event: string, data?: T): Promise<void> {\r\n if (this.listeners.has(event)) {\r\n const callbacks = Array.from(this.listeners.get(event)!);\r\n await Promise.all(callbacks.map(cb => {\r\n try {\r\n return Promise.resolve(cb(data));\r\n } catch (e) {\r\n console.error(`[EventBus] Error in listener for event \"${event}\":`, e);\r\n return Promise.resolve();\r\n }\r\n }));\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.listeners.clear();\r\n }\r\n}\r\n\r\n\r\n", "import { Session } from '../types';\r\n\r\n/**\r\n * JWT payload structure from the CMS token\r\n */\r\ninterface JWTPayload {\r\n sessionId: string;\r\n storeId: string;\r\n accountId: string;\r\n customerId: string;\r\n role: 'authenticated' | 'anonymous';\r\n iat?: number;\r\n exp?: number;\r\n}\r\n\r\n/**\r\n * Decode a JWT token to extract session information\r\n * This is a simple client-side decoder - do not use for security validation\r\n */\r\nexport function decodeJWTClient(token: string): Session | null {\r\n try {\r\n // Split the token into parts\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n console.error('Invalid JWT token format');\r\n return null;\r\n }\r\n\r\n // Decode the payload (second part)\r\n const payload = parts[1];\r\n\r\n // Add padding if needed\r\n const paddedPayload = payload + '='.repeat((4 - (payload.length % 4)) % 4);\r\n\r\n // Decode base64\r\n const decoded = atob(paddedPayload);\r\n\r\n // Parse JSON\r\n const parsedPayload: JWTPayload = JSON.parse(decoded);\r\n\r\n // Check if token is expired\r\n if (parsedPayload.exp && Date.now() >= parsedPayload.exp * 1000) {\r\n console.warn('JWT token is expired');\r\n return null;\r\n }\r\n\r\n // Return session data\r\n return {\r\n sessionId: parsedPayload.sessionId,\r\n storeId: parsedPayload.storeId,\r\n accountId: parsedPayload.accountId,\r\n customerId: parsedPayload.customerId,\r\n role: parsedPayload.role,\r\n isValid: true,\r\n isLoading: false,\r\n };\r\n } catch (error) {\r\n console.error('Failed to decode JWT token:', error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Check if a JWT token is expired\r\n */\r\nexport function isTokenExpired(token: string): boolean {\r\n try {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) return true;\r\n\r\n const payload = parts[1];\r\n const paddedPayload = payload + '='.repeat((4 - (payload.length % 4)) % 4);\r\n const decoded = atob(paddedPayload);\r\n const parsedPayload: JWTPayload = JSON.parse(decoded);\r\n\r\n if (parsedPayload.exp) {\r\n return Date.now() >= parsedPayload.exp * 1000;\r\n }\r\n\r\n return false;\r\n } catch (error) {\r\n console.error('Failed to check token expiration:', error);\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Get token expiration time\r\n */\r\nexport function getTokenExpiration(token: string): Date | null {\r\n try {\r\n const parts = token.split('.');\r\n if (parts.length !== 3) return null;\r\n\r\n const payload = parts[1];\r\n const paddedPayload = payload + '='.repeat((4 - (payload.length % 4)) % 4);\r\n const decoded = atob(paddedPayload);\r\n const parsedPayload: JWTPayload = JSON.parse(decoded);\r\n\r\n if (parsedPayload.exp) {\r\n return new Date(parsedPayload.exp * 1000);\r\n }\r\n\r\n return null;\r\n } catch (error) {\r\n console.error('Failed to get token expiration:', error);\r\n return null;\r\n }\r\n}\r\n\r\n", "/**\r\n * Plugin Configuration Utility Functions\r\n * Pure functions for plugin configuration management\r\n */\r\n\r\nimport { isLocalEnvironment } from '../config/environment';\r\nimport { resolveEnvValue } from './env';\r\n\r\nexport type PluginConfig<TConfig = Record<string, any>> = {\r\n storeId?: string;\r\n accountId?: string;\r\n basePath?: string;\r\n config?: any;\r\n staticResources?: Record<string, any>; // NEW: Static resources for local dev\r\n // Common config properties that plugins expect\r\n productId?: string;\r\n variants?: Record<string, string>;\r\n prices?: Record<string, any>;\r\n defaultCurrency?: string;\r\n hidePriceId?: string;\r\n upsellId?: string;\r\n googleApiKey?: string;\r\n} & TConfig;\r\n\r\nexport type RawPluginConfig<TConfig = Record<string, any>> = {\r\n storeId?: string;\r\n accountId?: string;\r\n basePath?: string;\r\n config?: any;\r\n} & TConfig;\r\n\r\n/**\r\n * Load local development configuration\r\n */\r\nconst loadLocalDevConfig = async (configVariant = 'default'): Promise<PluginConfig | null> => {\r\n try {\r\n // Check for explicit environment override\r\n const env = resolveEnvValue('TAGADA_ENV') || resolveEnvValue('TAGADA_ENVIRONMENT');\r\n if (env === 'production') {\r\n // Skip local config loading if explicitly in production mode\r\n return null;\r\n }\r\n\r\n // Only try to load local config in TRUE local development (not deployed CDN instances)\r\n // Exclude CDN subdomains (e.g., instance-id.cdn.localhost)\r\n if (!isLocalEnvironment(true)) {\r\n return null;\r\n }\r\n\r\n // Load local store/account config\r\n const localResponse = await fetch('/.local.json');\r\n if (!localResponse.ok) {\r\n return null;\r\n }\r\n const localConfig = await localResponse.json();\r\n\r\n // Load deployment config (specified variant or fallback to default)\r\n let config: Record<string, any> = {};\r\n let configLoaded = false;\r\n\r\n try {\r\n // Try .tgd.json first (new format), then fallback to .json\r\n let deploymentResponse = await fetch(`/config/${configVariant}.tgd.json`);\r\n if (!deploymentResponse.ok) {\r\n deploymentResponse = await fetch(`/config/${configVariant}.json`);\r\n }\r\n\r\n if (deploymentResponse.ok) {\r\n config = await deploymentResponse.json();\r\n configLoaded = true;\r\n }\r\n } catch {\r\n // Config fetch failed, will try fallback\r\n }\r\n\r\n // If config didn't load and it's not 'default', try fallback to default\r\n if (!configLoaded && configVariant !== 'default') {\r\n console.warn(`\u26A0\uFE0F Config variant '${configVariant}' not found, falling back to 'default'`);\r\n try {\r\n let defaultResponse = await fetch('/config/default.tgd.json');\r\n if (!defaultResponse.ok) {\r\n defaultResponse = await fetch('/config/default.json');\r\n }\r\n\r\n if (defaultResponse.ok) {\r\n config = await defaultResponse.json();\r\n configLoaded = true;\r\n console.log(`\u2705 Fallback to 'default' config successful`);\r\n }\r\n } catch {\r\n // Default config also failed\r\n }\r\n }\r\n\r\n // Final warning if no config was loaded\r\n if (!configLoaded) {\r\n if (configVariant === 'default') {\r\n console.warn(`\u26A0\uFE0F No 'default' config found. Create /config/default.tgd.json`);\r\n } else {\r\n console.warn(`\u26A0\uFE0F Neither '${configVariant}' nor 'default' config found. Create /config/default.tgd.json`);\r\n }\r\n }\r\n\r\n const result = {\r\n storeId: localConfig.storeId,\r\n accountId: localConfig.accountId,\r\n basePath: localConfig.basePath,\r\n config,\r\n };\r\n\r\n console.log('\uD83D\uDEE0\uFE0F Using local development plugin config:', result);\r\n\r\n return result;\r\n } catch {\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Load static resources for local development\r\n * \r\n * Priority:\r\n * 1. /config/funnel.local.json (NEW - recommended)\r\n * 2. /config/resources.static.json (OLD - deprecated, for backward compatibility)\r\n */\r\nconst loadStaticResources = async (): Promise<Record<string, any> | null> => {\r\n try {\r\n // Check for explicit environment override\r\n const env = resolveEnvValue('TAGADA_ENV') || resolveEnvValue('TAGADA_ENVIRONMENT');\r\n if (env === 'production') {\r\n return null;\r\n }\r\n\r\n // Only try to load in TRUE local development (not deployed CDN instances)\r\n // Exclude CDN subdomains (e.g., instance-id.cdn.localhost)\r\n if (!isLocalEnvironment(true)) {\r\n return null;\r\n }\r\n\r\n // ============================================================\r\n // PRIORITY 1: NEW format - funnel.local.json\r\n // Also populates the stepConfig cache for getAssignedStepConfig()\r\n // ============================================================\r\n try {\r\n console.log('\uD83D\uDEE0\uFE0F [V2] Attempting to load /config/funnel.local.json...');\r\n const funnelResponse = await fetch('/config/funnel.local.json');\r\n if (funnelResponse.ok) {\r\n const funnelConfig = await funnelResponse.json();\r\n console.log('\uD83D\uDEE0\uFE0F [V2] \u2705 Loaded local funnel config (NEW format):', funnelConfig);\r\n \r\n // Also trigger loadLocalFunnelConfig to populate the cache\r\n // Import dynamically to avoid circular dependency\r\n const { loadLocalFunnelConfig } = await import('../funnelClient');\r\n await loadLocalFunnelConfig();\r\n \r\n // Return staticResources in the old format for backward compatibility\r\n // The new stepConfig system reads from funnel.local.json via getAssignedStepConfig()\r\n if (funnelConfig.staticResources) {\r\n // Transform flat format to old nested format for legacy compatibility\r\n const transformed: Record<string, any> = {};\r\n for (const [key, value] of Object.entries(funnelConfig.staticResources)) {\r\n transformed[key] = { id: value };\r\n }\r\n return transformed;\r\n }\r\n return null;\r\n }\r\n } catch (e) {\r\n console.log('\uD83D\uDEE0\uFE0F [V2] funnel.local.json not found, trying legacy format...');\r\n }\r\n\r\n // ============================================================\r\n // PRIORITY 2: OLD format - resources.static.json (deprecated)\r\n // ============================================================\r\n console.log('\uD83D\uDEE0\uFE0F [V2] Attempting to load /config/resources.static.json (legacy)...');\r\n const response = await fetch('/config/resources.static.json');\r\n if (!response.ok) {\r\n console.log('\uD83D\uDEE0\uFE0F [V2] No local static resources found');\r\n return null;\r\n }\r\n\r\n const staticResources = await response.json();\r\n console.log('\uD83D\uDEE0\uFE0F [V2] \u2705 Loaded legacy static resources:', staticResources);\r\n return staticResources;\r\n } catch (error) {\r\n console.error('\uD83D\uDEE0\uFE0F [V2] \u274C Error loading static resources:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Helper to get content from meta tag\r\n */\r\nconst getMetaContent = (name: string): string | undefined => {\r\n if (typeof document === 'undefined') return undefined;\r\n const metaTag = document.querySelector(`meta[name=\"${name}\"]`);\r\n return metaTag?.getAttribute('content') || undefined;\r\n};\r\n\r\n/**\r\n * Read config from window global (preferred) or fall back to x-plugin-config meta tag\r\n * (retrocompat with old deployments that still inject the meta tag).\r\n */\r\nconst readWindowConfig = (): Record<string, any> => {\r\n if (typeof window !== 'undefined' && (window as any).__TAGADA_PLUGIN_CONFIG__) {\r\n return (window as any).__TAGADA_PLUGIN_CONFIG__;\r\n }\r\n try {\r\n const encoded = getMetaContent('x-plugin-config');\r\n if (encoded) return JSON.parse(decodeURIComponent(encoded));\r\n } catch { /* ignore */ }\r\n return {};\r\n};\r\n\r\n/**\r\n * Synchronously get plugin config from meta tags\r\n * This is a lightweight sync alternative to loadPluginConfig\r\n * Use this when you need immediate config access (e.g., in CDN bundles)\r\n * \r\n * @returns Plugin config from meta tags or defaults\r\n */\r\nexport function getPluginConfig(): PluginConfig {\r\n if (typeof document === 'undefined') {\r\n return { basePath: '/', config: {} };\r\n }\r\n\r\n const storeId = getMetaContent('x-plugin-store-id');\r\n const accountId = getMetaContent('x-plugin-account-id');\r\n const basePath = getMetaContent('x-plugin-base-path') || '/';\r\n\r\n const config = readWindowConfig();\r\n\r\n return { storeId, accountId, basePath, config };\r\n}\r\n\r\n/**\r\n * Load production config from meta tags (HIGHEST PRIORITY)\r\n * Meta tags are injected by the plugin middleware during HTML serving\r\n * This avoids making an additional HEAD request (~300ms savings)\r\n * \r\n * Returns null if meta tags are not present (not in production deployment)\r\n */\r\nconst loadProductionConfig = async (): Promise<PluginConfig | null> => {\r\n try {\r\n // Check if we're in a browser environment\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n\r\n // Read store/account info from meta tags (injected by middleware)\r\n const storeId = getMetaContent('x-plugin-store-id');\r\n const accountId = getMetaContent('x-plugin-account-id');\r\n\r\n // If no store ID in meta tags, this is not a production deployment with injected config\r\n if (!storeId) {\r\n return null;\r\n }\r\n\r\n const basePath = getMetaContent('x-plugin-base-path') || '/';\r\n\r\n const config = readWindowConfig();\r\n\r\n // Final validation\r\n if (!accountId) {\r\n console.warn('\u26A0\uFE0F Plugin config: Account ID not found in meta tags');\r\n }\r\n\r\n const result = { storeId, accountId, basePath, config };\r\n console.log('\uD83D\uDE80 [HIGHEST PRIORITY] Plugin config loaded from meta tags (runtime injected config):', {\r\n storeId,\r\n accountId,\r\n basePath,\r\n configKeys: Object.keys(config),\r\n configSize: JSON.stringify(config).length\r\n });\r\n\r\n return result;\r\n } catch (error) {\r\n console.warn('\u26A0\uFE0F Error loading production config from meta tags:', error);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Core plugin config loading function\r\n * \r\n * PRIORITY ORDER (highest to lowest):\r\n * 1. Injected meta tags (runtime config) - ALWAYS CHECK FIRST\r\n * 2. Raw config parameter (programmatic override)\r\n * 3. Environment variables (build-time config)\r\n * 4. Local dev files (.local.json + config files)\r\n * 5. Defaults\r\n */\r\nexport const loadPluginConfig = async (\r\n configVariant = 'default',\r\n rawConfig?: RawPluginConfig,\r\n): Promise<PluginConfig> => {\r\n console.log('\uD83D\uDD27 [V2] loadPluginConfig called with variant:', configVariant);\r\n\r\n // Load static resources first (only in local dev)\r\n const staticResources = await loadStaticResources();\r\n\r\n // ============================================================\r\n // PRIORITY 1: Check meta tags FIRST (runtime injected config)\r\n // This ensures deployed plugins always use injected config\r\n // ============================================================\r\n const productionConfig = await loadProductionConfig();\r\n if (productionConfig) {\r\n const result = {\r\n ...productionConfig,\r\n staticResources: staticResources ?? undefined,\r\n };\r\n console.log('\u2705 [V2] Using INJECTED config from meta tags (HIGHEST PRIORITY)');\r\n return result;\r\n }\r\n\r\n // ============================================================\r\n // PRIORITY 2: Raw config parameter (programmatic override)\r\n // ============================================================\r\n if (rawConfig) {\r\n const result = {\r\n storeId: rawConfig.storeId,\r\n accountId: rawConfig.accountId,\r\n basePath: rawConfig.basePath ?? '/',\r\n config: rawConfig.config ?? {},\r\n staticResources: staticResources ?? undefined,\r\n };\r\n console.log('\u2705 [V2] Using raw config parameter (PRIORITY 2)');\r\n return result;\r\n }\r\n\r\n // ============================================================\r\n // PRIORITY 3: Environment variables (build-time config)\r\n // Only in localhost - production should use meta tags\r\n // ============================================================\r\n const envConfig = await createRawPluginConfig();\r\n if (envConfig) {\r\n const result = {\r\n ...envConfig,\r\n staticResources: staticResources ?? undefined,\r\n };\r\n console.log('\u2705 [V2] Using environment variables config (PRIORITY 3 - build time)');\r\n return result;\r\n }\r\n\r\n // ============================================================\r\n // PRIORITY 4: Local development config files\r\n // ============================================================\r\n const localConfig = await loadLocalDevConfig(configVariant);\r\n if (localConfig) {\r\n const result = {\r\n ...localConfig,\r\n staticResources: staticResources ?? undefined,\r\n };\r\n console.log('\u2705 [V2] Using local dev config files (PRIORITY 4)');\r\n return result;\r\n }\r\n\r\n // ============================================================\r\n // PRIORITY 5: Defaults (no config found)\r\n // ============================================================\r\n console.warn('\u26A0\uFE0F [V2] No plugin config found - using defaults');\r\n return {\r\n basePath: '/',\r\n config: {},\r\n staticResources: staticResources ?? undefined,\r\n };\r\n};\r\n/**\r\n * Helper to load local config file for development (from /config directory)\r\n * Returns the config object that can be passed to TagadaProvider\r\n */\r\nexport async function loadLocalConfig(configName: string = 'default', defaultConfig?: any): Promise<Record<string, unknown> | null> {\r\n try {\r\n // Only load in localhost\r\n if (!isLocalEnvironment()) {\r\n return null;\r\n }\r\n\r\n if (defaultConfig) {\r\n return defaultConfig;\r\n }\r\n\r\n // Try .tgd.json first, then .json, then .config.json\r\n const possiblePaths = [\r\n `/config/${configName}.config.json`,\r\n `/config/${configName}.tgd.json`,\r\n `/config/${configName}.json`,\r\n ];\r\n\r\n for (const path of possiblePaths) {\r\n try {\r\n const response = await fetch(path);\r\n if (response.ok) {\r\n const config = await response.json() as Record<string, unknown>;\r\n\r\n return config;\r\n }\r\n } catch {\r\n continue;\r\n }\r\n }\r\n\r\n\r\n console.warn(`\u26A0\uFE0F [loadLocalConfig] No config found for '${configName}'`);\r\n return null;\r\n } catch (error) {\r\n console.error('[loadLocalConfig] Error loading config:', error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * Creates a RawPluginConfig from environment variables (build-time config)\r\n * \r\n * This should ONLY be used when:\r\n * 1. Running in localhost development\r\n * 2. Meta tags are not present (not a deployed plugin)\r\n * \r\n * @returns A RawPluginConfig object or undefined if not applicable\r\n */\r\nexport async function createRawPluginConfig(): Promise<RawPluginConfig | undefined> {\r\n try {\r\n // Only run in true localhost - production MUST use meta tags\r\n if (!isLocalEnvironment()) {\r\n return undefined;\r\n }\r\n\r\n const storeId = resolveEnvValue('TAGADA_STORE_ID');\r\n const accountId = resolveEnvValue('TAGADA_ACCOUNT_ID');\r\n const basePath = resolveEnvValue('TAGADA_BASE_PATH');\r\n const configName = resolveEnvValue('TAGADA_CONFIG_NAME');\r\n\r\n if (!storeId || !accountId) {\r\n return undefined;\r\n }\r\n\r\n const resolvedConfig = await loadLocalConfig(configName);\r\n\r\n if (!resolvedConfig) {\r\n return undefined;\r\n }\r\n\r\n const rawConfig: RawPluginConfig = {\r\n storeId: storeId,\r\n accountId: accountId,\r\n basePath: basePath || '/',\r\n config: resolvedConfig,\r\n };\r\n\r\n console.log('\uD83D\uDEE0\uFE0F [createRawPluginConfig] Using environment variables (build-time config):', {\r\n hasStoreId: !!rawConfig.storeId,\r\n hasAccountId: !!rawConfig.accountId,\r\n basePath: rawConfig.basePath,\r\n hasConfig: !!rawConfig.config,\r\n });\r\n\r\n return rawConfig;\r\n } catch (error) {\r\n console.error('[createRawPluginConfig] Error creating config:', error);\r\n return undefined;\r\n }\r\n}\r\n\r\nexport class PluginConfigUtils {\r\n /**\r\n * Get plugin configuration from various sources\r\n */\r\n static getPluginConfig<TConfig = Record<string, any>>(\r\n rawConfig?: RawPluginConfig<TConfig>,\r\n context?: {\r\n storeId?: string;\r\n accountId?: string;\r\n basePath?: string;\r\n }\r\n ): PluginConfig<TConfig> {\r\n // Priority: rawConfig > context > defaults\r\n return {\r\n storeId: rawConfig?.storeId || context?.storeId,\r\n accountId: rawConfig?.accountId || context?.accountId,\r\n basePath: rawConfig?.basePath || context?.basePath || '/',\r\n config: rawConfig?.config || ({} as TConfig),\r\n } as PluginConfig<TConfig>;\r\n }\r\n\r\n /**\r\n * Validate plugin configuration\r\n */\r\n static validateConfig(config: PluginConfig): boolean {\r\n return !!(config.storeId && config.accountId);\r\n }\r\n}\r\n", "const DEFAULT_PREFIXES = ['', 'VITE_', 'REACT_APP_', 'NEXT_PUBLIC_'];\r\n\r\n/**\r\n * Resolves a value from multiple possible environment sources (Node, Vite, CRA, Next, window)\r\n * using a list of supported prefixes.\r\n */\r\nexport function resolveEnvValue(key: string, prefixes: string[] = DEFAULT_PREFIXES): string | undefined {\r\n for (const prefix of prefixes) {\r\n const envKey = prefix ? `${prefix}${key}` : key;\r\n\r\n if (typeof process !== 'undefined' && process?.env?.[envKey]) {\r\n console.log(`process.env[${envKey}]`, process.env[envKey]);\r\n return process.env[envKey];\r\n }\r\n\r\n if (typeof import.meta !== 'undefined' && (import.meta as any)?.env?.[envKey]) {\r\n console.log(`import.meta.env[${envKey}]`, (import.meta as any).env[envKey]);\r\n return (import.meta as any).env[envKey];\r\n }\r\n\r\n if (typeof window !== 'undefined' && (window as any)?.__TAGADA_ENV__?.[envKey]) {\r\n console.log(`window.__TAGADA_ENV__[${envKey}]`, (window as any).__TAGADA_ENV__[envKey]);\r\n return (window as any).__TAGADA_ENV__[envKey];\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n", "/**\r\n * Cross-Domain Auth Handoff Utilities\r\n * \r\n * Handles automatic resolution of authCode query parameters for seamless\r\n * cross-domain authentication.\r\n * \r\n * Flow:\r\n * 1. Check URL for authCode parameter\r\n * 2. If present, resolve it with backend\r\n * 3. Store the returned token (overrides any existing token)\r\n * 4. Clean the URL (remove authCode)\r\n * 5. Return resolved customer and context\r\n */\r\n\r\nimport { setClientToken } from './tokenStorage';\r\n\r\nexport interface AuthHandoffResolveResponse {\r\n sessionId: string;\r\n token: string;\r\n customer: {\r\n id: string;\r\n email?: string;\r\n firstName?: string;\r\n lastName?: string;\r\n role: 'authenticated' | 'anonymous';\r\n };\r\n context: Record<string, unknown>;\r\n}\r\n\r\n// Track in-flight and completed resolutions to prevent duplicates\r\nconst resolutionCache = new Map<string, Promise<AuthHandoffResolveResponse>>();\r\nconst resolvedCodes = new Set<string>();\r\n\r\n/**\r\n * Check if authCode is present in URL\r\n */\r\nexport function hasAuthCode(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.has('authCode');\r\n}\r\n\r\n/**\r\n * Get authCode from URL\r\n */\r\nexport function getAuthCode(): string | null {\r\n if (typeof window === 'undefined') return null;\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get('authCode');\r\n}\r\n\r\n/**\r\n * Check if a code has already been resolved\r\n */\r\nexport function isCodeAlreadyResolved(code: string): boolean {\r\n return resolvedCodes.has(code);\r\n}\r\n\r\n/**\r\n * Resolve auth handoff and return token + customer info\r\n * \r\n * This function:\r\n * 1. Calls POST /api/v1/cms/auth/resolve-handoff\r\n * 2. Stores the returned token (overrides existing)\r\n * 3. Cleans the URL (removes authCode)\r\n * 4. Returns customer and context data\r\n * \r\n * \uD83D\uDD12 Deduplication: Multiple calls with the same code will return the same promise\r\n * to prevent duplicate API requests (e.g., React StrictMode double-mounting)\r\n */\r\nexport async function resolveAuthHandoff(\r\n authCode: string,\r\n storeId: string,\r\n apiBaseUrl: string,\r\n debugMode = false\r\n): Promise<AuthHandoffResolveResponse> {\r\n // Check if already resolved\r\n if (resolvedCodes.has(authCode)) {\r\n if (debugMode) {\r\n console.log('[AuthHandoff] Code already resolved, skipping duplicate request');\r\n }\r\n throw new Error('Auth code already resolved');\r\n }\r\n\r\n // Check if resolution is in-flight\r\n const inFlightResolution = resolutionCache.get(authCode);\r\n if (inFlightResolution) {\r\n if (debugMode) {\r\n console.log('[AuthHandoff] Resolution already in progress, waiting for existing request');\r\n }\r\n return inFlightResolution;\r\n }\r\n\r\n if (debugMode) {\r\n console.log('[AuthHandoff] Resolving authCode:', authCode.substring(0, 15) + '...');\r\n }\r\n\r\n // Create resolution promise\r\n const resolutionPromise = (async () => {\r\n try {\r\n // Call resolve endpoint (no authentication required)\r\n const response = await fetch(`${apiBaseUrl}/api/v1/cms/auth/resolve-handoff`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n code: authCode,\r\n storeId,\r\n }),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({ message: 'Unknown error' }));\r\n throw new Error(errorData.message || `Failed to resolve auth handoff: ${response.status}`);\r\n }\r\n\r\n const data: AuthHandoffResolveResponse = await response.json();\r\n\r\n if (debugMode) {\r\n console.log('[AuthHandoff] \u2705 Resolved successfully:', {\r\n customerId: data.customer.id,\r\n role: data.customer.role,\r\n hasContext: Object.keys(data.context).length > 0,\r\n });\r\n }\r\n\r\n // Store token (overrides any existing token)\r\n if (debugMode) {\r\n console.log('[AuthHandoff] Storing new token (overriding existing)');\r\n }\r\n setClientToken(data.token);\r\n\r\n // Clean URL (remove authCode parameter)\r\n cleanAuthCodeFromUrl(debugMode);\r\n\r\n // Mark as resolved\r\n resolvedCodes.add(authCode);\r\n\r\n return data;\r\n } catch (error) {\r\n console.error('[AuthHandoff] \u274C Failed to resolve:', error);\r\n throw error;\r\n } finally {\r\n // Remove from in-flight cache after completion (success or failure)\r\n resolutionCache.delete(authCode);\r\n }\r\n })();\r\n\r\n // Cache the in-flight promise\r\n resolutionCache.set(authCode, resolutionPromise);\r\n\r\n return resolutionPromise;\r\n}\r\n\r\n/**\r\n * Remove authCode from URL without page reload\r\n * Uses history.replaceState to update URL cleanly\r\n */\r\nexport function cleanAuthCodeFromUrl(debugMode = false): void {\r\n if (typeof window === 'undefined') return;\r\n\r\n const url = new URL(window.location.href);\r\n\r\n if (url.searchParams.has('authCode')) {\r\n url.searchParams.delete('authCode');\r\n\r\n // Use replaceState to update URL without reload\r\n window.history.replaceState({}, '', url.pathname + url.search + url.hash);\r\n\r\n if (debugMode) {\r\n console.log('[AuthHandoff] Cleaned authCode from URL');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check if we should resolve authCode\r\n * Returns true if authCode is present and valid format\r\n */\r\nexport function shouldResolveAuthCode(): boolean {\r\n const authCode = getAuthCode();\r\n if (!authCode || !authCode.startsWith('ah_')) {\r\n return false;\r\n }\r\n\r\n // Don't resolve if already resolved\r\n if (resolvedCodes.has(authCode)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n", "/**\r\n * Checkout Resource Client\r\n * Axios-based API client for checkout endpoints\r\n */\r\n\r\nimport type { OrderAddress } from '../types';\r\nimport { ApiClient } from './apiClient';\r\n\r\nexport type PaymentMethodName = 'paypal' | 'card' | 'klarna' | 'zelle';\r\n\r\nexport interface CheckoutLineItem {\r\n externalProductId?: string | null;\r\n externalVariantId?: string | null;\r\n variantId?: string | null;\r\n priceId?: string | null;\r\n quantity: number;\r\n}\r\n\r\nexport interface CheckoutInitParams {\r\n lineItems: CheckoutLineItem[];\r\n cartToken?: string;\r\n promotionIds?: string[];\r\n returnUrl?: string;\r\n draft?: boolean;\r\n useCustomDomain?: boolean;\r\n customerMetadata?: Record<string, unknown>;\r\n metadata?: Record<string, unknown>;\r\n storeId?: string;\r\n customerId?: string;\r\n customer?: {\r\n currency?: string;\r\n locale?: string;\r\n };\r\n enabledOrderBumpOfferIds?: string[];\r\n}\r\n\r\nexport interface UpsellTrigger {\r\n id: string;\r\n type: string;\r\n productId: string | null;\r\n}\r\n\r\nexport interface OrderBumpOfferVariant {\r\n id: string;\r\n name: string;\r\n sku: string;\r\n imageUrl: string;\r\n active: boolean;\r\n default: boolean;\r\n createdAt: string;\r\n updatedAt: string;\r\n externalVariantId: string | null;\r\n description: string;\r\n currency: string | null;\r\n}\r\n\r\nexport interface OrderBumpOfferProduct {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface PriceCurrencyOption {\r\n rate: number;\r\n amount: number;\r\n lock: boolean;\r\n date: string;\r\n}\r\n\r\nexport interface OrderBumpOfferPrice {\r\n id: string;\r\n currencyOptions: Record<string, PriceCurrencyOption>;\r\n}\r\n\r\nexport interface CheckoutOrderBumpOffer {\r\n id: string;\r\n type: string;\r\n productId: string;\r\n variantId: string;\r\n priceId: string;\r\n titleTrans: Record<string, string>;\r\n descriptionTrans: Record<string, string>;\r\n overrideImageUrl: string | null;\r\n precheck: boolean;\r\n displayPrice: boolean;\r\n displayCompareAtPrice: boolean;\r\n compareAtPriceDiscount: number;\r\n quantity: number;\r\n variant: OrderBumpOfferVariant;\r\n product: OrderBumpOfferProduct;\r\n price: OrderBumpOfferPrice;\r\n}\r\n\r\nexport interface Upsell {\r\n id: string;\r\n type: string;\r\n enabled: boolean;\r\n triggers: UpsellTrigger[];\r\n orderBumpOffers: CheckoutOrderBumpOffer[];\r\n}\r\n\r\nexport interface Store {\r\n id: string;\r\n accountId: string;\r\n name: string;\r\n presentmentCurrencies: string[];\r\n chargeCurrencies: string[];\r\n upsells: Upsell[];\r\n emailDomains: string[];\r\n integrations: unknown[];\r\n}\r\n\r\nexport interface CheckoutSession {\r\n id: string;\r\n checkoutToken: string;\r\n status: string;\r\n storeId: string;\r\n store: Store;\r\n accountId: string;\r\n customerId: string;\r\n draft: boolean;\r\n createdAt: string;\r\n updatedAt: string;\r\n lastActiveDate: string;\r\n selectedPresentmentCurrency: string;\r\n shippingRate?: { id: string; [key: string]: unknown } | null;\r\n shippingRateId?: string;\r\n sessionLineItems?: Array<{ isOrderBump?: boolean; [key: string]: unknown }>;\r\n customer?: {\r\n email?: string;\r\n firstName?: string;\r\n lastName?: string;\r\n currency?: string;\r\n [key: string]: unknown;\r\n };\r\n shippingAddress?: {\r\n firstName?: string;\r\n lastName?: string;\r\n address1?: string;\r\n address2?: string;\r\n city?: string;\r\n state?: string;\r\n postal?: string;\r\n country?: string;\r\n phone?: string;\r\n [key: string]: unknown;\r\n };\r\n billingAddress?: {\r\n firstName?: string;\r\n lastName?: string;\r\n address1?: string;\r\n address2?: string;\r\n city?: string;\r\n state?: string;\r\n postal?: string;\r\n country?: string;\r\n phone?: string;\r\n [key: string]: unknown;\r\n };\r\n metadata?: {\r\n cartCustomAttributes?: Array<{ name?: string; value?: string; [key: string]: unknown }>;\r\n clubProductId?: string;\r\n [key: string]: unknown;\r\n };\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface CheckoutSummaryItem {\r\n id: string;\r\n productId: string;\r\n variantId: string;\r\n priceId: string;\r\n product: {\r\n name: string;\r\n description: string;\r\n };\r\n variant: {\r\n name: string;\r\n description: string;\r\n imageUrl: string;\r\n grams: number;\r\n };\r\n sku: string;\r\n unitAmount: number;\r\n quantity: number;\r\n amount: number;\r\n adjustedAmount: number;\r\n currency: string;\r\n adjustments: CheckoutSessionPreviewAdjustment[];\r\n recurring: boolean;\r\n interval?: 'day' | 'week' | 'month' | 'year';\r\n intervalCount?: number;\r\n totalBillingCycles?: number;\r\n unitAmountAfterFirstCycle?: number;\r\n properties?: Record<string, unknown>;\r\n orderLineItemProduct: {\r\n name: string;\r\n };\r\n orderLineItemVariant: {\r\n name: string;\r\n imageUrl: string;\r\n };\r\n metadata: {\r\n originalIds: string[];\r\n isConsolidated: boolean;\r\n };\r\n}\r\n\r\nexport interface CheckoutSummary {\r\n currency: string;\r\n items: CheckoutSummaryItem[];\r\n subtotalAmount: number;\r\n subtotalAdjustedAmount: number;\r\n shippingCost: number;\r\n shippingCostIsFree: boolean;\r\n totalAmount: number;\r\n totalAdjustedAmount: number;\r\n totalPromotionAmount: number;\r\n totalTaxAmount: number;\r\n lineItemsPromotionAmount: number;\r\n lineItemsTaxAmount: number;\r\n totalWeight: number;\r\n _consolidated: boolean;\r\n adjustments: {\r\n type: string;\r\n description: string;\r\n amount: number;\r\n }[];\r\n}\r\n\r\nexport interface CheckoutSessionPreviewAdjustment {\r\n id?: string;\r\n type: 'Promotion' | 'Tax' | 'Shipping';\r\n description: string;\r\n level: 'Order' | 'LineItem';\r\n sourceId: string;\r\n amount: number;\r\n currency: string;\r\n}\r\n\r\nexport interface CheckoutSessionPreviewItem {\r\n id: string;\r\n productId: string;\r\n product: {\r\n name: string;\r\n description: string;\r\n };\r\n variantId: string;\r\n variant: {\r\n name: string;\r\n description: string;\r\n imageUrl: string;\r\n grams: number;\r\n };\r\n priceId: string;\r\n sku: string;\r\n unitAmount: number;\r\n quantity: number;\r\n amount: number;\r\n adjustedAmount: number;\r\n currency: string;\r\n adjustments: CheckoutSessionPreviewAdjustment[];\r\n recurring?: boolean;\r\n rebillMode?: 'auth' | 'capture';\r\n rebillStepIntervalMs?: number;\r\n interval?: 'day' | 'week' | 'month' | 'year';\r\n intervalCount?: number;\r\n totalBillingCycles?: number;\r\n unitAmountAfterFirstCycle?: number;\r\n subscriptionSettings?: Record<string, unknown>;\r\n properties?: Record<string, unknown>;\r\n orderLineItemProduct: {\r\n name: string | null;\r\n } | null;\r\n orderLineItemVariant: {\r\n name: string | null;\r\n imageUrl: string | null;\r\n } | null;\r\n}\r\n\r\nexport interface CheckoutSessionPreview {\r\n items: CheckoutSessionPreviewItem[];\r\n adjustments: CheckoutSessionPreviewAdjustment[];\r\n totalAmount: number;\r\n totalAdjustedAmount: number;\r\n totalPromotionAmount: number;\r\n}\r\n\r\nexport interface PromotionAction {\r\n id: string;\r\n adjustmentAmount?: Record<string, { amount: number; [key: string]: unknown }>;\r\n adjustmentPercentage?: number;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface Promotion {\r\n id: string;\r\n name: string;\r\n description: string | null;\r\n type: string;\r\n rules: Record<string, unknown>[];\r\n actions: PromotionAction[];\r\n}\r\n\r\n\r\nexport interface CheckoutData {\r\n checkoutSession: CheckoutSession;\r\n customerIsClubMember: boolean;\r\n clubProductId?: string;\r\n summary: CheckoutSummary;\r\n availablePromotions: Promotion[];\r\n}\r\n\r\nexport class CheckoutResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Initialize a new checkout session (sync mode)\r\n * Response time: 2-5 seconds (full processing)\r\n */\r\n async initCheckout(params: CheckoutInitParams): Promise<{\r\n checkoutUrl: string;\r\n checkoutSession: CheckoutSession;\r\n checkoutToken: string;\r\n }> {\r\n // Pass all params including customerId to prevent duplicate customer creation\r\n return this.apiClient.post('/api/v1/checkout/session/init', params);\r\n }\r\n\r\n /**\r\n * Initialize a new checkout session (async mode) \u26A1\r\n * Response time: ~50ms (20-50x faster!)\r\n * \r\n * Returns checkoutToken immediately, background job completes processing.\r\n * Use getCheckout() to fetch full session data - it auto-waits for completion.\r\n * \r\n * @example\r\n * // Fast init\r\n * const { checkoutToken } = await checkout.initCheckoutAsync(params);\r\n * \r\n * // Redirect user immediately\r\n * window.location.href = `/checkout/${checkoutToken}/op`;\r\n * \r\n * // By the time page loads, background processing is usually complete\r\n */\r\n async initCheckoutAsync(params: CheckoutInitParams): Promise<{\r\n checkoutToken: string;\r\n customerId: string;\r\n status: 'processing';\r\n }> {\r\n return this.apiClient.post('/api/v1/checkout/session/init-async', params);\r\n }\r\n\r\n /**\r\n * Preload checkout session (ultra-fast background pre-computation) \u26A1\u26A1\u26A1\r\n * \r\n * This is the recommended way to handle cart changes or \"Buy Now\" intent.\r\n * It pre-computes everything (checkoutToken, navigation URL, CMS session)\r\n * before the user even clicks the checkout button.\r\n * \r\n * The SDK automatically gets funnelSessionId from FunnelClient if provided.\r\n * Only FunnelClient knows how to properly extract funnelSessionId (from state, URL, cookies, etc.)\r\n * \r\n * @param params - Checkout and funnel parameters\r\n * @param getFunnelSessionId - Optional function to get funnelSessionId from FunnelClient\r\n * This maintains separation of concerns - only FunnelClient knows how to get it\r\n * \r\n * @returns { checkoutToken, customerId, navigationUrl }\r\n */\r\n async preloadCheckout(\r\n params: CheckoutInitParams & {\r\n funnelSessionId?: string;\r\n currentUrl?: string;\r\n funnelStepId?: string;\r\n funnelVariantId?: string;\r\n navigationEvent?: string | { type: string; data?: Record<string, unknown> };\r\n navigationOptions?: Record<string, unknown>;\r\n },\r\n getFunnelSessionId?: () => string | null | undefined\r\n ): Promise<{\r\n checkoutToken: string;\r\n customerId: string;\r\n navigationUrl: string | null;\r\n funnelStepId?: string;\r\n }> {\r\n // \u26A1 GET FUNNEL SESSION ID: Only FunnelClient knows how to properly get it\r\n // Priority: explicit param > FunnelClient > backend fallback (via currentUrl)\r\n let funnelSessionId = params.funnelSessionId;\r\n\r\n if (!funnelSessionId && getFunnelSessionId) {\r\n // Let FunnelClient handle extraction (from state, URL, cookies, etc.)\r\n funnelSessionId = getFunnelSessionId() || undefined;\r\n }\r\n\r\n // Format navigationEvent if it's a string\r\n const navigationEvent = typeof params.navigationEvent === 'string'\r\n ? { type: params.navigationEvent }\r\n : params.navigationEvent;\r\n\r\n // Build request - backend will also try to extract from currentUrl if not provided\r\n const requestParams = {\r\n ...params,\r\n ...(funnelSessionId && { funnelSessionId }),\r\n ...(navigationEvent && { navigationEvent }),\r\n // Ensure currentUrl is always set for backend extraction fallback\r\n currentUrl: params.currentUrl || (typeof window !== 'undefined' ? window.location.href : undefined),\r\n };\r\n\r\n return this.apiClient.post('/api/v1/checkout/session/preload', requestParams);\r\n }\r\n\r\n /**\r\n * Check async checkout processing status (instant, no waiting)\r\n * Perfect for polling or checking if background job completed\r\n */\r\n async checkAsyncStatus(checkoutToken: string): Promise<{\r\n isAsync: boolean;\r\n isProcessing: boolean;\r\n isComplete: boolean;\r\n hasError: boolean;\r\n error?: string;\r\n }> {\r\n return this.apiClient.get(`/api/public/v1/checkout/async-status/${checkoutToken}`);\r\n }\r\n\r\n /**\r\n * Get checkout session by token\r\n * \r\n * SDK automatically waits for async completion (skipAsyncWait=false) for seamless UX.\r\n * This ensures async checkout sessions are fully processed before returning data.\r\n * \r\n * If you need to skip waiting (e.g., for manual polling), use getCheckoutRaw() instead.\r\n */\r\n async getCheckout(checkoutToken: string, currency?: string): Promise<CheckoutData> {\r\n const queryParams = new URLSearchParams();\r\n if (currency) {\r\n queryParams.set('currency', currency);\r\n }\r\n // SDK explicitly waits for async completion (default is skip=true for retro compat)\r\n queryParams.set('skipAsyncWait', 'false');\r\n\r\n const url = `/api/v1/checkout-sessions/${checkoutToken}/v2${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\r\n\r\n return this.apiClient.get(url);\r\n }\r\n\r\n /**\r\n * Get checkout session by token without waiting for async completion\r\n * Useful for manual polling scenarios\r\n */\r\n async getCheckoutRaw(checkoutToken: string, currency?: string): Promise<CheckoutData> {\r\n const queryParams = new URLSearchParams();\r\n if (currency) {\r\n queryParams.set('currency', currency);\r\n }\r\n queryParams.set('skipAsyncWait', 'true');\r\n\r\n const url = `/api/v1/checkout-sessions/${checkoutToken}/v2${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\r\n\r\n return this.apiClient.get(url);\r\n }\r\n\r\n /**\r\n * Update checkout address\r\n */\r\n async updateAddress(\r\n checkoutSessionId: string,\r\n data: {\r\n shippingAddress: Partial<OrderAddress>;\r\n billingAddress?: Partial<OrderAddress>;\r\n },\r\n ): Promise<{\r\n success: boolean;\r\n errors?: Record<string, { message: string; type: string }>;\r\n shippingCountryChanged: boolean;\r\n billingCountryChanged: boolean;\r\n }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/address`, {\r\n data,\r\n });\r\n }\r\n\r\n /**\r\n * Set checkout info\r\n */\r\n async setCheckoutInfo(\r\n checkoutSessionId: string,\r\n data: {\r\n shippingAddress: Partial<OrderAddress>;\r\n billingAddress?: Partial<OrderAddress>;\r\n differentBillingAddress?: boolean;\r\n },\r\n ): Promise<{\r\n success: boolean;\r\n errors?: Record<string, { message: string; type: string }>;\r\n shippingCountryChanged?: boolean;\r\n billingCountryChanged?: boolean;\r\n }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/checkout-info`, {\r\n shippingAddress: data.shippingAddress,\r\n billingAddress: data.differentBillingAddress ? data.billingAddress : data.shippingAddress,\r\n differentBillingAddress: data.differentBillingAddress || false,\r\n });\r\n }\r\n\r\n /**\r\n * Apply promotion code\r\n */\r\n async applyPromotionCode(\r\n checkoutSessionId: string,\r\n code: string,\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/promotions/apply`, {\r\n code,\r\n });\r\n }\r\n\r\n /**\r\n * Remove promotion\r\n */\r\n async removePromotion(\r\n checkoutSessionId: string,\r\n promotionId: string,\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.delete(`/api/v1/checkout-sessions/${checkoutSessionId}/promotions/${promotionId}`);\r\n }\r\n\r\n /**\r\n * Get applied promotions\r\n */\r\n async getAppliedPromotions(checkoutSessionId: string): Promise<Promotion[]> {\r\n return this.apiClient.get(`/api/v1/checkout-sessions/${checkoutSessionId}/promotions`);\r\n }\r\n\r\n /**\r\n * Replace all session line items (full rewrite)\r\n */\r\n async replaceSessionLineItems(\r\n checkoutSessionId: string,\r\n lineItems: CheckoutLineItem[],\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/line-items`, {\r\n lineItems,\r\n });\r\n }\r\n\r\n /**\r\n * Update line items\r\n */\r\n async updateLineItems(\r\n checkoutSessionId: string,\r\n lineItems: CheckoutLineItem[],\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/line-items`, {\r\n lineItems,\r\n });\r\n }\r\n\r\n /**\r\n * Add line items\r\n */\r\n async addLineItems(\r\n checkoutSessionId: string,\r\n lineItems: CheckoutLineItem[],\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/line-items/add`, {\r\n lineItems,\r\n });\r\n }\r\n\r\n /**\r\n * Remove line items\r\n */\r\n async removeLineItems(\r\n checkoutSessionId: string,\r\n lineItems: { variantId: string; quantity?: number }[],\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/line-items/remove`, {\r\n lineItems,\r\n });\r\n }\r\n\r\n /**\r\n * Set item quantity\r\n */\r\n async setItemQuantity(\r\n checkoutSessionId: string,\r\n variantId: string,\r\n quantity: number,\r\n priceId?: string,\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/line-items/set-quantity`, {\r\n variantId,\r\n quantity,\r\n priceId,\r\n });\r\n }\r\n\r\n /**\r\n * Toggle order bump\r\n */\r\n async toggleOrderBump(\r\n checkoutSessionId: string,\r\n orderBumpOfferId: string,\r\n selected: boolean,\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/toggle-order-bump`, {\r\n orderBumpOfferId,\r\n selected,\r\n });\r\n }\r\n\r\n /**\r\n * Update customer\r\n */\r\n async updateCustomer(\r\n checkoutSessionId: string,\r\n data: {\r\n email: string;\r\n acceptsMarketing?: boolean;\r\n },\r\n ): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/customer`, data);\r\n }\r\n\r\n /**\r\n * Update customer and session info\r\n */\r\n async updateCustomerAndSessionInfo(\r\n checkoutSessionId: string,\r\n data: {\r\n customerData: {\r\n email: string;\r\n acceptsMarketing?: boolean;\r\n };\r\n shippingAddress: Partial<OrderAddress>;\r\n billingAddress?: Partial<OrderAddress>;\r\n differentBillingAddress?: boolean;\r\n },\r\n ): Promise<{\r\n success: boolean;\r\n errors?: Record<string, { message: string; type: string }>;\r\n shippingCountryChanged?: boolean;\r\n billingCountryChanged?: boolean;\r\n }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${checkoutSessionId}/customer-and-session-info`, data);\r\n }\r\n\r\n async previewCheckoutSession(params: {\r\n lineItems: CheckoutLineItem[];\r\n storeId?: string;\r\n currency: string;\r\n promotionIds?: string[];\r\n }): Promise<{\r\n success: boolean;\r\n preview: CheckoutSessionPreview;\r\n }> {\r\n return this.apiClient.post('/api/v1/checkout-sessions/preview', params);\r\n }\r\n\r\n /**\r\n * Set selected payment method for a checkout session\r\n */\r\n async setPaymentMethod(\r\n checkoutSessionId: string,\r\n paymentMethodName: PaymentMethodName,\r\n ): Promise<{ success: boolean }> {\r\n return this.apiClient.post(\r\n `/api/v1/checkout-sessions/${checkoutSessionId}/payment-method`,\r\n { paymentMethodName },\r\n );\r\n }\r\n}\r\n", "/**\r\n * Basis Theory Configuration\r\n * \r\n * API keys and tenant IDs for Basis Theory integration\r\n * Key selection based on environment (production vs staging/dev)\r\n */\r\n\r\nexport const BASIS_THEORY_CONFIG = {\r\n production: {\r\n tenantId: 'b1636929-db11-4b01-b2c2-6a97b3444061',\r\n publicKey: 'key_prod_us_pub_PNMB2AiaECJ463K6QAPNU6',\r\n },\r\n test: {\r\n tenantId: '99821999-faf5-4427-a92c-9267cb930540',\r\n publicKey: 'key_test_us_pub_VExdfbFQARn821iqP8zNaq',\r\n },\r\n} as const;\r\n\r\n/**\r\n * Get Basis Theory keys based on environment\r\n * \r\n * @param isProduction - Whether the environment is production\r\n * @returns Object with tenantId and apiKey\r\n */\r\nexport function getBasisTheoryKeys(isProduction: boolean) {\r\n const config = isProduction ? BASIS_THEORY_CONFIG.production : BASIS_THEORY_CONFIG.test;\r\n\r\n return {\r\n tenantId: config.tenantId,\r\n apiKey: config.publicKey,\r\n };\r\n}\r\n\r\n", "/**\r\n * Payment processor configuration for TagadaPay SDK\r\n * These are public API keys - safe to embed in client-side code\r\n */\r\n\r\nexport interface PaymentConfig {\r\n basisTheory: {\r\n publicApiKey: string;\r\n environment: 'sandbox' | 'production';\r\n };\r\n}\r\n\r\n/**\r\n * Payment configurations for different environments\r\n */\r\nexport const PAYMENT_CONFIGS: Record<string, PaymentConfig> = {\r\n production: {\r\n basisTheory: {\r\n // TODO: Replace with actual production BasisTheory public API key\r\n publicApiKey: 'key_prod_us_pub_PNMB2AiaECJ463K6QAPNU6',\r\n environment: 'production',\r\n },\r\n },\r\n development: {\r\n basisTheory: {\r\n // Embedded test API key for development\r\n publicApiKey: 'key_test_us_pub_VExdfbFQARn821iqP8zNaq',\r\n environment: 'sandbox',\r\n },\r\n },\r\n local: {\r\n basisTheory: {\r\n // Embedded test API key for local development\r\n publicApiKey: 'key_test_us_pub_VExdfbFQARn821iqP8zNaq',\r\n environment: 'sandbox',\r\n },\r\n },\r\n // Default fallback configuration\r\n default: {\r\n basisTheory: {\r\n // Embedded test API key as fallback\r\n publicApiKey: 'key_test_us_pub_VExdfbFQARn821iqP8zNaq',\r\n environment: 'sandbox',\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * Get payment configuration based on environment\r\n */\r\nexport function getPaymentConfig(environment = 'local'): PaymentConfig {\r\n return PAYMENT_CONFIGS[environment] || PAYMENT_CONFIGS.default || PAYMENT_CONFIGS.local;\r\n}\r\n\r\nimport { getBasisTheoryKeys } from '../../config/basisTheory';\r\n\r\n/**\r\n * Determine if the current hostname should use production BasisTheory.\r\n * \r\n * BT key selection is based ONLY on hostname \u2014 never on tagadaClientEnv overrides.\r\n * tagadaClientEnv controls which API server the SDK talks to, but BasisTheory\r\n * tokens must always match the backend's BT tenant.\r\n * \r\n * Production BT: *.tagadapay.com, custom domains (e.g. checkout.myboost.club)\r\n * Test BT: *.tagadapay.dev, app-dev.tagadapay.com, localhost, vercel.app, etc.\r\n */\r\nexport function isProductionBasisTheory(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n const hostname = window.location.hostname;\r\n\r\n // Dev backend under tagadapay.com \u2014 uses test BT\r\n if (hostname.includes('app-dev.tagadapay.com') || hostname.includes('cdn-dev.tagadapay.com')) {\r\n return false;\r\n }\r\n\r\n // Production and preprod share the same production BT tenant\r\n if (hostname.includes('tagadapay.com')) return true;\r\n\r\n // Dev/staging domains use test BT\r\n if (hostname.includes('tagadapay.dev')) return false;\r\n\r\n // Local development \u2014 test BT\r\n if (\r\n hostname === 'localhost' ||\r\n hostname.startsWith('127.') ||\r\n hostname.startsWith('192.168.') ||\r\n hostname.startsWith('10.') ||\r\n hostname.includes('.local') ||\r\n hostname === '' ||\r\n hostname === '0.0.0.0' ||\r\n hostname.includes('ngrok') ||\r\n hostname.includes('.loclx.io') ||\r\n hostname.includes('vercel.app') ||\r\n hostname.includes('netlify.app')\r\n ) {\r\n return false;\r\n }\r\n\r\n // Custom checkout domains (e.g. checkout.myboost.club) use production BT\r\n // to match the production backend's BT tenant\r\n return true;\r\n}\r\n\r\n/**\r\n * Get BasisTheory API key based on hostname detection.\r\n * Not affected by tagadaClientEnv overrides.\r\n */\r\nexport function getBasisTheoryApiKey(): string {\r\n const keys = getBasisTheoryKeys(isProductionBasisTheory());\r\n return keys.apiKey;\r\n}\r\n\r\n/**\r\n * Get BasisTheory tenant ID based on hostname detection.\r\n * Not affected by tagadaClientEnv overrides.\r\n */\r\nexport function getBasisTheoryTenantId(): string {\r\n const keys = getBasisTheoryKeys(isProductionBasisTheory());\r\n return keys.tenantId;\r\n}\r\n", "/**\r\n * Shipping Rates Resource Client\r\n * Axios-based API client for shipping rates endpoints\r\n */\r\n\r\nimport { ApiClient } from './apiClient';\r\n\r\nexport interface ShippingRate {\r\n id: string;\r\n shippingRateName: string;\r\n amount: number;\r\n currency: string;\r\n isFree: boolean;\r\n description?: string;\r\n highlighted?: boolean;\r\n icon?: string;\r\n isPickupPoint?: boolean;\r\n pickupPointCarriers?: string[];\r\n}\r\n\r\nexport interface ShippingRatesResponse {\r\n rates: ShippingRate[];\r\n forceCheckoutSessionRefetch?: boolean;\r\n}\r\n\r\nexport interface ShippingRatesPreviewParams {\r\n countryCode: string;\r\n stateCode?: string;\r\n}\r\n\r\nexport interface ShippingRatesPreviewResponse {\r\n rates: ShippingRate[];\r\n pickupPoint?: {\r\n apiKey: string | null;\r\n };\r\n}\r\n\r\nexport class ShippingRatesResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Get shipping rates for a checkout session\r\n */\r\n async getShippingRates(sessionId: string): Promise<ShippingRatesResponse> {\r\n return this.apiClient.get(`/api/v1/checkout-sessions/${sessionId}/shipping-rates`);\r\n }\r\n\r\n /**\r\n * Set selected shipping rate for a checkout session\r\n */\r\n async setShippingRate(\r\n sessionId: string,\r\n shippingRateId: string,\r\n ): Promise<{ success: boolean; error?: any }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${sessionId}/shipping-rate`, {\r\n shippingRateId,\r\n });\r\n }\r\n\r\n /**\r\n * Preview shipping rates for a country without updating session\r\n * Useful for showing rates before user enters email\r\n */\r\n async previewShippingRates(\r\n sessionId: string,\r\n params: ShippingRatesPreviewParams,\r\n ): Promise<ShippingRatesPreviewResponse> {\r\n const queryParams = new URLSearchParams({ countryCode: params.countryCode });\r\n if (params.stateCode) {\r\n queryParams.set('stateCode', params.stateCode);\r\n }\r\n return this.apiClient.get(\r\n `/api/v1/checkout-sessions/${sessionId}/shipping-rates/preview?${queryParams.toString()}`,\r\n );\r\n }\r\n}\r\n\r\n", "/**\r\n * Payments Resource Client\r\n * Axios-based API client for payment endpoints\r\n */\r\n\r\nimport { ApiClient } from './apiClient';\r\nimport type { Order } from '../types';\r\n\r\nexport interface Payment {\r\n id: string;\r\n status: string;\r\n subStatus: string;\r\n requireAction: 'none' | 'redirect' | 'redirect_to_payment' | 'error' | 'radar' | 'stripe_express_checkout';\r\n requireActionData?: {\r\n type: 'redirect' | 'redirect_to_payment' | 'threeds_auth' | 'processor_auth' | 'error' | 'stripe_radar' | 'finix_radar' | 'radar' | 'kesspay_auth' | 'trustflow_auth' | 'mastercard_auth' | 'stripe_express_checkout';\r\n url?: string;\r\n processed: boolean;\r\n processorId?: string;\r\n metadata?: {\r\n type: 'redirect' | 'redirect_to_payment' | 'stripe_radar' | 'finix_radar';\r\n redirect?: {\r\n redirectUrl: string;\r\n returnUrl: string;\r\n };\r\n threedsSession?: {\r\n externalSessionId: string;\r\n acsChallengeUrl: string;\r\n acsTransID: string;\r\n messageVersion: string;\r\n };\r\n radar?: {\r\n merchantId?: string;\r\n environment?: 'sandbox' | 'live';\r\n orderId?: string;\r\n publishableKey?: string;\r\n };\r\n stripeExpressCheckout?: {\r\n clientSecret: string;\r\n publishableKey?: string;\r\n };\r\n provider?: string;\r\n isTest?: boolean;\r\n };\r\n redirectUrl?: string;\r\n resumeToken?: string;\r\n message?: string;\r\n errorCode?: string;\r\n };\r\n order?: {\r\n id: string;\r\n checkoutSessionId: string;\r\n amount?: number;\r\n currency?: string;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface PaymentResponse {\r\n paymentId: string;\r\n payment: Payment;\r\n order?: Order | null;\r\n}\r\n\r\nexport interface PaymentInstrumentResponse {\r\n id: string;\r\n token: string;\r\n type: string;\r\n card?: {\r\n maskedCardNumber?: string;\r\n expirationMonth?: number;\r\n expirationYear?: number;\r\n brand?: string;\r\n };\r\n}\r\n\r\nexport interface PaymentInstrumentCustomer {\r\n id: string;\r\n type: 'card';\r\n card: {\r\n last4: string;\r\n exp_month: number;\r\n exp_year: number;\r\n brand: string;\r\n bin: string;\r\n };\r\n us_bank_account: null;\r\n sepa_debit: null;\r\n tokenizer: string;\r\n token: string;\r\n isDefault: boolean;\r\n isActive: boolean;\r\n metadata: Record<string, unknown>;\r\n customerId: string;\r\n accountId: string;\r\n createdAt: string;\r\n updatedAt: string;\r\n}\r\n\r\nexport type PaymentInstrumentCustomerResponse = PaymentInstrumentCustomer[];\r\n\r\nexport interface PaymentOptions {\r\n enableThreeds?: boolean;\r\n threedsProvider?: 'basis_theory';\r\n initiatedBy?: 'customer' | 'merchant';\r\n source?: 'upsell' | 'checkout' | 'offer' | 'missing_club' | 'forced';\r\n\r\n /**\r\n * Override the store's default payment flow\r\n * If not provided, the SDK will auto-read from stepConfig.paymentFlowId (if available)\r\n * If neither is set, the store's selectedPaymentFlowId will be used\r\n */\r\n paymentFlowId?: string;\r\n\r\n /**\r\n * For alternative payment methods (APM)\r\n * Processor ID to use for the payment\r\n */\r\n processorId?: string;\r\n\r\n /**\r\n * For alternative payment methods (APM)\r\n * Payment method type (e.g., 'klarna', 'afterpay', 'paypal')\r\n */\r\n paymentMethod?: string;\r\n\r\n // Legacy callbacks (deprecated - will be removed in future versions)\r\n /** @deprecated Use onPaymentSuccess instead - this will be removed in v3 */\r\n onSuccess?: (response: PaymentResponse) => void;\r\n /** @deprecated Use onPaymentFailed instead - this will be removed in v3 */\r\n onFailure?: (error: string) => void;\r\n onRequireAction?: (payment: Payment) => void;\r\n\r\n // Funnel-aligned callbacks (recommended - matches FunnelActionType conditions)\r\n /**\r\n * Called when payment succeeds (matches FunnelActionType.PAYMENT_SUCCESS)\r\n * Use this with useFunnel's next() to navigate to the next step\r\n * This replaces automatic redirects to /post or /thankyou\r\n */\r\n onPaymentSuccess?: (response: PaymentResponse) => void;\r\n\r\n /**\r\n * Called when payment fails (matches FunnelActionType.PAYMENT_FAILED)\r\n * Use this to handle retry logic, show errors, or trigger funnel failure flows\r\n */\r\n onPaymentFailed?: (error: { code: string; message: string; payment?: Payment }) => void;\r\n\r\n /**\r\n * Disable automatic redirects to /post or /thankyou (default: true)\r\n * Set to false only for legacy implementations without funnel orchestrator\r\n * The funnel orchestrator handles navigation automatically with useFunnel\r\n */\r\n disableAutoRedirect?: boolean;\r\n}\r\n\r\nexport interface CardPaymentMethod {\r\n cardNumber: string;\r\n expiryDate: string;\r\n cvc: string;\r\n cardholderName?: string;\r\n}\r\n\r\nexport interface ApplePayToken {\r\n id: string;\r\n type: string;\r\n card: {\r\n bin: string;\r\n last4: string;\r\n expiration_month: number;\r\n expiration_year: number;\r\n brand: string;\r\n };\r\n}\r\n\r\n/** Token response from BasisTheory SDK */\r\nexport interface BasisTheoryTokenResponse {\r\n id: string;\r\n type: string;\r\n enrichments?: {\r\n cardDetails?: {\r\n bin?: string;\r\n last4?: string;\r\n };\r\n };\r\n}\r\n\r\n/** External BasisTheory SDK instance shape (from @basis-theory/basis-theory-react) */\r\nexport interface BasisTheoryInstance {\r\n tokens: {\r\n create(data: Record<string, unknown>): Promise<BasisTheoryTokenResponse>;\r\n };\r\n}\r\n\r\nexport interface GooglePayToken {\r\n id: string;\r\n type: string;\r\n card: {\r\n bin: string;\r\n last4: string;\r\n expiration_month: number;\r\n expiration_year: number;\r\n brand: string;\r\n };\r\n details?: {\r\n auth_method?: string;\r\n [key: string]: unknown;\r\n };\r\n}\r\n\r\nexport interface PaymentInstrumentInput {\r\n type: string;\r\n token?: string;\r\n card?: {\r\n maskedCardNumber?: string;\r\n expirationMonth?: number;\r\n expirationYear?: number;\r\n bin?: string;\r\n last4?: string;\r\n brand?: string;\r\n };\r\n dpanType?: string;\r\n authMethod?: string;\r\n provider?: string;\r\n paymentMethod?: string;\r\n processorId?: string;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport class PaymentsResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Create payment instrument\r\n */\r\n async createPaymentInstrument(paymentInstrumentData: PaymentInstrumentInput): Promise<PaymentInstrumentResponse> {\r\n return this.apiClient.post('/api/v1/payment/create-payment-instrument', {\r\n paymentInstrumentData,\r\n });\r\n }\r\n\r\n /**\r\n * Create card payment instrument\r\n */\r\n async createCardPaymentInstrument(\r\n basisTheory: BasisTheoryInstance | undefined,\r\n cardData: CardPaymentMethod\r\n ): Promise<PaymentInstrumentResponse> {\r\n if (!basisTheory) {\r\n throw new Error('Payment processor not initialized');\r\n }\r\n\r\n console.log('Creating card payment instrument');\r\n\r\n // Create token using BasisTheory\r\n const btResponse = await basisTheory.tokens.create({\r\n type: 'card',\r\n data: {\r\n cvc: cardData.cvc,\r\n number: Number(cardData.cardNumber.replace(/\\s+/g, '')),\r\n ...this.getCardMonthAndYear(cardData.expiryDate),\r\n },\r\n metadata: {\r\n nonSensitiveField: 'nonSensitiveValue',\r\n },\r\n });\r\n\r\n // Create payment instrument through API\r\n const { expiration_month, expiration_year } = this.getCardMonthAndYear(cardData.expiryDate);\r\n const paymentInstrumentData = {\r\n type: btResponse.type,\r\n card: {\r\n maskedCardNumber: btResponse.enrichments?.cardDetails?.bin ?\r\n `${btResponse.enrichments.cardDetails.bin}****${btResponse.enrichments.cardDetails.last4}` :\r\n cardData.cardNumber.replace(/\\d(?=\\d{4})/g, '*'),\r\n expirationMonth: expiration_month,\r\n expirationYear: expiration_year,\r\n },\r\n token: btResponse.id,\r\n };\r\n\r\n const response = await this.apiClient.post(\r\n '/api/v1/payment/create-payment-instrument',\r\n { paymentInstrumentData }\r\n );\r\n\r\n console.log('Payment instrument created:', response);\r\n return response as PaymentInstrumentResponse;\r\n }\r\n\r\n /**\r\n * Create Apple Pay payment instrument\r\n */\r\n async createApplePayPaymentInstrument(\r\n basisTheory: BasisTheoryInstance | undefined,\r\n applePayToken: ApplePayToken\r\n ): Promise<PaymentInstrumentResponse> {\r\n if (!basisTheory) {\r\n throw new Error('Payment processor not initialized');\r\n }\r\n\r\n if (!applePayToken.id) {\r\n throw new Error('Apple Pay token is missing');\r\n }\r\n\r\n const paymentInstrumentData = {\r\n type: 'apple_pay',\r\n token: applePayToken.id,\r\n dpanType: applePayToken.type,\r\n card: {\r\n bin: applePayToken.card.bin,\r\n last4: applePayToken.card.last4,\r\n expirationMonth: applePayToken.card.expiration_month,\r\n expirationYear: applePayToken.card.expiration_year,\r\n brand: applePayToken.card.brand,\r\n },\r\n };\r\n\r\n const response = await this.apiClient.post(\r\n '/api/v1/payment/create-payment-instrument',\r\n { paymentInstrumentData }\r\n );\r\n\r\n return response as PaymentInstrumentResponse;\r\n }\r\n\r\n /**\r\n * Create Google Pay payment instrument\r\n */\r\n async createGooglePayPaymentInstrument(\r\n basisTheory: BasisTheoryInstance | undefined,\r\n googlePayToken: GooglePayToken\r\n ): Promise<PaymentInstrumentResponse> {\r\n if (!basisTheory) {\r\n throw new Error('Payment processor not initialized');\r\n }\r\n\r\n if (!googlePayToken.id) {\r\n throw new Error('Google Pay token is missing');\r\n }\r\n\r\n const paymentInstrumentData = {\r\n type: 'google_pay',\r\n token: googlePayToken.id,\r\n dpanType: googlePayToken.type,\r\n card: {\r\n bin: googlePayToken.card.bin,\r\n last4: googlePayToken.card.last4,\r\n expirationMonth: googlePayToken.card.expiration_month,\r\n expirationYear: googlePayToken.card.expiration_year,\r\n brand: googlePayToken.card.brand,\r\n },\r\n authMethod: googlePayToken?.details?.auth_method,\r\n };\r\n\r\n const response = await this.apiClient.post(\r\n '/api/v1/payment/create-payment-instrument',\r\n { paymentInstrumentData }\r\n );\r\n\r\n return response as PaymentInstrumentResponse;\r\n }\r\n\r\n /**\r\n * Create APM payment instrument (Klarna, Afterpay, PayPal, etc.)\r\n */\r\n async createApmPaymentInstrument(\r\n apmData: {\r\n provider: string;\r\n paymentMethod: string;\r\n processorId: string;\r\n }\r\n ): Promise<PaymentInstrumentResponse> {\r\n console.log('Creating APM payment instrument:', apmData);\r\n\r\n const paymentInstrumentData = {\r\n type: 'apm',\r\n provider: apmData.provider,\r\n paymentMethod: apmData.paymentMethod,\r\n processorId: apmData.processorId,\r\n };\r\n\r\n const response = await this.apiClient.post(\r\n '/api/v1/payment/create-payment-instrument',\r\n { paymentInstrumentData }\r\n );\r\n\r\n console.log('APM payment instrument created:', response);\r\n return response as PaymentInstrumentResponse;\r\n }\r\n\r\n /**\r\n * Helper function to format expiry date\r\n */\r\n private getCardMonthAndYear(expiryDate: string) {\r\n const [month, year] = expiryDate.split('/');\r\n const currentYear = new Date().getFullYear();\r\n const century = Math.floor(currentYear / 100) * 100;\r\n const fullYear = Number(year) + century;\r\n\r\n return {\r\n expiration_month: Number(month),\r\n expiration_year: fullYear,\r\n };\r\n }\r\n\r\n /**\r\n * Process payment directly with checkout session\r\n */\r\n async processPaymentDirect(\r\n checkoutSessionId: string,\r\n paymentInstrumentId: string,\r\n threedsSessionId?: string,\r\n options: {\r\n initiatedBy?: 'customer' | 'merchant';\r\n source?: 'upsell' | 'checkout' | 'offer' | 'missing_club' | 'forced';\r\n paymentFlowId?: string; // Optional: override the store's default payment flow\r\n processorId?: string; // For APM payments\r\n paymentMethod?: string; // For APM payments\r\n isExpress?: boolean; // True when paying via Stripe Express Checkout Element\r\n } = {}\r\n ): Promise<PaymentResponse> {\r\n console.log('[PaymentsResource] processPaymentDirect START', options.paymentFlowId ? `(flow: ${options.paymentFlowId})` : '');\r\n console.log('[PaymentsResource] Full options object:', JSON.stringify(options, null, 2));\r\n console.log('[PaymentsResource] processorId:', options.processorId, 'paymentMethod:', options.paymentMethod);\r\n try {\r\n const requestBody = {\r\n checkoutSessionId,\r\n paymentInstrumentId,\r\n ...(threedsSessionId && { threedsSessionId }),\r\n ...(options.initiatedBy && { initiatedBy: options.initiatedBy }),\r\n ...(options.source && { source: options.source }),\r\n ...(options.paymentFlowId && { paymentFlowId: options.paymentFlowId }),\r\n ...(options.processorId && { processorId: options.processorId }),\r\n ...(options.paymentMethod && { paymentMethod: options.paymentMethod }),\r\n ...(options.isExpress && { isExpress: options.isExpress }),\r\n };\r\n console.log('[PaymentsResource] Request body being sent:', JSON.stringify(requestBody, null, 2));\r\n const response = await this.apiClient.post<PaymentResponse>('/api/public/v1/checkout/pay-v2', requestBody);\r\n console.log('[PaymentsResource] processPaymentDirect SUCCESS:', response);\r\n return response;\r\n } catch (error) {\r\n console.error('[PaymentsResource] processPaymentDirect ERROR:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Get card payment instruments for customer\r\n */\r\n async getCardPaymentInstruments(): Promise<PaymentInstrumentCustomerResponse> {\r\n return this.apiClient.get('/api/v1/payment-instruments/customer');\r\n }\r\n\r\n /**\r\n * Mark payment action as processed\r\n */\r\n async markPaymentActionProcessed(paymentId: string): Promise<void> {\r\n return this.apiClient.post('/api/v1/payments/require-action/processed', {\r\n paymentId,\r\n });\r\n }\r\n\r\n /**\r\n * Get payment status\r\n */\r\n async getPaymentStatus(paymentId: string): Promise<Payment> {\r\n return this.apiClient.get(`/api/v1/payments/${paymentId}`);\r\n }\r\n\r\n /**\r\n * Retrieve payment status from processor\r\n * Used for external payment flows that require server-side status checks\r\n */\r\n async retrievePayment(paymentId: string): Promise<{\r\n retrieveResult?: {\r\n status?: string;\r\n message?: string;\r\n success?: boolean;\r\n };\r\n paymentId: string;\r\n transactionCreated?: boolean;\r\n status?: string;\r\n transactionId?: string;\r\n message?: string;\r\n success?: boolean;\r\n error?: string;\r\n }> {\r\n return this.apiClient.post('/api/v1/payments/retrieve', {\r\n paymentId,\r\n });\r\n }\r\n\r\n async saveRadarSession(data: {\r\n orderId?: string;\r\n checkoutSessionId?: string;\r\n finixRadarSessionId?: string;\r\n finixRadarSessionData?: Record<string, unknown>;\r\n stripeRadarSessionId?: string;\r\n stripeRadarSessionData?: Record<string, unknown>;\r\n airwallexRadarSessionId?: string;\r\n }): Promise<{ success: boolean; radarSessionId: string }> {\r\n return this.apiClient.post('/api/v1/radar-sessions', data);\r\n }\r\n\r\n /**\r\n * Complete payment after an action (3DS, radar, etc.)\r\n * This resumes the payment flow that was paused for additional authentication/verification\r\n */\r\n async completePaymentAfterAction(paymentId: string): Promise<Payment> {\r\n return this.apiClient.post('/api/v1/payments/complete-after-3ds', {\r\n paymentId,\r\n });\r\n }\r\n\r\n /**\r\n * Update 3DS session status (used for Airwallex 3DS return handling)\r\n */\r\n async updateThreedsStatus(data: {\r\n paymentId: string;\r\n status: 'succeeded' | 'failed' | 'pending';\r\n paymentIntentId: string;\r\n }): Promise<Payment> {\r\n return this.apiClient.post('/api/v1/threeds/status', data);\r\n }\r\n}\r\n", "/**\r\n * Orders Resource Client\r\n * Axios-based API client for order endpoints\r\n */\r\n\r\nimport { Order, OrderLineItem } from '../utils/order';\r\n\r\nimport { ApiClient } from './apiClient';\r\n\r\nexport class OrdersResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Fetch order by ID\r\n */\r\n async getOrder(orderId: string): Promise<Order> {\r\n const response = await this.apiClient.get<{ order: Order } | Order>(`/api/v1/orders/${orderId}`);\r\n\r\n // Handle both response formats: { success, order } and { order }\r\n if (typeof response === 'object' && response !== null && 'success' in response && response.success === false) {\r\n throw new Error((response as any).error || 'Failed to fetch order');\r\n }\r\n\r\n // If response has success property, use response.order\r\n // Otherwise, assume the response itself is the order data or has order property\r\n const orderData = typeof response === 'object' && response !== null && 'order' in response\r\n ? (response as { order: Order }).order\r\n : response;\r\n\r\n if (!orderData) {\r\n throw new Error('Order not found');\r\n }\r\n\r\n return orderData;\r\n }\r\n\r\n /**\r\n * Create a new order\r\n */\r\n async createOrder(checkoutSessionId: string): Promise<{ success: boolean; order?: Order; error?: string }> {\r\n return this.apiClient.post('/api/v1/orders', {\r\n checkoutSessionId,\r\n });\r\n }\r\n\r\n /**\r\n * Update order status\r\n */\r\n async updateOrderStatus(orderId: string, status: string): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.patch(`/api/v1/orders/${orderId}/status`, {\r\n status,\r\n });\r\n }\r\n\r\n /**\r\n * Add items to an order\r\n */\r\n async addOrderItems(orderId: string, items: Omit<OrderLineItem, 'id'>[]): Promise<{ success: boolean; error?: string }> {\r\n return this.apiClient.post(`/api/v1/orders/${orderId}/items`, {\r\n items,\r\n });\r\n }\r\n\r\n /**\r\n * Get order line items\r\n */\r\n async getOrderLineItems(orderId: string): Promise<OrderLineItem[]> {\r\n const order = await this.getOrder(orderId);\r\n return order.items || [];\r\n }\r\n}\r\n", "/**\r\n * Express Payment Methods Resource Client\r\n * Axios-based API client for express payment methods\r\n */\r\n\r\nimport { ApiClient } from './apiClient';\r\n\r\nexport interface PaymentMethod {\r\n id: string;\r\n type: string;\r\n title: string;\r\n iconUrl: string;\r\n default: boolean;\r\n settings?: Record<string, unknown>;\r\n metadata?: Record<string, unknown>;\r\n}\r\n\r\nexport interface Address {\r\n address1: string;\r\n address2?: string;\r\n lastName?: string;\r\n firstName?: string;\r\n city?: string;\r\n state?: string;\r\n country?: string;\r\n postal?: string;\r\n phone?: string;\r\n email?: string;\r\n}\r\n\r\nexport interface UpdateAddressRequest {\r\n data: {\r\n shippingAddress: Address;\r\n billingAddress?: Address | null;\r\n };\r\n}\r\n\r\nexport interface UpdateCustomerEmailRequest {\r\n data: {\r\n email: string;\r\n };\r\n}\r\n\r\nexport class ExpressPaymentMethodsResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Get enabled payment methods for a checkout session\r\n */\r\n async getPaymentMethods(sessionId: string): Promise<PaymentMethod[]> {\r\n return this.apiClient.get(`/api/v1/payment-methods?checkoutSessionId=${encodeURIComponent(sessionId)}`);\r\n }\r\n\r\n /**\r\n * Update checkout session address (for express checkout flows)\r\n */\r\n async updateCheckoutSessionAddress(\r\n sessionId: string,\r\n data: UpdateAddressRequest\r\n ): Promise<{ success: boolean }> {\r\n return this.apiClient.post(`/api/v1/checkout-sessions/${sessionId}/address`, data);\r\n }\r\n\r\n /**\r\n * Update customer email\r\n */\r\n async updateCustomerEmail(\r\n customerId: string,\r\n data: UpdateCustomerEmailRequest\r\n ): Promise<{ success: boolean }> {\r\n return this.apiClient.post(`/api/v1/customers/${customerId}`, data);\r\n }\r\n}\r\n\r\n", "/**\r\n * Store Config Resource Client\r\n * Axios-based API client for store configuration endpoints\r\n */\r\n\r\nimport { ApiClient } from './apiClient';\r\n\r\nexport interface StoreConfig {\r\n brandLogo?: string;\r\n favicon?: string;\r\n badges?: {\r\n url: string;\r\n title: string;\r\n }[];\r\n colors?: {\r\n primary?: string;\r\n [key: string]: any;\r\n };\r\n sections?: {\r\n id: string;\r\n title: string;\r\n iconUrl?: string;\r\n titleTrans?: {\r\n [lang: string]: string;\r\n };\r\n descriptionTrans?: {\r\n [lang: string]: string;\r\n };\r\n }[];\r\n checkoutType?: string;\r\n requirePhone?: boolean;\r\n requireTerms?: boolean;\r\n scarcityTimer?: {\r\n enabled: boolean;\r\n messageTrans?: {\r\n [lang: string]: string;\r\n };\r\n duration?: number;\r\n [key: string]: any;\r\n };\r\n showPoweredBy?: boolean;\r\n precheckMarketing?: boolean;\r\n privacyPolicyLink?: string;\r\n requireAddressNumber?: boolean;\r\n generalConditionsLink?: string;\r\n computed?: {\r\n availableShippingCountries?: string[];\r\n threedsEnabled?: boolean;\r\n [key: string]: any;\r\n };\r\n\r\n [key: string]: any;\r\n}\r\n\r\nexport interface GetStoreConfigOptions {\r\n storeId: string;\r\n}\r\n\r\nexport class StoreConfigResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Get store configuration by store ID\r\n */\r\n async getStoreConfig(storeId: string): Promise<StoreConfig> {\r\n const response = await this.apiClient.get<StoreConfig>(\r\n `/api/v1/checkout/config?storeId=${storeId}`\r\n );\r\n\r\n return response;\r\n }\r\n}\r\n\r\n", "/**\r\n * Threeds Resource Client\r\n * Axios-based API client for 3DS endpoints\r\n */\r\n\r\nimport { ApiClient } from './apiClient';\r\n\r\nexport interface ThreedsSession {\r\n id: string;\r\n sessionId: string;\r\n provider: string;\r\n}\r\n\r\nexport interface CreateSessionRequest {\r\n provider: string;\r\n sessionData: any;\r\n paymentInstrumentId: string;\r\n}\r\n\r\nexport class ThreedsResource {\r\n constructor(private apiClient: ApiClient) { }\r\n\r\n /**\r\n * Create a 3DS session\r\n */\r\n async createSession(request: CreateSessionRequest): Promise<ThreedsSession> {\r\n return this.apiClient.post('/api/v1/threeds/create-session', request);\r\n }\r\n}\r\n", "/**\r\n * Geodata \u2014 CDN-backed country/region data.\r\n *\r\n * Instead of bundling the 775KB iso3166-2-db package, we fetch slim JSON\r\n * from Vercel Blob CDN on demand:\r\n * - countries.json (~10KB) \u2014 fetched once on first getCountries() call\r\n * - regions.json (~95KB) \u2014 fetched lazily on first getStatesForCountry() call\r\n *\r\n * Both are cached in memory after first fetch. The API surface is identical\r\n * to the previous static-import version so all consumers work unchanged.\r\n */\r\n\r\n// CDN base serving the pre-built slim geodata (uploaded by scripts/build-geodata-cdn.ts)\r\nconst GEODATA_CDN_BASE = 'https://cvwnizdbugpz6jwk.public.blob.vercel-storage.com/geodata/v1';\r\n\r\nexport const AVAILABLE_LANGUAGES = ['en', 'ru', 'de', 'da', 'fr', 'es', 'zh', 'hi', 'pt', 'ja', 'ar', 'it', 'he'] as const;\r\nexport type SupportedLanguage = typeof AVAILABLE_LANGUAGES[number];\r\n\r\n// \u2500\u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport interface Country {\r\n code: string;\r\n name: string;\r\n iso3?: string;\r\n numeric?: number;\r\n uniqueKey?: string;\r\n}\r\n\r\nexport interface State {\r\n code: string;\r\n name: string;\r\n countryCode: string;\r\n uniqueKey?: string;\r\n}\r\n\r\n// CDN JSON shapes (compact)\r\ninterface CdnCountries { [iso2: string]: { n: string; i3?: string; nu?: number } }\r\ninterface CdnRegions { [iso2: string]: [string, string][] } // [[iso, name], ...]\r\n\r\n// \u2500\u2500\u2500 In-memory cache \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst countriesCache = new Map<SupportedLanguage, CdnCountries>();\r\nconst regionsCache = new Map<SupportedLanguage, CdnRegions>();\r\nconst inflightCountries = new Map<SupportedLanguage, Promise<CdnCountries>>();\r\nconst inflightRegions = new Map<SupportedLanguage, Promise<CdnRegions>>();\r\n\r\n// \u2500\u2500\u2500 CDN fetchers (deduplicated, cached) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nasync function fetchCountriesRaw(language: SupportedLanguage): Promise<CdnCountries> {\r\n const cached = countriesCache.get(language);\r\n if (cached) return cached;\r\n\r\n // Deduplicate concurrent fetches for the same language\r\n let inflight = inflightCountries.get(language);\r\n if (inflight) return inflight;\r\n\r\n inflight = (async () => {\r\n const url = `${GEODATA_CDN_BASE}/${language}/countries.json`;\r\n const res = await fetch(url);\r\n if (!res.ok) throw new Error(`Geodata fetch failed: ${url} (${res.status})`);\r\n const data: CdnCountries = await res.json();\r\n countriesCache.set(language, data);\r\n inflightCountries.delete(language);\r\n return data;\r\n })();\r\n\r\n inflightCountries.set(language, inflight);\r\n return inflight;\r\n}\r\n\r\nasync function fetchRegionsRaw(language: SupportedLanguage): Promise<CdnRegions> {\r\n const cached = regionsCache.get(language);\r\n if (cached) return cached;\r\n\r\n let inflight = inflightRegions.get(language);\r\n if (inflight) return inflight;\r\n\r\n inflight = (async () => {\r\n const url = `${GEODATA_CDN_BASE}/${language}/regions.json`;\r\n const res = await fetch(url);\r\n if (!res.ok) throw new Error(`Geodata fetch failed: ${url} (${res.status})`);\r\n const data: CdnRegions = await res.json();\r\n regionsCache.set(language, data);\r\n inflightRegions.delete(language);\r\n return data;\r\n })();\r\n\r\n inflightRegions.set(language, inflight);\r\n return inflight;\r\n}\r\n\r\n// \u2500\u2500\u2500 Synchronous accessors (return cached data, empty if not yet loaded) \u2500\u2500\u2500\u2500\u2500\r\n// These preserve the existing synchronous API. Consumers should call\r\n// ensureCountriesLoaded / ensureRegionsLoaded first (the useISOData hook does).\r\n\r\nfunction getCountriesCached(language: SupportedLanguage): CdnCountries {\r\n return countriesCache.get(language) || countriesCache.get('en') || {};\r\n}\r\n\r\nfunction getRegionsCached(language: SupportedLanguage): CdnRegions {\r\n return regionsCache.get(language) || regionsCache.get('en') || {};\r\n}\r\n\r\n// \u2500\u2500\u2500 Public async loaders (call these before using sync getters) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport async function ensureCountriesLoaded(language: SupportedLanguage = 'en'): Promise<void> {\r\n await fetchCountriesRaw(language);\r\n}\r\n\r\nexport async function ensureRegionsLoaded(language: SupportedLanguage = 'en'): Promise<void> {\r\n await fetchRegionsRaw(language);\r\n}\r\n\r\nexport async function ensureGeoDataLoaded(language: SupportedLanguage = 'en'): Promise<void> {\r\n await Promise.all([fetchCountriesRaw(language), fetchRegionsRaw(language)]);\r\n}\r\n\r\n// \u2500\u2500\u2500 Backward-compatible sync API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// These match the old iso3166.ts signatures exactly.\r\n\r\nexport const getCountries = (language: SupportedLanguage = 'en'): Country[] => {\r\n const raw = getCountriesCached(language);\r\n return Object.entries(raw)\r\n .map(([code, c]) => ({\r\n code,\r\n name: c.n,\r\n iso3: c.i3,\r\n numeric: c.nu,\r\n uniqueKey: `country-${code}`,\r\n }))\r\n .sort((a, b) => a.name.localeCompare(b.name));\r\n};\r\n\r\nexport const getStatesForCountry = (countryCode: string, language: SupportedLanguage = 'en'): State[] => {\r\n const raw = getRegionsCached(language);\r\n const tuples = raw[countryCode];\r\n if (!tuples) return [];\r\n\r\n return tuples\r\n .map(([iso, name], i) => ({\r\n code: iso,\r\n name,\r\n countryCode,\r\n uniqueKey: `state-${countryCode}-${iso}-${i}`,\r\n }))\r\n .sort((a, b) => a.name.localeCompare(b.name));\r\n};\r\n\r\nexport const getAllStates = (language: SupportedLanguage = 'en'): State[] => {\r\n const raw = getRegionsCached(language);\r\n const states: State[] = [];\r\n\r\n for (const [countryCode, tuples] of Object.entries(raw)) {\r\n tuples.forEach(([iso, name], i) => {\r\n states.push({ code: iso, name, countryCode, uniqueKey: `state-${countryCode}-${iso}-${i}` });\r\n });\r\n }\r\n\r\n return states.sort((a, b) => a.name.localeCompare(b.name));\r\n};\r\n\r\nexport const findCountryByName = (countryName: string, language: SupportedLanguage = 'en'): Country | null => {\r\n const countries = getCountries(language);\r\n const needle = countryName.toLowerCase().trim();\r\n return countries.find(c => c.name.toLowerCase() === needle)\r\n || countries.find(c => c.name.toLowerCase().includes(needle) || needle.includes(c.name.toLowerCase()))\r\n || null;\r\n};\r\n\r\nexport const findRegionByCode = (regionCode: string, language: SupportedLanguage = 'en'): State | null => {\r\n const [countryCode, stateCode] = regionCode.split('-');\r\n if (!countryCode || !stateCode) return null;\r\n return getStatesForCountry(countryCode, language).find(s => s.code === stateCode) ?? null;\r\n};\r\n\r\nexport const isValidCountryCode = (countryCode: string, language: SupportedLanguage = 'en'): boolean => {\r\n return countryCode in getCountriesCached(language);\r\n};\r\n\r\nexport const isValidStateCode = (countryCode: string, stateCode: string, language: SupportedLanguage = 'en'): boolean => {\r\n return getStatesForCountry(countryCode, language).some(s => s.code === stateCode);\r\n};\r\n\r\nexport const getCountryWithRegions = (countryCode: string, language: SupportedLanguage = 'en') => {\r\n const raw = getCountriesCached(language);\r\n const c = raw[countryCode];\r\n if (!c) return null;\r\n return {\r\n country: { code: countryCode, name: c.n, iso3: c.i3, numeric: c.nu, uniqueKey: `country-${countryCode}` },\r\n regions: getStatesForCountry(countryCode, language),\r\n };\r\n};\r\n\r\n// \u2500\u2500\u2500 Language management (backward-compat) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport function registerLanguage(_language: SupportedLanguage, _database: any): void {\r\n // No-op: CDN mode doesn't need manual registration\r\n}\r\n\r\nexport function isLanguageRegistered(language: SupportedLanguage): boolean {\r\n return countriesCache.has(language);\r\n}\r\n\r\nexport function getRegisteredLanguages(): SupportedLanguage[] {\r\n return [...countriesCache.keys()];\r\n}\r\n\r\nexport async function importLanguage(language: SupportedLanguage): Promise<void> {\r\n await ensureGeoDataLoaded(language);\r\n}\r\n\r\n// \u2500\u2500\u2500 Prefetch \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n// Kick off English fetch the moment this module is imported so the country\r\n// dropdown is populated by the time the React tree renders.\r\nif (typeof globalThis !== 'undefined' && typeof fetch !== 'undefined') {\r\n ensureGeoDataLoaded('en').catch(() => {});\r\n}\r\n", "/**\r\n * ISO Data Core \u2014 CDN-backed country/region data (pure functions, no React).\r\n * Call ensureLoaded() before using synchronous getters.\r\n */\r\n\r\nimport {\r\n getCountries,\r\n getStatesForCountry,\r\n ensureGeoDataLoaded,\r\n type SupportedLanguage,\r\n importLanguage,\r\n isLanguageRegistered,\r\n getRegisteredLanguages\r\n} from '../../data/iso3166';\r\n\r\n// Types for ISO data (matching the original)\r\nexport interface ISOCountry {\r\n iso: string;\r\n iso3: string;\r\n numeric: number;\r\n name: string;\r\n}\r\n\r\nexport interface ISORegion {\r\n iso: string;\r\n name: string;\r\n}\r\n\r\nexport class ISODataCore {\r\n /**\r\n * Get countries data for a specific language\r\n */\r\n static getCountriesData(language: SupportedLanguage = 'en'): Record<string, ISOCountry> {\r\n try {\r\n // Get countries from pre-built data with language support\r\n const countriesArray = getCountries(language);\r\n\r\n // Transform to our expected format (Record<string, ISOCountry>)\r\n const countries: Record<string, ISOCountry> = {};\r\n\r\n countriesArray.forEach((country) => {\r\n countries[country.code] = {\r\n iso: country.code,\r\n iso3: country.iso3 || '',\r\n numeric: country.numeric || 0,\r\n name: country.name,\r\n };\r\n });\r\n\r\n return countries;\r\n } catch (error) {\r\n console.error(`Failed to load ISO data for language: ${language}`, error);\r\n return {};\r\n }\r\n }\r\n\r\n /**\r\n * Get regions for a specific country\r\n */\r\n static getRegions(countryCode: string, language: SupportedLanguage = 'en'): ISORegion[] {\r\n try {\r\n const states = getStatesForCountry(countryCode, language);\r\n return states.map((state) => ({\r\n iso: state.code,\r\n name: state.name,\r\n }));\r\n } catch {\r\n return []; // Return empty array if no regions\r\n }\r\n }\r\n\r\n /**\r\n * Find a specific region by ISO code\r\n */\r\n static findRegion(countryCode: string, regionCode: string, language: SupportedLanguage = 'en'): ISORegion | null {\r\n const regions = this.getRegions(countryCode, language);\r\n return regions.find((region) => region.iso === regionCode) ?? null;\r\n }\r\n\r\n /**\r\n * Map Google Places state to ISO region (proven 100% success rate)\r\n */\r\n static mapGoogleToISO(\r\n googleState: string,\r\n googleStateLong: string,\r\n countryCode: string,\r\n language: SupportedLanguage = 'en'\r\n ): ISORegion | null {\r\n const regions = this.getRegions(countryCode, language);\r\n\r\n if (regions.length === 0) return null;\r\n\r\n // Strategy 1: Exact ISO code match (86% success rate)\r\n let match = regions.find((r) => r.iso === googleState);\r\n if (match) return match;\r\n\r\n // Strategy 2: Name matching (14% success rate)\r\n match = regions.find((r) => r.name.toLowerCase() === googleState.toLowerCase());\r\n if (match) return match;\r\n\r\n match = regions.find((r) => r.name.toLowerCase() === googleStateLong.toLowerCase());\r\n if (match) return match;\r\n\r\n // Strategy 3: Partial name matching (fallback)\r\n match = regions.find(\r\n (r) =>\r\n r.name.toLowerCase().includes(googleStateLong.toLowerCase()) ||\r\n googleStateLong.toLowerCase().includes(r.name.toLowerCase()),\r\n );\r\n\r\n return match ?? null;\r\n }\r\n\r\n /**\r\n * Check if language is registered\r\n */\r\n static isLanguageRegistered(language: SupportedLanguage): boolean {\r\n return isLanguageRegistered(language);\r\n }\r\n\r\n /**\r\n * Get registered languages\r\n */\r\n static getRegisteredLanguages(): SupportedLanguage[] {\r\n return getRegisteredLanguages();\r\n }\r\n\r\n /**\r\n * Import language data\r\n */\r\n static async importLanguage(language: SupportedLanguage): Promise<void> {\r\n return importLanguage(language);\r\n }\r\n\r\n /**\r\n * Fetch countries + regions from CDN for a language (call before sync getters)\r\n */\r\n static async ensureLoaded(language: SupportedLanguage = 'en'): Promise<void> {\r\n return ensureGeoDataLoaded(language);\r\n }\r\n\r\n static getAvailableLanguages(): SupportedLanguage[] {\r\n return ['en', 'ru', 'de', 'fr', 'es', 'zh', 'hi', 'pt', 'ja', 'ar', 'it', 'he'];\r\n }\r\n}\r\n", "/**\r\n * Google Autocomplete Core\r\n * Pure functions for Google Places API integration\r\n */\r\n\r\nexport interface GooglePrediction {\r\n place_id: string;\r\n description: string;\r\n structured_formatting?: {\r\n main_text: string;\r\n secondary_text: string;\r\n };\r\n}\r\n\r\nexport interface GooglePlaceDetails {\r\n place_id: string;\r\n formatted_address: string;\r\n address_components: {\r\n long_name: string;\r\n short_name: string;\r\n types: string[];\r\n }[];\r\n geometry: {\r\n location: {\r\n lat: number;\r\n lng: number;\r\n };\r\n };\r\n}\r\n\r\nexport interface AddressComponents {\r\n streetNumber?: string;\r\n route?: string;\r\n city?: string;\r\n state?: string;\r\n postalCode?: string;\r\n country?: string;\r\n countryCode?: string;\r\n locality?: string;\r\n administrativeAreaLevel1?: string;\r\n administrativeAreaLevel1Long?: string;\r\n administrativeAreaLevel2?: string;\r\n administrativeAreaLevel2Long?: string;\r\n iso?: string;\r\n}\r\n\r\nexport class GoogleAutocompleteCore {\r\n private static apiKey: string | null = null;\r\n private static service: any = null;\r\n\r\n /**\r\n * Initialize Google Places API\r\n */\r\n static initialize(apiKey: string): void {\r\n this.apiKey = apiKey;\r\n\r\n if (typeof window !== 'undefined' && window.google?.maps?.places) {\r\n this.service = new window.google.maps.places.AutocompleteService();\r\n }\r\n }\r\n\r\n /**\r\n * Search for places\r\n */\r\n static async searchPlaces(\r\n input: string,\r\n options: {\r\n types?: string[];\r\n componentRestrictions?: { country: string };\r\n } = {}\r\n ): Promise<GooglePrediction[]> {\r\n if (!this.service || !input.trim()) {\r\n return [];\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.service.getPlacePredictions(\r\n {\r\n input,\r\n types: options.types || ['address'],\r\n componentRestrictions: options.componentRestrictions,\r\n },\r\n (predictions: GooglePrediction[] | null, status: any) => {\r\n if (status === window.google?.maps?.places?.PlacesServiceStatus.OK && predictions) {\r\n resolve(predictions);\r\n } else {\r\n resolve([]);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Get place details\r\n */\r\n static async getPlaceDetails(\r\n placeId: string\r\n ): Promise<GooglePlaceDetails | null> {\r\n if (typeof window === 'undefined' || !window.google?.maps?.places) {\r\n return null;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const service = new window.google!.maps!.places!.PlacesService(\r\n document.createElement('div')\r\n );\r\n\r\n service.getDetails(\r\n {\r\n placeId,\r\n fields: ['place_id', 'formatted_address', 'address_components', 'geometry'],\r\n },\r\n (place: GooglePlaceDetails | null, status: any) => {\r\n if (status === window.google?.maps?.places?.PlacesServiceStatus.OK && place) {\r\n resolve(place);\r\n } else {\r\n resolve(null);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Extract address components from place details\r\n */\r\n static extractAddressComponents(placeDetails: GooglePlaceDetails): AddressComponents {\r\n const components: AddressComponents = {};\r\n\r\n for (const component of placeDetails.address_components) {\r\n const types = component.types;\r\n\r\n if (types.includes('street_number')) {\r\n components.streetNumber = component.long_name;\r\n } else if (types.includes('route')) {\r\n components.route = component.long_name;\r\n } else if (types.includes('locality')) {\r\n components.city = component.long_name;\r\n components.locality = component.long_name;\r\n } else if (types.includes('administrative_area_level_2')) {\r\n components.administrativeAreaLevel2 = component.short_name;\r\n components.administrativeAreaLevel2Long = component.long_name;\r\n // Use level_2 as fallback for city if city is not set\r\n if (!components.city) {\r\n components.city = component.long_name;\r\n components.locality = component.long_name;\r\n }\r\n } else if (types.includes('administrative_area_level_1')) {\r\n components.state = component.long_name;\r\n components.administrativeAreaLevel1 = component.short_name;\r\n components.administrativeAreaLevel1Long = component.long_name;\r\n } else if (types.includes('postal_code')) {\r\n components.postalCode = component.long_name;\r\n } else if (types.includes('country')) {\r\n components.country = component.long_name;\r\n components.countryCode = component.short_name;\r\n components.iso = component.short_name;\r\n }\r\n }\r\n\r\n // For countries like France where administrative_area_level_1 (r\u00E9gion) may be missing,\r\n // use administrative_area_level_2 (d\u00E9partement) as the primary state/province value\r\n // We prefer the long_name (e.g., \"Bouches-du-Rh\u00F4ne\") over short_name (e.g., \"13\")\r\n // because it's more likely to match our state database entries\r\n if (!components.administrativeAreaLevel1 && components.administrativeAreaLevel2) {\r\n // Use long name as the primary state value (e.g., \"Bouches-du-Rh\u00F4ne\" instead of \"13\")\r\n components.state = components.administrativeAreaLevel2Long || components.administrativeAreaLevel2;\r\n components.administrativeAreaLevel1 = components.administrativeAreaLevel2;\r\n components.administrativeAreaLevel1Long = components.administrativeAreaLevel2Long;\r\n }\r\n\r\n return components;\r\n }\r\n}\r\n", "/**\r\n * Products Utility Functions\r\n * Pure functions for product data manipulation\r\n */\r\n\r\nexport interface ProductPrice {\r\n id: string;\r\n amount: number;\r\n currency: string;\r\n recurring: boolean;\r\n interval?: string;\r\n intervalCount?: number;\r\n default?: boolean;\r\n currencyOptions: Record<string, { amount: number; currency: string }>;\r\n}\r\n\r\nexport interface ProductVariant {\r\n id: string;\r\n name: string;\r\n description: string;\r\n sku?: string;\r\n weight?: number;\r\n imageUrl?: string;\r\n default?: boolean;\r\n prices: ProductPrice[];\r\n creditPrice: number | null\r\n}\r\n\r\nexport interface Product {\r\n id: string;\r\n name: string;\r\n description: string;\r\n imageUrl?: string;\r\n variants: ProductVariant[];\r\n}\r\n\r\nexport class ProductsUtils {\r\n /**\r\n * Find a variant by ID within products\r\n */\r\n static findVariant(products: Product[], variantId: string): ProductVariant | null {\r\n for (const product of products) {\r\n const variant = product.variants.find(v => v.id === variantId);\r\n if (variant) {\r\n return variant;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Get price for a variant in a specific currency\r\n */\r\n static getVariantPrice(\r\n variant: ProductVariant,\r\n currency = 'USD'\r\n ): ProductPrice | null {\r\n const price = variant.prices.find(p => p.currency === currency);\r\n if (price) {\r\n return price;\r\n }\r\n\r\n // Fallback to default price\r\n const defaultPrice = variant.prices.find(p => p.default);\r\n if (defaultPrice) {\r\n return defaultPrice;\r\n }\r\n\r\n // Return first available price\r\n return variant.prices[0] || null;\r\n }\r\n\r\n /**\r\n * Get all variants from products\r\n */\r\n static getAllVariants(products: Product[]): { product: Product; variant: ProductVariant }[] {\r\n const allVariants: { product: Product; variant: ProductVariant }[] = [];\r\n for (const product of products) {\r\n if (product.variants) {\r\n for (const variant of product.variants) {\r\n allVariants.push({ product, variant });\r\n }\r\n }\r\n }\r\n return allVariants;\r\n }\r\n\r\n /**\r\n * Filter variants by predicate\r\n */\r\n static filterVariants(\r\n products: Product[],\r\n predicate: (variant: ProductVariant, product: Product) => boolean\r\n ): { product: Product; variant: ProductVariant }[] {\r\n const filtered: { product: Product; variant: ProductVariant }[] = [];\r\n for (const product of products) {\r\n if (product.variants) {\r\n for (const variant of product.variants) {\r\n if (predicate(variant, product)) {\r\n filtered.push({ product, variant });\r\n }\r\n }\r\n }\r\n }\r\n return filtered;\r\n }\r\n}\r\n", "/**\r\n * Order Utility Functions\r\n * Pure functions for order data manipulation\r\n */\r\n\r\nimport type { OrderSummary, PromotionSummary, PaymentSummary, Subscription, OrderAddress } from '../types';\r\n\r\nexport interface OrderLineItem {\r\n id: string;\r\n orderId: string;\r\n productId: string;\r\n variantId: string;\r\n priceId: string;\r\n sku: string;\r\n unitAmount: number;\r\n quantity: number;\r\n amount: number;\r\n adjustedAmount: number;\r\n currency: string;\r\n adjustments?: Record<string, unknown>[];\r\n recurring: boolean;\r\n rebillMode?: string | null;\r\n rebillStepIntervalMs?: number | null;\r\n interval: string;\r\n intervalCount: number;\r\n totalBillingCycles: number;\r\n unitAmountAfterFirstCycle: number;\r\n subscriptionSettings?: Record<string, unknown> | null;\r\n properties?: Record<string, unknown>;\r\n orderLineItemProduct: {\r\n id: string;\r\n name: string;\r\n description: string;\r\n storefrontProductId: string;\r\n originalProductId: string;\r\n orderLineItemId: string;\r\n };\r\n orderLineItemVariant: {\r\n id: string;\r\n name: string;\r\n price: number | null;\r\n currency: string | null;\r\n imageUrl: string;\r\n description: string | null;\r\n storefrontVariantId: string | null;\r\n originalVariantId: string;\r\n orderLineItemId: string;\r\n };\r\n}\r\n\r\nexport interface Order {\r\n id: string;\r\n orderNumber: number;\r\n storeId: string;\r\n accountId: string;\r\n createdAt: string;\r\n updatedAt: string;\r\n status: string;\r\n cancelledAt?: string | null;\r\n cancelledReason?: string | null;\r\n paidAt?: string | null;\r\n paidAmount: number;\r\n openAt: string;\r\n abandonedAt?: string | null;\r\n currency: string;\r\n externalCustomerType?: string | null;\r\n externalCustomerId?: string | null;\r\n externalOrderId?: string | null;\r\n billingAddress?: {\r\n company: string;\r\n firstName: string;\r\n lastName: string;\r\n address1: string;\r\n address2?: string;\r\n city: string;\r\n country: string;\r\n state: string;\r\n postal: string;\r\n phone: string;\r\n email?: string;\r\n };\r\n shippingAddress?: {\r\n company: string;\r\n firstName: string;\r\n lastName: string;\r\n address1: string;\r\n address2: string;\r\n city: string;\r\n country: string;\r\n state: string;\r\n postal: string;\r\n phone: string;\r\n };\r\n pickupAddress?: Record<string, unknown> | null;\r\n taxesIncluded: boolean;\r\n draft: boolean;\r\n checkoutSessionId: string;\r\n sessionHash: string;\r\n customerId: string;\r\n createdFrom: string;\r\n paymentInstrumentId: string;\r\n refundedAt?: string | null;\r\n refundedAmount?: number | null;\r\n metadata?: Record<string, unknown>;\r\n customer?: {\r\n id: string;\r\n email: string;\r\n firstName: string;\r\n lastName: string;\r\n externalCustomerId?: string | null;\r\n lastOrderId: string;\r\n accountId: string;\r\n storeId: string;\r\n billingAddress?: OrderAddress | null;\r\n shippingAddress?: OrderAddress | null;\r\n currency: string;\r\n locale: string;\r\n draft: boolean;\r\n acceptsMarketing: boolean;\r\n createdAt: string;\r\n updatedAt: string;\r\n metadata?: Record<string, unknown>;\r\n device?: Record<string, unknown> | null;\r\n };\r\n items: OrderLineItem[];\r\n summaries?: OrderSummary[];\r\n promotions?: PromotionSummary[];\r\n checkoutSession?: {\r\n id: string;\r\n selectedPresentmentCurrency?: string;\r\n returnUrl?: string;\r\n [key: string]: unknown;\r\n };\r\n payments?: PaymentSummary[];\r\n subscriptions?: Subscription[];\r\n store?: {\r\n name: string;\r\n chargeCurrencies: string[];\r\n presentmentCurrencies: string[];\r\n };\r\n relatedOrders?: Order[];\r\n}\r\n\r\nexport class OrderUtils {\r\n /**\r\n * Get order line items\r\n */\r\n static getOrderLineItems(order: Order): OrderLineItem[] {\r\n return order.items || [];\r\n }\r\n\r\n /**\r\n * Get order total\r\n */\r\n static getOrderTotal(order: Order): number {\r\n return order.paidAmount || 0;\r\n }\r\n\r\n /**\r\n * Get order status\r\n */\r\n static getOrderStatus(order: Order): string {\r\n return order.status || 'unknown';\r\n }\r\n\r\n /**\r\n * Check if order is completed\r\n */\r\n static isOrderCompleted(order: Order): boolean {\r\n return order.status === 'completed' || order.status === 'fulfilled';\r\n }\r\n\r\n /**\r\n * Check if order is pending\r\n */\r\n static isOrderPending(order: Order): boolean {\r\n return order.status === 'pending' || order.status === 'processing';\r\n }\r\n\r\n /**\r\n * Check if order is cancelled\r\n */\r\n static isOrderCancelled(order: Order): boolean {\r\n return order.status === 'cancelled' || order.status === 'refunded';\r\n }\r\n}\r\n", "/**\r\n * Currency Utility Functions\r\n * Pure functions for currency management\r\n */\r\n\r\nexport interface Currency {\r\n code: string;\r\n symbol: string;\r\n name: string;\r\n decimalPlaces: number;\r\n}\r\n\r\n/**\r\n * Format money amount from minor units (cents) to a formatted string\r\n * \r\n * @param amountMinorUnits - Amount in minor units (e.g., 12345 for $123.45)\r\n * @param currencyCode - ISO 4217 currency code (e.g., \"USD\", \"EUR\")\r\n * @param locale - Locale for formatting (default: \"en-US\")\r\n * @returns Formatted money string (e.g., \"$123.45\")\r\n * \r\n * @example\r\n * formatMoney(12345, 'USD') // \"$123.45\"\r\n * formatMoney(10000, 'EUR', 'de-DE') // \"100,00 \u20AC\"\r\n * formatMoney(1000, 'JPY') // \"\u00A51,000\"\r\n */\r\nexport function formatMoney(amountMinorUnits: number, currencyCode = 'USD', locale = 'en-US'): string {\r\n const decimalPlaces = CurrencyUtils.getDecimalPlaces(currencyCode);\r\n \r\n // Convert minor units to major units\r\n // Backend stores amounts with 2 decimal places for all currencies\r\n // For currencies with 0 decimal places (JPY, KRW, etc.), divide by 100\r\n let value: number;\r\n if (decimalPlaces === 0) {\r\n // For zero-decimal currencies, backend still stores with 2 decimals\r\n value = amountMinorUnits / 100;\r\n } else {\r\n value = amountMinorUnits / Math.pow(10, decimalPlaces);\r\n }\r\n \r\n try {\r\n return new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currency: currencyCode,\r\n minimumFractionDigits: decimalPlaces,\r\n maximumFractionDigits: decimalPlaces,\r\n }).format(value);\r\n } catch {\r\n // Fallback if Intl.NumberFormat fails\r\n const symbol = CurrencyUtils.getCurrencySymbol(currencyCode);\r\n return `${symbol}${value.toFixed(decimalPlaces)}`;\r\n }\r\n}\r\n\r\nexport class CurrencyUtils {\r\n /**\r\n * Get currency from context or fallback to default\r\n */\r\n static getCurrency(context: any, defaultCurrency = 'USD'): Currency {\r\n // Handle case where context.currency might be a Currency object or string\r\n let currencyCode: string;\r\n\r\n if (typeof context?.currency === 'string') {\r\n currencyCode = context.currency;\r\n } else if (context?.currency?.code) {\r\n currencyCode = context.currency.code;\r\n } else if (context?.store?.presentmentCurrencies?.[0]) {\r\n currencyCode = context.store.presentmentCurrencies[0];\r\n } else {\r\n currencyCode = defaultCurrency;\r\n }\r\n\r\n return {\r\n code: currencyCode,\r\n symbol: this.getCurrencySymbol(currencyCode),\r\n name: this.getCurrencyName(currencyCode),\r\n decimalPlaces: this.getDecimalPlaces(currencyCode),\r\n };\r\n }\r\n\r\n /**\r\n * Get currency symbol\r\n */\r\n static getCurrencySymbol(code: string): string {\r\n const symbols: Record<string, string> = {\r\n USD: '$',\r\n EUR: '\u20AC',\r\n GBP: '\u00A3',\r\n JPY: '\u00A5',\r\n CAD: 'C$',\r\n AUD: 'A$',\r\n CHF: 'CHF',\r\n CNY: '\u00A5',\r\n SEK: 'kr',\r\n NOK: 'kr',\r\n DKK: 'kr',\r\n PLN: 'z\u0142',\r\n CZK: 'K\u010D',\r\n HUF: 'Ft',\r\n RON: 'lei',\r\n BGN: '\u043B\u0432',\r\n HRK: 'kn',\r\n RUB: '\u20BD',\r\n UAH: '\u20B4',\r\n TRY: '\u20BA',\r\n BRL: 'R$',\r\n ARS: '$',\r\n CLP: '$',\r\n COP: '$',\r\n MXN: '$',\r\n PEN: 'S/',\r\n UYU: '$U',\r\n VEF: 'Bs',\r\n ZAR: 'R',\r\n EGP: '\u00A3',\r\n MAD: '\u062F.\u0645.',\r\n TND: '\u062F.\u062A',\r\n DZD: '\u062F.\u062C',\r\n LYD: '\u0644.\u062F',\r\n NGN: '\u20A6',\r\n GHS: '\u20B5',\r\n KES: 'KSh',\r\n UGX: 'USh',\r\n TZS: 'TSh',\r\n ETB: 'Br',\r\n ZMW: 'ZK',\r\n BWP: 'P',\r\n SZL: 'L',\r\n LSL: 'L',\r\n NAD: 'N$',\r\n MUR: '\u20A8',\r\n SCR: '\u20A8',\r\n KWD: '\u062F.\u0643',\r\n BHD: '\u062F.\u0628',\r\n QAR: '\u0631.\u0642',\r\n AED: '\u062F.\u0625',\r\n OMR: '\u0631.\u0639.',\r\n YER: '\uFDFC',\r\n SAR: '\u0631.\u0633',\r\n JOD: '\u062F.\u0627',\r\n LBP: '\u0644.\u0644',\r\n ILS: '\u20AA',\r\n INR: '\u20B9',\r\n PKR: '\u20A8',\r\n BDT: '\u09F3',\r\n LKR: '\u20A8',\r\n NPR: '\u20A8',\r\n AFN: '\u060B',\r\n KZT: '\u20B8',\r\n UZS: '\u043B\u0432',\r\n KGS: '\u043B\u0432',\r\n TJS: 'SM',\r\n TMT: 'T',\r\n AZN: '\u20BC',\r\n GEL: '\u20BE',\r\n AMD: '\u058F',\r\n KRW: '\u20A9',\r\n THB: '\u0E3F',\r\n VND: '\u20AB',\r\n IDR: 'Rp',\r\n MYR: 'RM',\r\n SGD: 'S$',\r\n PHP: '\u20B1',\r\n TWD: 'NT$',\r\n HKD: 'HK$',\r\n MOP: 'MOP$',\r\n BND: 'B$',\r\n LAK: '\u20AD',\r\n KHR: '\u17DB',\r\n MMK: 'K',\r\n BOB: 'Bs',\r\n PYG: '\u20B2',\r\n GTQ: 'Q',\r\n HNL: 'L',\r\n NIO: 'C$',\r\n CRC: '\u20A1',\r\n PAB: 'B/.',\r\n DOP: 'RD$',\r\n JMD: 'J$',\r\n TTD: 'TT$',\r\n BBD: 'Bds$',\r\n XCD: 'EC$',\r\n AWG: '\u0192',\r\n ANG: '\u0192',\r\n SRD: '$',\r\n GYD: 'G$',\r\n VES: 'Bs.S',\r\n VED: 'Bs.D',\r\n };\r\n\r\n return symbols[code] || code;\r\n }\r\n\r\n /**\r\n * Get currency name\r\n */\r\n static getCurrencyName(code: string): string {\r\n const names: Record<string, string> = {\r\n USD: 'US Dollar',\r\n EUR: 'Euro',\r\n GBP: 'British Pound',\r\n JPY: 'Japanese Yen',\r\n CAD: 'Canadian Dollar',\r\n AUD: 'Australian Dollar',\r\n CHF: 'Swiss Franc',\r\n CNY: 'Chinese Yuan',\r\n SEK: 'Swedish Krona',\r\n NOK: 'Norwegian Krone',\r\n DKK: 'Danish Krone',\r\n PLN: 'Polish Zloty',\r\n CZK: 'Czech Koruna',\r\n HUF: 'Hungarian Forint',\r\n RON: 'Romanian Leu',\r\n BGN: 'Bulgarian Lev',\r\n HRK: 'Croatian Kuna',\r\n RUB: 'Russian Ruble',\r\n UAH: 'Ukrainian Hryvnia',\r\n TRY: 'Turkish Lira',\r\n BRL: 'Brazilian Real',\r\n ARS: 'Argentine Peso',\r\n CLP: 'Chilean Peso',\r\n COP: 'Colombian Peso',\r\n MXN: 'Mexican Peso',\r\n PEN: 'Peruvian Sol',\r\n UYU: 'Uruguayan Peso',\r\n VEF: 'Venezuelan Bolivar',\r\n ZAR: 'South African Rand',\r\n EGP: 'Egyptian Pound',\r\n MAD: 'Moroccan Dirham',\r\n TND: 'Tunisian Dinar',\r\n DZD: 'Algerian Dinar',\r\n LYD: 'Libyan Dinar',\r\n NGN: 'Nigerian Naira',\r\n GHS: 'Ghanaian Cedi',\r\n KES: 'Kenyan Shilling',\r\n UGX: 'Ugandan Shilling',\r\n TZS: 'Tanzanian Shilling',\r\n ETB: 'Ethiopian Birr',\r\n ZMW: 'Zambian Kwacha',\r\n BWP: 'Botswana Pula',\r\n SZL: 'Swazi Lilangeni',\r\n LSL: 'Lesotho Loti',\r\n NAD: 'Namibian Dollar',\r\n MUR: 'Mauritian Rupee',\r\n SCR: 'Seychellois Rupee',\r\n KWD: 'Kuwaiti Dinar',\r\n BHD: 'Bahraini Dinar',\r\n QAR: 'Qatari Riyal',\r\n AED: 'UAE Dirham',\r\n OMR: 'Omani Rial',\r\n YER: 'Yemeni Rial',\r\n SAR: 'Saudi Riyal',\r\n JOD: 'Jordanian Dinar',\r\n LBP: 'Lebanese Pound',\r\n ILS: 'Israeli Shekel',\r\n INR: 'Indian Rupee',\r\n PKR: 'Pakistani Rupee',\r\n BDT: 'Bangladeshi Taka',\r\n LKR: 'Sri Lankan Rupee',\r\n NPR: 'Nepalese Rupee',\r\n AFN: 'Afghan Afghani',\r\n KZT: 'Kazakhstani Tenge',\r\n UZS: 'Uzbekistani Som',\r\n KGS: 'Kyrgyzstani Som',\r\n TJS: 'Tajikistani Somoni',\r\n TMT: 'Turkmenistani Manat',\r\n AZN: 'Azerbaijani Manat',\r\n GEL: 'Georgian Lari',\r\n AMD: 'Armenian Dram',\r\n KRW: 'South Korean Won',\r\n THB: 'Thai Baht',\r\n VND: 'Vietnamese Dong',\r\n IDR: 'Indonesian Rupiah',\r\n MYR: 'Malaysian Ringgit',\r\n SGD: 'Singapore Dollar',\r\n PHP: 'Philippine Peso',\r\n TWD: 'Taiwan Dollar',\r\n HKD: 'Hong Kong Dollar',\r\n MOP: 'Macanese Pataca',\r\n BND: 'Brunei Dollar',\r\n LAK: 'Lao Kip',\r\n KHR: 'Cambodian Riel',\r\n MMK: 'Myanmar Kyat',\r\n BOB: 'Bolivian Boliviano',\r\n PYG: 'Paraguayan Guarani',\r\n GTQ: 'Guatemalan Quetzal',\r\n HNL: 'Honduran Lempira',\r\n NIO: 'Nicaraguan Cordoba',\r\n CRC: 'Costa Rican Colon',\r\n PAB: 'Panamanian Balboa',\r\n DOP: 'Dominican Peso',\r\n JMD: 'Jamaican Dollar',\r\n TTD: 'Trinidad and Tobago Dollar',\r\n BBD: 'Barbadian Dollar',\r\n XCD: 'East Caribbean Dollar',\r\n AWG: 'Aruban Florin',\r\n ANG: 'Netherlands Antillean Guilder',\r\n SRD: 'Surinamese Dollar',\r\n GYD: 'Guyanese Dollar',\r\n VES: 'Venezuelan Bolivar Soberano',\r\n VED: 'Venezuelan Bolivar Digital',\r\n };\r\n\r\n return names[code] || code;\r\n }\r\n\r\n /**\r\n * Get decimal places for currency\r\n */\r\n static getDecimalPlaces(code: string): number {\r\n const decimalPlaces: Record<string, number> = {\r\n JPY: 0,\r\n KRW: 0,\r\n VND: 0,\r\n IDR: 0,\r\n LAK: 0,\r\n KHR: 0,\r\n MMK: 0,\r\n PYG: 0,\r\n VEF: 0,\r\n VES: 0,\r\n VED: 0,\r\n };\r\n\r\n return decimalPlaces[code] ?? 2;\r\n }\r\n}\r\n", "/**\r\n * Checkout Utility Functions\r\n * Pure functions for checkout data manipulation\r\n */\r\n\r\nimport type {\r\n CheckoutData,\r\n CheckoutInitParams,\r\n CheckoutLineItem,\r\n CheckoutSession,\r\n Promotion,\r\n} from '../resources/checkout';\r\n\r\n// Re-export types from resources for convenience\r\nexport type {\r\n CheckoutData, CheckoutInitParams, CheckoutLineItem, CheckoutSession, Promotion\r\n};\r\n\r\nexport class CheckoutUtils {\r\n /**\r\n * Get checkout session ID\r\n */\r\n static getCheckoutSessionId(checkoutData: CheckoutData): string {\r\n return checkoutData.checkoutSession?.id || '';\r\n }\r\n\r\n /**\r\n * Get checkout line items \r\n */\r\n static getLineItems(checkoutData: CheckoutData): CheckoutLineItem[] {\r\n const lineItems = checkoutData.checkoutSession?.lineItems;\r\n if (!Array.isArray(lineItems)) {\r\n return [];\r\n }\r\n return lineItems;\r\n }\r\n\r\n /**\r\n * Get checkout total\r\n */\r\n static getTotal(checkoutData: CheckoutData): number {\r\n const totalPrice = checkoutData.checkoutSession?.totalPrice;\r\n return typeof totalPrice === 'number' ? totalPrice : 0;\r\n }\r\n\r\n /**\r\n * Check if customer is club member\r\n */\r\n static isClubMember(checkoutData: CheckoutData): boolean {\r\n return checkoutData.customerIsClubMember || false;\r\n }\r\n}\r\n", "/**\r\n * Promotions Utility Functions\r\n * Pure functions for promotion data manipulation\r\n */\r\n\r\nimport type { Promotion } from '../resources/checkout';\r\n\r\n// Re-export types from resources for convenience\r\nexport type { Promotion };\r\n\r\nexport class PromotionsUtils {\r\n /**\r\n * Check if promotion is valid\r\n */\r\n static isValidPromotion(promotion: Promotion): boolean {\r\n return !!(promotion.id && promotion.name);\r\n }\r\n\r\n /**\r\n * Get promotion type\r\n */\r\n static getPromotionType(promotion: Promotion): string {\r\n return promotion.type || 'unknown';\r\n }\r\n\r\n /**\r\n * Check if promotion has rules\r\n */\r\n static hasRules(promotion: Promotion): boolean {\r\n return !!(promotion.rules && promotion.rules.length > 0);\r\n }\r\n\r\n /**\r\n * Check if promotion has actions\r\n */\r\n static hasActions(promotion: Promotion): boolean {\r\n return !!(promotion.actions && promotion.actions.length > 0);\r\n }\r\n}\r\n", "/**\r\n * Post Purchases Utility Functions\r\n * Pure functions for post-purchase offer data manipulation\r\n */\r\n\r\nimport type {\r\n PostPurchaseOffer,\r\n PostPurchaseOfferItem,\r\n PostPurchaseOfferSummary,\r\n} from '../resources/postPurchases';\r\n\r\n// Re-export types from resources for convenience\r\nexport type {\r\n PostPurchaseOffer,\r\n PostPurchaseOfferItem,\r\n PostPurchaseOfferSummary,\r\n};\r\n\r\nexport class PostPurchasesUtils {\r\n /**\r\n * Check if post-purchase offer is valid\r\n */\r\n static isValidOffer(offer: PostPurchaseOffer): boolean {\r\n return !!(offer.id && offer.summaries && offer.summaries.length > 0);\r\n }\r\n\r\n /**\r\n * Get offer total amount\r\n */\r\n static getOfferTotal(offer: PostPurchaseOffer): number {\r\n return offer.summaries?.[0]?.totalAmount || 0;\r\n }\r\n\r\n /**\r\n * Get offer adjusted total\r\n */\r\n static getOfferAdjustedTotal(offer: PostPurchaseOffer): number {\r\n return offer.summaries?.[0]?.totalAdjustedAmount || 0;\r\n }\r\n\r\n /**\r\n * Check if offer has items\r\n */\r\n static hasItems(offer: PostPurchaseOffer): boolean {\r\n return !!(offer.offerLineItems && offer.offerLineItems.length > 0);\r\n }\r\n\r\n /**\r\n * Get offer currency\r\n */\r\n static getOfferCurrency(offer: PostPurchaseOffer): string {\r\n return offer.summaries?.[0]?.currency || 'USD';\r\n }\r\n\r\n /**\r\n * Get offer title\r\n */\r\n static getOfferTitle(offer: PostPurchaseOffer, locale = 'en'): string {\r\n return offer.titleTrans?.[locale] || offer.titleTrans?.en || `Offer ${offer.id}`;\r\n }\r\n}\r\n", "/**\r\n * Order Bump Utility Functions\r\n * Pure functions for order bump data manipulation\r\n */\r\n\r\nexport interface OrderBumpOffer {\r\n id: string;\r\n name: string;\r\n description: string;\r\n price: number;\r\n currency: string;\r\n imageUrl?: string;\r\n isSelected?: boolean;\r\n}\r\n\r\nexport interface OrderBumpPreview {\r\n offer: OrderBumpOffer;\r\n totalAmount: number;\r\n adjustedAmount: number;\r\n}\r\n\r\nexport class OrderBumpUtils {\r\n /**\r\n * Check if order bump offer is valid\r\n */\r\n static isValidOffer(offer: OrderBumpOffer): boolean {\r\n return !!(offer.id && offer.name && offer.price > 0);\r\n }\r\n\r\n /**\r\n * Toggle order bump selection\r\n */\r\n static toggleSelection(offer: OrderBumpOffer): OrderBumpOffer {\r\n return {\r\n ...offer,\r\n isSelected: !offer.isSelected,\r\n };\r\n }\r\n\r\n /**\r\n * Calculate order bump preview\r\n */\r\n static calculatePreview(offer: OrderBumpOffer, baseAmount: number = 0): OrderBumpPreview {\r\n const totalAmount = baseAmount + offer.price;\r\n const adjustedAmount = offer.isSelected ? totalAmount : baseAmount;\r\n\r\n return {\r\n offer,\r\n totalAmount,\r\n adjustedAmount,\r\n };\r\n }\r\n\r\n /**\r\n * Get selected order bumps\r\n */\r\n static getSelectedOffers(offers: OrderBumpOffer[]): OrderBumpOffer[] {\r\n return offers.filter(offer => offer.isSelected);\r\n }\r\n\r\n /**\r\n * Get total for selected order bumps\r\n */\r\n static getSelectedTotal(offers: OrderBumpOffer[]): number {\r\n return offers\r\n .filter(offer => offer.isSelected)\r\n .reduce((total, offer) => total + offer.price, 0);\r\n }\r\n}\r\n\r\n", "/**\r\n * Funnel Query Keys - Core SDK (Framework-agnostic)\r\n * Standardized query keys for caching funnel data\r\n * Can be used with any query library (TanStack Query, SWR, etc.)\r\n */\r\n\r\n/**\r\n * Query keys for funnel operations\r\n * These keys are used for caching and invalidation strategies\r\n */\r\nexport const funnelQueryKeys = {\r\n /**\r\n * Key for a specific funnel session\r\n */\r\n session: (sessionId: string) => ['funnel', 'session', sessionId] as const,\r\n\r\n /**\r\n * Key for all funnel sessions\r\n */\r\n allSessions: () => ['funnel', 'sessions'] as const,\r\n\r\n /**\r\n * Key for funnel metadata/configuration\r\n */\r\n funnelMeta: (funnelId: string) => ['funnel', 'meta', funnelId] as const,\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", "/**\r\n * Config Hot Reload Utilities\r\n * \r\n * Enables live config editing without page reload.\r\n * Used by the config editor to push updates to preview iframes.\r\n */\r\n\r\nexport interface ConfigUpdateMessage {\r\n type: 'TAGADAPAY_CONFIG_UPDATE';\r\n config: Record<string, any>;\r\n timestamp?: number;\r\n}\r\n\r\n/**\r\n * Send config update to target window (iframe, popup, etc.)\r\n * \r\n * @param targetWindow - Window to send update to (e.g., iframe.contentWindow)\r\n * @param config - Updated config object\r\n * @param targetOrigin - Target origin (default: '*' for same-origin)\r\n */\r\nexport function sendConfigUpdate(\r\n targetWindow: Window,\r\n config: Record<string, any>,\r\n targetOrigin = '*'\r\n) {\r\n const message: ConfigUpdateMessage = {\r\n type: 'TAGADAPAY_CONFIG_UPDATE',\r\n config,\r\n timestamp: Date.now(),\r\n };\r\n\r\n targetWindow.postMessage(message, targetOrigin);\r\n}\r\n\r\n/**\r\n * Send config update to all iframes on the page\r\n * Useful for config editor with multiple preview panes\r\n * \r\n * @param config - Updated config object\r\n * @param selector - CSS selector for iframes (default: 'iframe')\r\n */\r\nexport function broadcastConfigUpdate(\r\n config: Record<string, any>,\r\n selector = 'iframe'\r\n) {\r\n if (typeof document === 'undefined') return;\r\n\r\n const iframes = document.querySelectorAll<HTMLIFrameElement>(selector);\r\n \r\n iframes.forEach((iframe) => {\r\n if (iframe.contentWindow) {\r\n sendConfigUpdate(iframe.contentWindow, config);\r\n }\r\n });\r\n\r\n console.log(`[ConfigHotReload] Broadcasted config update to ${iframes.length} iframe(s)`);\r\n}\r\n\r\n/**\r\n * Setup a listener for config updates\r\n * Returns cleanup function\r\n * \r\n * @param callback - Function to call when config is updated\r\n */\r\nexport function onConfigUpdate(\r\n callback: (config: Record<string, any>) => void\r\n): () => void {\r\n if (typeof window === 'undefined') {\r\n return () => {};\r\n }\r\n\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.data?.type === 'TAGADAPAY_CONFIG_UPDATE') {\r\n callback(event.data.config);\r\n }\r\n };\r\n\r\n window.addEventListener('message', handleMessage);\r\n\r\n return () => {\r\n window.removeEventListener('message', handleMessage);\r\n };\r\n}\r\n\r\n/**\r\n * Debounce helper for config updates\r\n * Prevents too many updates in quick succession\r\n */\r\nexport function debounceConfigUpdate(\r\n fn: (config: Record<string, any>) => void,\r\n delay = 150\r\n): (config: Record<string, any>) => void {\r\n let timeoutId: NodeJS.Timeout | null = null;\r\n\r\n return (config: Record<string, any>) => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n\r\n timeoutId = setTimeout(() => {\r\n fn(config);\r\n timeoutId = null;\r\n }, delay);\r\n };\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n", "/**\r\n * Path Remapping Helpers - Production Ready\r\n * \r\n * Framework-agnostic utility for handling path remapping from TagadaPay routing\r\n * Includes error handling, SSR compatibility, performance optimizations, and edge case handling\r\n * \r\n * @packageDocumentation\r\n */\r\n\r\nimport { match } from 'path-to-regexp';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Path information including both external and internal paths\r\n */\r\nexport interface PathInfo {\r\n /** The path shown in the browser URL bar (external/remapped path) */\r\n externalPath: string;\r\n /** The path that the plugin expects (internal/original path) */\r\n internalPath: string | null;\r\n /** Whether path remapping is active */\r\n isRemapped: boolean;\r\n /** The full URL including protocol, host, query, and hash */\r\n fullUrl: string;\r\n /** Query parameters from the URL */\r\n query: URLSearchParams;\r\n /** URL hash without the # symbol */\r\n hash: string;\r\n}\r\n\r\n/**\r\n * Result of route matching with extracted parameters\r\n */\r\nexport interface RouteMatchResult {\r\n /** Whether the route matched */\r\n matched: boolean;\r\n /** Extracted URL parameters (empty object if no match or no params) */\r\n params: Record<string, string>;\r\n}\r\n\r\n// ============================================================================\r\n// Private Cache\r\n// ============================================================================\r\n\r\n/**\r\n * Cache for internal path lookup to avoid repeated DOM queries\r\n * Cleared on navigation events\r\n */\r\nlet internalPathCache: string | null | undefined = undefined;\r\n\r\n/**\r\n * Flag to check if we're in a browser environment\r\n * Prevents errors during SSR\r\n */\r\nconst isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\r\n\r\n/**\r\n * Store original history methods for cleanup\r\n */\r\nconst originalPushState = isBrowser ? history.pushState.bind(history) : null;\r\nconst originalReplaceState = isBrowser ? history.replaceState.bind(history) : null;\r\n\r\n/**\r\n * Clear the internal path cache\r\n * Called automatically on navigation events\r\n */\r\nfunction clearCache(): void {\r\n internalPathCache = undefined;\r\n}\r\n\r\n// Setup cache invalidation on navigation (only in browser)\r\nif (isBrowser) {\r\n // Clear cache on history navigation\r\n window.addEventListener('popstate', clearCache);\r\n\r\n // Clear cache on hash change\r\n window.addEventListener('hashchange', clearCache);\r\n\r\n // Intercept pushState and replaceState to clear cache\r\n history.pushState = function (...args) {\r\n clearCache();\r\n return originalPushState!.apply(this, args);\r\n };\r\n\r\n history.replaceState = function (...args) {\r\n clearCache();\r\n return originalReplaceState!.apply(this, args);\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Core Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Get the internal path that the plugin expects\r\n * \r\n * Reads from the meta tag injected by TagadaPay middleware.\r\n * Results are cached for performance.\r\n * \r\n * **Development/Testing Mode (localhost only):**\r\n * You can simulate path remapping in two ways:\r\n * 1. Query parameter: `?__remap=/internal-path`\r\n * 2. localStorage with explicit external \u2192 internal mapping\r\n * \r\n * @returns The internal path from meta tag, or null if no remapping is active\r\n * @throws {Error} If called in a non-browser environment (SSR)\r\n * \r\n * @example\r\n * ```typescript\r\n * const internalPath = getInternalPath();\r\n * if (internalPath) {\r\n * console.log('Remapped from external to:', internalPath);\r\n * }\r\n * ```\r\n * \r\n * @example Simulating remapping in localhost - RECOMMENDED FORMAT\r\n * ```typescript\r\n * // NEW: Explicit mapping (clear which path remaps to which)\r\n * localStorage.setItem('tagadapay-remap', JSON.stringify({\r\n * externalPath: '/myremap/:param',\r\n * internalPath: '/hello-with-param/:myparam'\r\n * }));\r\n * // Then navigate to: http://localhost:5173/myremap/test123\r\n * // Result: Matches external pattern, uses internal path /hello-with-param/:myparam\r\n * \r\n * // Option 2: Query parameter (for quick tests)\r\n * // Navigate to: http://localhost:5173/custom-page?__remap=/hello\r\n * \r\n * // Clear simulation\r\n * localStorage.removeItem('tagadapay-remap');\r\n * ```\r\n * \r\n * @example More Examples\r\n * ```typescript\r\n * // Remap /products/:id to /hello-with-param/:myparam\r\n * localStorage.setItem('tagadapay-remap', JSON.stringify({\r\n * externalPath: '/products/:id',\r\n * internalPath: '/hello-with-param/:myparam'\r\n * }));\r\n * // Visit: http://localhost:5173/products/abc123\r\n * \r\n * // Remap /custom-hello to /hello\r\n * localStorage.setItem('tagadapay-remap', JSON.stringify({\r\n * externalPath: '/custom-hello',\r\n * internalPath: '/hello'\r\n * }));\r\n * // Visit: http://localhost:5173/custom-hello\r\n * ```\r\n */\r\nexport function getInternalPath(): string | null {\r\n // SSR check\r\n if (!isBrowser) {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.warn('[TagadaPay SDK] getInternalPath() called in SSR context');\r\n }\r\n return null;\r\n }\r\n\r\n // Return cached value if available\r\n if (internalPathCache !== undefined) {\r\n console.log('[TagadaPay SDK] \uD83D\uDCE6 Returning cached internal path:', internalPathCache);\r\n return internalPathCache;\r\n }\r\n\r\n console.log('[TagadaPay SDK] \uD83D\uDD0D getInternalPath() called for:', window.location.pathname);\r\n\r\n try {\r\n // Development/Testing: Check for simulation via query parameter or localStorage\r\n // Only works on localhost for security\r\n const isLocalhost = window.location.hostname === 'localhost' ||\r\n window.location.hostname === '127.0.0.1' ||\r\n window.location.hostname.endsWith('.localhost');\r\n\r\n console.log('[TagadaPay SDK] \uD83C\uDFE0 isLocalhost:', isLocalhost);\r\n\r\n if (isLocalhost) {\r\n // Priority 1: Query parameter ?__remap=/internal-path\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const queryRemap = urlParams.get('__remap');\r\n console.log('[TagadaPay SDK] \uD83D\uDD0D Query parameter __remap:', queryRemap);\r\n\r\n if (queryRemap) {\r\n internalPathCache = queryRemap;\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.log(`[TagadaPay SDK] \uD83D\uDD27 Simulating path remap via query: ${window.location.pathname} \u2192 ${queryRemap}`);\r\n }\r\n return queryRemap;\r\n }\r\n\r\n // Priority 2: localStorage tagadapay-remap\r\n // Format: JSON object with external -> internal mapping\r\n // Example: {\"externalPath\": \"/myremap/:param\", \"internalPath\": \"/hello-with-param/:myparam\"}\r\n try {\r\n const storageRemap = localStorage.getItem('tagadapay-remap');\r\n console.log('[TagadaPay SDK] \uD83D\uDD0D localStorage tagadapay-remap:', storageRemap);\r\n\r\n if (storageRemap) {\r\n try {\r\n // Try parsing as JSON first (new explicit format)\r\n const remapConfig = JSON.parse(storageRemap);\r\n console.log('[TagadaPay SDK] \uD83D\uDCDD Parsed remap config:', remapConfig);\r\n\r\n if (remapConfig.externalPath && remapConfig.internalPath) {\r\n const currentPath = window.location.pathname;\r\n console.log('[TagadaPay SDK] \uD83D\uDD0D Checking if', currentPath, 'matches pattern', remapConfig.externalPath);\r\n\r\n // Check if current path matches the external path pattern\r\n const matchFn = match(remapConfig.externalPath, {\r\n decode: decodeURIComponent,\r\n end: true\r\n });\r\n const result = matchFn(currentPath);\r\n console.log('[TagadaPay SDK] \uD83C\uDFAF Match result:', result);\r\n\r\n if (result !== false) {\r\n // Current path matches the external pattern, return internal path\r\n internalPathCache = remapConfig.internalPath;\r\n console.log(`[TagadaPay SDK] \u2705 Path remap: ${remapConfig.externalPath} \u2192 ${remapConfig.internalPath}`);\r\n console.log(`[TagadaPay SDK] \u2705 Current URL ${currentPath} matches external pattern`);\r\n console.log('[TagadaPay SDK] \uD83D\uDCE6 Caching and returning:', remapConfig.internalPath);\r\n return remapConfig.internalPath;\r\n } else {\r\n // Current path doesn't match the external pattern, no remap\r\n console.log(`[TagadaPay SDK] \u274C Current URL ${currentPath} does NOT match external pattern ${remapConfig.externalPath}`);\r\n internalPathCache = null;\r\n return null;\r\n }\r\n } else {\r\n console.log('[TagadaPay SDK] \u26A0\uFE0F Parsed config missing externalPath or internalPath');\r\n }\r\n } catch (jsonError) {\r\n // Not JSON, treat as legacy format (just internal path)\r\n console.log('[TagadaPay SDK] \u26A0\uFE0F Failed to parse as JSON, using legacy format:', jsonError);\r\n internalPathCache = storageRemap;\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.log(`[TagadaPay SDK] \uD83D\uDD27 Simulating path remap (legacy): ${window.location.pathname} \u2192 ${storageRemap}`);\r\n }\r\n return storageRemap;\r\n }\r\n } else {\r\n console.log('[TagadaPay SDK] \uD83D\uDCED No localStorage tagadapay-remap found');\r\n }\r\n } catch (e) {\r\n console.log('[TagadaPay SDK] \u274C localStorage error:', e);\r\n }\r\n }\r\n\r\n // Production: Try to get internal path from full remap config first (new way)\r\n const fullRemapMetaTag = document.querySelector('meta[name=\"tagadapay-path-remap\"]');\r\n if (fullRemapMetaTag) {\r\n try {\r\n const content = fullRemapMetaTag.getAttribute('content');\r\n if (content) {\r\n const decodedContent = decodeURIComponent(content);\r\n const parsed = JSON.parse(decodedContent);\r\n if (parsed.internal) {\r\n console.log('[TagadaPay SDK] \u2705 Got internal path from full remap config:', parsed.internal);\r\n internalPathCache = parsed.internal;\r\n return parsed.internal;\r\n }\r\n }\r\n } catch (e) {\r\n console.error('[TagadaPay SDK] Error parsing full remap config:', e);\r\n // Fall through to try legacy meta tag\r\n }\r\n }\r\n\r\n // Fallback: Try legacy meta tag (old way, for backward compatibility)\r\n const metaTag = document.querySelector('meta[name=\"x-plugin-internal-path\"]');\r\n\r\n if (!metaTag) {\r\n console.log('[TagadaPay SDK] \u2139\uFE0F No path remap meta tags found');\r\n internalPathCache = null;\r\n return null;\r\n }\r\n\r\n // Get and validate the content\r\n const content = metaTag.getAttribute('content');\r\n\r\n if (!content || content.trim() === '') {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.warn('[TagadaPay SDK] Meta tag found but content is empty');\r\n }\r\n internalPathCache = null;\r\n return null;\r\n }\r\n\r\n // Validate path format\r\n const trimmedContent = content.trim();\r\n if (!trimmedContent.startsWith('/')) {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.warn(`[TagadaPay SDK] Invalid internal path format: \"${trimmedContent}\" (must start with /)`);\r\n }\r\n internalPathCache = null;\r\n return null;\r\n }\r\n\r\n console.log('[TagadaPay SDK] \u2705 Got internal path from legacy meta tag:', trimmedContent);\r\n // Cache and return\r\n internalPathCache = trimmedContent;\r\n return trimmedContent;\r\n } catch (error) {\r\n // Log error in development\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.error('[TagadaPay SDK] Error reading internal path:', error);\r\n }\r\n\r\n internalPathCache = null;\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Check if path remapping is currently active\r\n * \r\n * @returns true if a remapped path is configured, false otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * if (isPathRemapped()) {\r\n * console.log('User is viewing a remapped URL');\r\n * }\r\n * ```\r\n */\r\nexport function isPathRemapped(): boolean {\r\n return getInternalPath() !== null;\r\n}\r\n\r\n/**\r\n * Get comprehensive path mapping information\r\n * \r\n * Returns both the external (browser) path and internal (plugin) path,\r\n * along with query parameters and hash.\r\n * \r\n * @returns {PathInfo} Complete path information object\r\n * @throws {Error} If called in a non-browser environment (SSR)\r\n * \r\n * @example\r\n * ```typescript\r\n * const pathInfo = getPathInfo();\r\n * console.log('Browser shows:', pathInfo.externalPath);\r\n * console.log('Plugin expects:', pathInfo.internalPath);\r\n * console.log('Query params:', pathInfo.query.get('id'));\r\n * ```\r\n */\r\nexport function getPathInfo(): PathInfo {\r\n // SSR check\r\n if (!isBrowser) {\r\n throw new Error('[TagadaPay SDK] getPathInfo() cannot be called in SSR context');\r\n }\r\n\r\n try {\r\n const externalPath = window.location.pathname;\r\n const internalPath = getInternalPath();\r\n const query = new URLSearchParams(window.location.search);\r\n const hash = window.location.hash.replace(/^#/, '');\r\n\r\n return {\r\n externalPath,\r\n internalPath,\r\n isRemapped: internalPath !== null,\r\n fullUrl: window.location.href,\r\n query,\r\n hash,\r\n };\r\n } catch (error) {\r\n // Fallback to safe defaults\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.error('[TagadaPay SDK] Error getting path info:', error);\r\n }\r\n\r\n return {\r\n externalPath: '/',\r\n internalPath: null,\r\n isRemapped: false,\r\n fullUrl: '',\r\n query: new URLSearchParams(),\r\n hash: '',\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Check if the current URL should match a given internal path\r\n * \r\n * Handles path remapping automatically. Use this for catch-all routing\r\n * implementations where you need to check multiple paths.\r\n * \r\n * @param internalPath - The plugin's defined path (must start with /)\r\n * @returns true if current URL should render this path's component\r\n * @throws {Error} If internalPath is invalid\r\n * \r\n * @example\r\n * ```typescript\r\n * // In a catch-all route handler\r\n * if (shouldMatchRoute('/hello')) {\r\n * return <HelloPage />;\r\n * }\r\n * if (shouldMatchRoute('/about')) {\r\n * return <AboutPage />;\r\n * }\r\n * ```\r\n */\r\n/**\r\n * Helper function to match a path against a pattern using path-to-regexp\r\n * @param pathname - The actual path to test\r\n * @param pattern - The pattern to match against (can include :params, wildcards, etc.)\r\n * @returns Object with matched status and extracted params\r\n */\r\nfunction matchesPathPattern(pathname: string, pattern: string): RouteMatchResult {\r\n try {\r\n // Exact match (no pattern)\r\n if (pathname === pattern) {\r\n return { matched: true, params: {} };\r\n }\r\n\r\n // Check if pattern contains special characters that require path-to-regexp\r\n // :param, *wildcard, {optional}, etc.\r\n const hasPatternSyntax = pattern.includes(':') || pattern.includes('*') || pattern.includes('{');\r\n\r\n if (!hasPatternSyntax) {\r\n // No pattern syntax - use exact match only\r\n // For paths without parameters, we should match exactly, not with prefix\r\n return { matched: pathname === pattern, params: {} };\r\n }\r\n\r\n // Use path-to-regexp for patterns with parameters, wildcards, or optional segments\r\n const matchFn = match(pattern, {\r\n decode: decodeURIComponent,\r\n end: true\r\n });\r\n const result = matchFn(pathname);\r\n\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.log(`[TagadaPay SDK] Pattern match: \"${pathname}\" against \"${pattern}\" =`, result !== false);\r\n }\r\n\r\n if (result === false) {\r\n return { matched: false, params: {} };\r\n }\r\n\r\n // Extract params from result\r\n const params: Record<string, string> = {};\r\n if (typeof result === 'object' && result.params) {\r\n Object.keys(result.params).forEach(key => {\r\n const value = result.params[key];\r\n // Convert to string and handle arrays (for splat params)\r\n params[key] = Array.isArray(value) ? value.join('/') : String(value);\r\n });\r\n }\r\n\r\n return { matched: true, params };\r\n } catch (error) {\r\n // Fallback to exact match if path-to-regexp fails\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.warn(`[TagadaPay SDK] Pattern matching failed for \"${pattern}\":`, error);\r\n }\r\n return { matched: pathname === pattern, params: {} };\r\n }\r\n}\r\n\r\n/**\r\n * Map parameter names from external pattern to internal pattern\r\n * Assumes parameters appear in the same order in both patterns\r\n * \r\n * @param externalParams - Parameters extracted from external URL\r\n * @param externalPattern - External path pattern (e.g., /off1/:lolo)\r\n * @param internalPattern - Internal path pattern (e.g., /post/:orderId)\r\n * @returns Mapped parameters with internal param names\r\n * \r\n * @example\r\n * ```typescript\r\n * mapParamNames(\r\n * {lolo: 'order_123'},\r\n * '/off1/:lolo',\r\n * '/post/:orderId'\r\n * )\r\n * // Returns: {orderId: 'order_123'}\r\n * ```\r\n */\r\nfunction mapParamNames(\r\n externalParams: Record<string, string>,\r\n externalPattern: string,\r\n internalPattern: string\r\n): Record<string, string> {\r\n // Extract parameter names from patterns\r\n const externalParamNames = extractParamNames(externalPattern);\r\n const internalParamNames = extractParamNames(internalPattern);\r\n\r\n // If no params or count mismatch, return original params\r\n if (externalParamNames.length === 0 ||\r\n externalParamNames.length !== internalParamNames.length) {\r\n return externalParams;\r\n }\r\n\r\n // Map parameters by position\r\n const mappedParams: Record<string, string> = {};\r\n externalParamNames.forEach((externalName, index) => {\r\n const internalName = internalParamNames[index];\r\n const value = externalParams[externalName];\r\n if (value !== undefined) {\r\n mappedParams[internalName] = value;\r\n }\r\n });\r\n\r\n return mappedParams;\r\n}\r\n\r\n/**\r\n * Extract parameter names from a path pattern\r\n * \r\n * @param pattern - Path pattern (e.g., /post/:orderId/item/:itemId)\r\n * @returns Array of parameter names (e.g., ['orderId', 'itemId'])\r\n */\r\nfunction extractParamNames(pattern: string): string[] {\r\n const matches = pattern.match(/:([a-zA-Z0-9_]+)/g);\r\n if (!matches) return [];\r\n return matches.map(m => m.substring(1)); // Remove ':' prefix\r\n}\r\n\r\n/**\r\n * Match a route and extract URL parameters\r\n * \r\n * Handles path remapping automatically and extracts parameters from the URL.\r\n * This is the preferred method when you need both match status and parameters.\r\n * \r\n * @param internalPath - The plugin's defined path (must start with /)\r\n * @returns Object with `matched` boolean and `params` object\r\n * @throws {Error} If internalPath is invalid\r\n * \r\n * @example\r\n * ```typescript\r\n * // In a catch-all route handler\r\n * const result = matchRoute('/hello-with-param/:myparam');\r\n * if (result.matched) {\r\n * console.log('Matched! Param:', result.params.myparam);\r\n * return <HelloPage myparam={result.params.myparam} />;\r\n * }\r\n * ```\r\n */\r\nexport function matchRoute(internalPath: string): RouteMatchResult {\r\n // Validate input\r\n if (typeof internalPath !== 'string') {\r\n throw new Error(`[TagadaPay SDK] internalPath must be a string, got ${typeof internalPath}`);\r\n }\r\n\r\n if (internalPath.trim() === '') {\r\n throw new Error('[TagadaPay SDK] internalPath cannot be empty');\r\n }\r\n\r\n if (!internalPath.startsWith('/')) {\r\n throw new Error(`[TagadaPay SDK] internalPath must start with /, got \"${internalPath}\"`);\r\n }\r\n\r\n // SSR check\r\n if (!isBrowser) {\r\n return { matched: false, params: {} };\r\n }\r\n\r\n try {\r\n const currentPath = window.location.pathname;\r\n const remappedInternalPath = getInternalPath();\r\n\r\n // If remapped, need to extract params from external URL using external pattern\r\n if (remappedInternalPath) {\r\n const internalMatch = matchesPathPattern(remappedInternalPath, internalPath);\r\n if (!internalMatch.matched) {\r\n return { matched: false, params: {} };\r\n }\r\n\r\n // Get the external pattern from remap config\r\n let externalPattern: string | null = null;\r\n\r\n // Check localStorage for remap config (development/testing)\r\n if (typeof localStorage !== 'undefined') {\r\n try {\r\n const remapData = localStorage.getItem('tagadapay-remap');\r\n if (remapData) {\r\n const parsed = JSON.parse(remapData);\r\n if (parsed.externalPath && parsed.internalPath === remappedInternalPath) {\r\n externalPattern = parsed.externalPath;\r\n }\r\n }\r\n } catch (e) {\r\n // Ignore parsing errors\r\n }\r\n }\r\n\r\n // Check meta tag for production remap config\r\n if (!externalPattern && typeof document !== 'undefined') {\r\n console.log('[TagadaPay SDK] \uD83D\uDD0D Checking for production path remap meta tag...');\r\n const metaTag = document.querySelector('meta[name=\"tagadapay-path-remap\"]');\r\n if (metaTag) {\r\n try {\r\n const content = metaTag.getAttribute('content');\r\n console.log('[TagadaPay SDK] \uD83D\uDCC4 Found meta tag content (encoded):', content?.substring(0, 100) + '...');\r\n if (content) {\r\n // Decode URL-encoded content before parsing\r\n const decodedContent = decodeURIComponent(content);\r\n console.log('[TagadaPay SDK] \uD83D\uDCC4 Decoded content:', decodedContent);\r\n const parsed = JSON.parse(decodedContent);\r\n console.log('[TagadaPay SDK] \uD83D\uDCE6 Parsed remap config:', parsed);\r\n console.log('[TagadaPay SDK] \uD83D\uDD0D Checking if internal path matches:', {\r\n parsedInternal: parsed.internal,\r\n remappedInternalPath\r\n });\r\n if (parsed.external && parsed.internal === remappedInternalPath) {\r\n externalPattern = parsed.external;\r\n console.log('[TagadaPay SDK] \u2705 Using external pattern from meta tag:', externalPattern);\r\n } else {\r\n console.log('[TagadaPay SDK] \u26A0\uFE0F Internal path mismatch - not using meta tag config');\r\n }\r\n }\r\n } catch (e) {\r\n // Ignore parsing errors\r\n console.error('[TagadaPay SDK] \u274C Error parsing path remap meta tag:', e);\r\n }\r\n } else {\r\n console.log('[TagadaPay SDK] \u274C No tagadapay-path-remap meta tag found');\r\n }\r\n }\r\n\r\n // Extract params from current URL using external pattern\r\n if (externalPattern) {\r\n const externalMatch = matchesPathPattern(currentPath, externalPattern);\r\n if (externalMatch.matched) {\r\n // Map parameter names from external pattern to internal pattern\r\n // External: /off1/:lolo \u2192 {lolo: 'value'}\r\n // Internal: /post/:orderId \u2192 expects {orderId: 'value'}\r\n console.log('[TagadaPay SDK] \uD83D\uDD04 Mapping params from external to internal pattern');\r\n console.log('[TagadaPay SDK] External params:', externalMatch.params);\r\n console.log('[TagadaPay SDK] External pattern:', externalPattern);\r\n console.log('[TagadaPay SDK] Internal pattern:', internalPath);\r\n\r\n const mappedParams = mapParamNames(\r\n externalMatch.params,\r\n externalPattern,\r\n internalPath\r\n );\r\n\r\n console.log('[TagadaPay SDK] Mapped params:', mappedParams);\r\n return { matched: true, params: mappedParams };\r\n }\r\n }\r\n\r\n // Fallback: try to extract from current URL using internal pattern\r\n // (in case external pattern not found or doesn't match)\r\n const currentMatch = matchesPathPattern(currentPath, internalPath);\r\n return { matched: true, params: currentMatch.params };\r\n }\r\n\r\n // No remapping - match and extract from current path\r\n return matchesPathPattern(currentPath, internalPath);\r\n } catch (error) {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.error('[TagadaPay SDK] Error in matchRoute:', error);\r\n }\r\n return { matched: false, params: {} };\r\n }\r\n}\r\n\r\n/**\r\n * Check if the current URL should match a given internal path\r\n * \r\n * Handles path remapping automatically. Use this for catch-all routing\r\n * implementations where you only need to check if a path matches.\r\n * \r\n * For extracting parameters, use `matchRoute()` instead.\r\n * \r\n * @param internalPath - The plugin's defined path (must start with /)\r\n * @returns true if current URL should render this path's component\r\n * @throws {Error} If internalPath is invalid\r\n * \r\n * @example\r\n * ```typescript\r\n * // In a catch-all route handler\r\n * if (shouldMatchRoute('/hello')) {\r\n * return <HelloPage />;\r\n * }\r\n * if (shouldMatchRoute('/about')) {\r\n * return <AboutPage />;\r\n * }\r\n * ```\r\n */\r\nexport function shouldMatchRoute(internalPath: string): boolean {\r\n return matchRoute(internalPath).matched;\r\n}\r\n\r\n/**\r\n * Get the current matched path\r\n * \r\n * Returns the actual path in the browser if it matches the given internal path.\r\n * Useful when you need the actual URL path for constructing links or API calls.\r\n * \r\n * @param internalPath - The plugin's defined path\r\n * @returns The current browser path if it matches, null otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * const matchedPath = getMatchedPath('/hello');\r\n * if (matchedPath) {\r\n * console.log('Matched at:', matchedPath); // Could be /hello or /hello2\r\n * }\r\n * ```\r\n */\r\nexport function getMatchedPath(internalPath: string): string | null {\r\n // Validate input\r\n if (typeof internalPath !== 'string' || !internalPath.startsWith('/')) {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.warn(`[TagadaPay SDK] Invalid internalPath: \"${internalPath}\"`);\r\n }\r\n return null;\r\n }\r\n\r\n // SSR check\r\n if (!isBrowser) {\r\n return null;\r\n }\r\n\r\n try {\r\n const currentPath = window.location.pathname;\r\n const remappedInternalPath = getInternalPath();\r\n\r\n // If current path matches internal path\r\n if (currentPath === internalPath ||\r\n (remappedInternalPath === internalPath && currentPath !== internalPath)) {\r\n return currentPath;\r\n }\r\n\r\n return null;\r\n } catch (error) {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.error('[TagadaPay SDK] Error in getMatchedPath:', error);\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Utility Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Manually clear the internal path cache\r\n * \r\n * Useful for testing or when you know the meta tag has changed.\r\n * Normally you don't need to call this as it's handled automatically.\r\n * \r\n * @example\r\n * ```typescript\r\n * // After dynamically updating the meta tag\r\n * document.querySelector('meta[name=\"x-plugin-internal-path\"]')\r\n * ?.setAttribute('content', '/new-path');\r\n * clearInternalPathCache();\r\n * ```\r\n */\r\nexport function clearInternalPathCache(): void {\r\n clearCache();\r\n}\r\n\r\n/**\r\n * Check if running in a browser environment\r\n * \r\n * Useful for conditional logic in universal/isomorphic code.\r\n * \r\n * @returns true if in browser, false if in SSR/Node environment\r\n * \r\n * @example\r\n * ```typescript\r\n * if (isBrowserEnvironment()) {\r\n * // Safe to use window/document\r\n * const path = getInternalPath();\r\n * }\r\n * ```\r\n */\r\nexport function isBrowserEnvironment(): boolean {\r\n return isBrowser;\r\n}\r\n\r\n/**\r\n * Get debug information about the current routing state\r\n * \r\n * Returns detailed information for debugging path remapping issues.\r\n * Only available in development mode.\r\n * \r\n * @returns Debug information object\r\n * \r\n * @example\r\n * ```typescript\r\n * const debug = getDebugInfo();\r\n * console.table(debug);\r\n * ```\r\n */\r\nexport function getDebugInfo(): Record<string, any> {\r\n if (!isBrowser) {\r\n return {\r\n environment: 'SSR/Node',\r\n error: 'Not in browser environment',\r\n };\r\n }\r\n\r\n try {\r\n const pathInfo = getPathInfo();\r\n const metaTag = document.querySelector('meta[name=\"x-plugin-internal-path\"]');\r\n\r\n return {\r\n environment: 'Browser',\r\n externalPath: pathInfo.externalPath,\r\n internalPath: pathInfo.internalPath,\r\n isRemapped: pathInfo.isRemapped,\r\n fullUrl: pathInfo.fullUrl,\r\n query: Object.fromEntries(pathInfo.query.entries()),\r\n hash: pathInfo.hash,\r\n metaTagExists: !!metaTag,\r\n metaTagContent: metaTag?.getAttribute('content') || null,\r\n cacheHit: internalPathCache !== undefined,\r\n cachedValue: internalPathCache,\r\n timestamp: new Date().toISOString(),\r\n };\r\n } catch (error) {\r\n return {\r\n environment: 'Browser',\r\n error: String(error),\r\n };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Cleanup\r\n// ============================================================================\r\n\r\n/**\r\n * Cleanup function to remove event listeners\r\n * \r\n * Call this when unmounting the plugin or cleaning up resources.\r\n * Important for preventing memory leaks in SPAs.\r\n * \r\n * @example\r\n * ```typescript\r\n * // In React\r\n * useEffect(() => {\r\n * return () => {\r\n * cleanupPathRemapping();\r\n * };\r\n * }, []);\r\n * ```\r\n */\r\nexport function cleanupPathRemapping(): void {\r\n if (!isBrowser) return;\r\n\r\n try {\r\n window.removeEventListener('popstate', clearCache);\r\n window.removeEventListener('hashchange', clearCache);\r\n\r\n // Restore original history methods\r\n if (originalPushState) {\r\n history.pushState = originalPushState;\r\n }\r\n if (originalReplaceState) {\r\n history.replaceState = originalReplaceState;\r\n }\r\n\r\n clearCache();\r\n } catch (error) {\r\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\r\n console.error('[TagadaPay SDK] Error during cleanup:', error);\r\n }\r\n }\r\n}\r\n\r\n", "/**\r\n * PaymentService (Standalone / Vanilla JS)\r\n *\r\n * Complete standalone equivalent of the React SDK's payment system:\r\n * - usePaymentQuery (orchestration)\r\n * - usePaymentPolling (status polling)\r\n * - usePaymentActionHandler (action routing)\r\n * - usePaymentProcessors (card, APM, Apple Pay, Google Pay, saved instruments)\r\n * - usePaymentInstruments (instrument creation)\r\n * - useThreeds (3DS session + challenge)\r\n * - useGenericPaymentReturn (generic redirect return)\r\n * - useAirwallex3dsReturn (Airwallex-specific redirect return)\r\n * - All action handlers: redirect, threeds_auth, processor_auth, error,\r\n * kesspay_auth, trustflow_auth, finix_radar, stripe_radar, airwallex radar,\r\n * mastercard_auth\r\n *\r\n * No React. No hooks. No DOM framework dependency.\r\n */\r\n\r\nimport {\r\n PaymentsResource,\r\n type Payment,\r\n type PaymentResponse,\r\n type BasisTheoryInstance,\r\n type CardPaymentMethod,\r\n type ApplePayToken,\r\n type GooglePayToken,\r\n type PaymentInstrumentResponse,\r\n type PaymentInstrumentCustomerResponse,\r\n} from '../core/resources/payments';\r\nimport { ThreedsResource } from '../core/resources/threeds';\r\nimport { StoreConfigResource, type StoreConfig } from '../core/resources/storeConfig';\r\nimport type { ApiClient } from '../core/resources/apiClient';\r\nimport { getAssignedPaymentFlowId } from '../core/funnelClient';\r\nimport { getBasisTheoryApiKey } from '../../react/config/payment';\r\n\r\n// =============================================================================\r\n// TYPES\r\n// =============================================================================\r\n\r\nexport interface PaymentServiceConfig {\r\n apiClient: ApiClient;\r\n storeId?: string;\r\n}\r\n\r\nexport interface CardData {\r\n cardNumber: string;\r\n expiryDate: string;\r\n cvc: string;\r\n}\r\n\r\nexport interface ApmData {\r\n processorId: string;\r\n paymentMethod: string;\r\n initiatedBy?: 'customer' | 'merchant';\r\n source?: 'upsell' | 'checkout' | 'offer' | 'missing_club' | 'forced';\r\n}\r\n\r\nexport interface PaymentResult {\r\n success: boolean;\r\n payment?: Payment;\r\n order?: { id: string; checkoutSessionId?: string } | null;\r\n error?: string;\r\n /** True if the browser is being redirected (page will unload) */\r\n redirecting?: boolean;\r\n}\r\n\r\nexport interface PaymentCallbacks {\r\n onProcessing?: (processing: boolean) => void;\r\n onError?: (error: string | null) => void;\r\n onCurrentPaymentId?: (paymentId: string | null) => void;\r\n onSuccess?: (payment: Payment) => void;\r\n onFailure?: (error: string) => void;\r\n onRedirectReturn?: (paymentId: string) => void;\r\n}\r\n\r\nexport interface PollingCallbacks {\r\n onSuccess: (payment: Payment) => void;\r\n onFailure: (error: string) => void;\r\n onRequireAction?: (payment: Payment) => void;\r\n}\r\n\r\n// =============================================================================\r\n// PAYMENT SERVICE\r\n// =============================================================================\r\n\r\nexport class PaymentService {\r\n private paymentsResource: PaymentsResource;\r\n private threedsResource: ThreedsResource;\r\n private storeConfigResource: StoreConfigResource;\r\n private storeId?: string;\r\n private callbacks: PaymentCallbacks = {};\r\n\r\n // BasisTheory (lazy initialized)\r\n private basisTheory: BasisTheoryInstance | null = null;\r\n private btInitPromise: Promise<BasisTheoryInstance | null> | null = null;\r\n\r\n // BasisTheory 3DS (lazy initialized)\r\n private bt3dsClass: any = null;\r\n private bt3dsInitPromise: Promise<any> | null = null;\r\n\r\n // Store config (cached)\r\n private storeConfig: StoreConfig | null = null;\r\n private storeConfigPromise: Promise<StoreConfig | null> | null = null;\r\n\r\n // Polling state\r\n private pollTimer: ReturnType<typeof setInterval> | null = null;\r\n private pollAttempts = 0;\r\n private isPollingActive = false;\r\n\r\n // Redirect return guard\r\n private redirectReturnProcessed = false;\r\n\r\n constructor(config: PaymentServiceConfig) {\r\n this.paymentsResource = new PaymentsResource(config.apiClient);\r\n this.threedsResource = new ThreedsResource(config.apiClient);\r\n this.storeConfigResource = new StoreConfigResource(config.apiClient);\r\n this.storeId = config.storeId;\r\n }\r\n\r\n /** Expose paymentsResource for advanced consumers */\r\n get payments(): PaymentsResource {\r\n return this.paymentsResource;\r\n }\r\n\r\n // ==========================================================================\r\n // LIFECYCLE\r\n // ==========================================================================\r\n\r\n setCallbacks(callbacks: PaymentCallbacks) {\r\n this.callbacks = callbacks;\r\n }\r\n\r\n /** Pre-warm BasisTheory + store config (non-blocking). */\r\n warmup(): void {\r\n void this.initBasisTheory();\r\n void this.initBt3ds();\r\n if (this.storeId) void this.fetchStoreConfig();\r\n }\r\n\r\n destroy(): void {\r\n this.stopPolling();\r\n this.basisTheory = null;\r\n this.btInitPromise = null;\r\n this.bt3dsClass = null;\r\n this.bt3dsInitPromise = null;\r\n this.storeConfig = null;\r\n this.storeConfigPromise = null;\r\n }\r\n\r\n // ==========================================================================\r\n // BASIS THEORY\r\n // ==========================================================================\r\n\r\n private initBasisTheory(): Promise<BasisTheoryInstance | null> {\r\n if (this.basisTheory) return Promise.resolve(this.basisTheory);\r\n if (this.btInitPromise) return this.btInitPromise;\r\n\r\n this.btInitPromise = (async () => {\r\n try {\r\n const apiKey = getBasisTheoryApiKey();\r\n const { BasisTheory } = await import('@basis-theory/basis-theory-js');\r\n const bt = await new BasisTheory().init(apiKey, { elements: false });\r\n this.basisTheory = bt as unknown as BasisTheoryInstance;\r\n console.log('[PaymentService] BasisTheory initialized');\r\n return this.basisTheory;\r\n } catch (error) {\r\n console.error('[PaymentService] BasisTheory init failed:', error);\r\n return null;\r\n }\r\n })();\r\n\r\n return this.btInitPromise;\r\n }\r\n\r\n private getBtApiKey(): string {\r\n return getBasisTheoryApiKey();\r\n }\r\n\r\n /** Lazy-load @basis-theory/web-threeds (BasisTheory3ds class) */\r\n private initBt3ds(): Promise<any> {\r\n if (this.bt3dsClass) return Promise.resolve(this.bt3dsClass);\r\n if (this.bt3dsInitPromise) return this.bt3dsInitPromise;\r\n\r\n this.bt3dsInitPromise = (async () => {\r\n try {\r\n const { BasisTheory3ds } = await import('@basis-theory/web-threeds');\r\n this.bt3dsClass = BasisTheory3ds;\r\n console.log('[PaymentService] BasisTheory 3DS loaded');\r\n return this.bt3dsClass;\r\n } catch (error) {\r\n console.error('[PaymentService] BasisTheory 3DS load failed:', error);\r\n return null;\r\n }\r\n })();\r\n\r\n return this.bt3dsInitPromise;\r\n }\r\n\r\n // ==========================================================================\r\n // STORE CONFIG\r\n // ==========================================================================\r\n\r\n private fetchStoreConfig(): Promise<StoreConfig | null> {\r\n if (this.storeConfig) return Promise.resolve(this.storeConfig);\r\n if (this.storeConfigPromise) return this.storeConfigPromise;\r\n if (!this.storeId) return Promise.resolve(null);\r\n\r\n this.storeConfigPromise = (async () => {\r\n try {\r\n this.storeConfig = await this.storeConfigResource.getStoreConfig(this.storeId!);\r\n return this.storeConfig;\r\n } catch {\r\n return null;\r\n }\r\n })();\r\n\r\n return this.storeConfigPromise;\r\n }\r\n\r\n // ==========================================================================\r\n // POLLING\r\n // ==========================================================================\r\n\r\n stopPolling(): void {\r\n if (this.pollTimer) {\r\n clearInterval(this.pollTimer);\r\n this.pollTimer = null;\r\n }\r\n this.isPollingActive = false;\r\n this.pollAttempts = 0;\r\n }\r\n\r\n startPolling(\r\n paymentId: string,\r\n callbacks: PollingCallbacks,\r\n maxAttempts = 20,\r\n interval = 1500,\r\n ): void {\r\n this.stopPolling();\r\n this.isPollingActive = true;\r\n this.pollAttempts = 0;\r\n\r\n console.log('[PaymentService] Starting payment polling:', paymentId);\r\n\r\n const check = async () => {\r\n if (!this.isPollingActive) return;\r\n\r\n this.pollAttempts++;\r\n try {\r\n const payment = await this.paymentsResource.getPaymentStatus(paymentId);\r\n console.log(`[PaymentService] Poll #${this.pollAttempts}: ${payment.status} / ${payment.subStatus}`);\r\n\r\n if (!this.isPollingActive) return;\r\n\r\n if (\r\n payment.status === 'succeeded' ||\r\n (payment.status === 'pending' && payment.subStatus === 'authorized')\r\n ) {\r\n this.stopPolling();\r\n callbacks.onSuccess(payment);\r\n return;\r\n }\r\n\r\n if (payment.requireAction !== 'none' && payment.requireActionData && !payment.requireActionData.processed) {\r\n this.stopPolling();\r\n callbacks.onRequireAction?.(payment);\r\n return;\r\n }\r\n\r\n if (payment.status !== 'succeeded' && payment.status !== 'pending') {\r\n this.stopPolling();\r\n callbacks.onFailure(payment.status || 'Payment failed');\r\n return;\r\n }\r\n\r\n if (this.pollAttempts >= maxAttempts) {\r\n this.stopPolling();\r\n callbacks.onFailure('Payment verification timeout');\r\n }\r\n } catch {\r\n if (this.pollAttempts >= 3) {\r\n this.stopPolling();\r\n callbacks.onFailure('Payment verification failed due to network errors');\r\n }\r\n }\r\n };\r\n\r\n void check();\r\n this.pollTimer = setInterval(() => void check(), interval);\r\n }\r\n\r\n // ==========================================================================\r\n // COMMON: processPaymentDirect + result handling\r\n // ==========================================================================\r\n\r\n /**\r\n * Internal: call processPaymentDirect and handle requireAction / polling.\r\n * Shared by processCardPayment, processApplePayPayment, etc.\r\n */\r\n private async processAndHandle(\r\n checkoutSessionId: string,\r\n paymentInstrumentId: string,\r\n threedsSessionId?: string,\r\n extra?: { processorId?: string; paymentMethod?: string; initiatedBy?: 'customer' | 'merchant'; source?: 'upsell' | 'checkout' | 'offer' | 'missing_club' | 'forced' },\r\n ): Promise<PaymentResult> {\r\n const paymentFlowId = getAssignedPaymentFlowId();\r\n\r\n const response = await this.paymentsResource.processPaymentDirect(\r\n checkoutSessionId,\r\n paymentInstrumentId,\r\n threedsSessionId,\r\n {\r\n initiatedBy: extra?.initiatedBy || 'customer',\r\n source: extra?.source || 'checkout',\r\n paymentFlowId,\r\n processorId: extra?.processorId,\r\n paymentMethod: extra?.paymentMethod,\r\n },\r\n );\r\n\r\n console.log('[PaymentService] Payment response:', {\r\n paymentId: response.payment?.id,\r\n status: response.payment?.status,\r\n requireAction: response.payment?.requireAction,\r\n });\r\n\r\n this.callbacks.onCurrentPaymentId?.(response.payment?.id || null);\r\n\r\n if (response.payment.requireAction !== 'none') {\r\n await this.handlePaymentAction(response.payment);\r\n return { success: true, payment: response.payment, order: response.order, redirecting: true };\r\n }\r\n\r\n if (response.payment.status === 'succeeded') {\r\n this.callbacks.onProcessing?.(false);\r\n return { success: true, payment: response.payment, order: response.order };\r\n }\r\n\r\n return new Promise<PaymentResult>((resolve) => {\r\n this.startPolling(response.payment.id, {\r\n onSuccess: (payment) => {\r\n this.callbacks.onProcessing?.(false);\r\n resolve({ success: true, payment, order: response.order });\r\n },\r\n onFailure: (error) => {\r\n this.callbacks.onError?.(error);\r\n this.callbacks.onProcessing?.(false);\r\n resolve({ success: false, error });\r\n },\r\n onRequireAction: (payment) => {\r\n void this.handlePaymentAction(payment);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * After radar / completePaymentAfterAction, handle the resumed payment.\r\n */\r\n private async handleResumedPayment(resumedPayment: Payment): Promise<void> {\r\n if (resumedPayment.status === 'declined' || resumedPayment.status === 'failed') {\r\n const errorMsg = (resumedPayment as any).error?.message\r\n || (resumedPayment as any).error?.processorMessage\r\n || 'Payment declined';\r\n this.callbacks.onError?.(errorMsg);\r\n this.callbacks.onProcessing?.(false);\r\n this.callbacks.onFailure?.(errorMsg);\r\n return;\r\n }\r\n\r\n if (resumedPayment.status === 'succeeded') {\r\n this.callbacks.onProcessing?.(false);\r\n this.callbacks.onSuccess?.(resumedPayment);\r\n return;\r\n }\r\n\r\n if (resumedPayment.requireAction !== 'none' && resumedPayment.requireActionData) {\r\n await this.handlePaymentAction(resumedPayment);\r\n return;\r\n }\r\n\r\n // Start polling for final status\r\n this.startPolling(resumedPayment.id, {\r\n onSuccess: (p) => {\r\n this.callbacks.onProcessing?.(false);\r\n this.callbacks.onSuccess?.(p);\r\n },\r\n onFailure: (e) => {\r\n this.callbacks.onError?.(e);\r\n this.callbacks.onProcessing?.(false);\r\n },\r\n onRequireAction: (p) => { void this.handlePaymentAction(p); },\r\n });\r\n }\r\n\r\n // ==========================================================================\r\n // PAYMENT ACTION HANDLER (mirrors usePaymentActionHandler)\r\n // ==========================================================================\r\n\r\n async handlePaymentAction(payment: Payment): Promise<void> {\r\n if (payment.requireAction === 'none') return;\r\n if (payment.requireActionData?.processed) return;\r\n\r\n const actionData = payment.requireActionData;\r\n if (!actionData) return;\r\n\r\n try {\r\n await this.paymentsResource.markPaymentActionProcessed(payment.id);\r\n } catch { /* best-effort */ }\r\n\r\n switch (actionData.type) {\r\n case 'redirect':\r\n case 'redirect_to_payment':\r\n case 'processor_auth': {\r\n const redirectUrl = actionData.metadata?.redirect?.redirectUrl || actionData.redirectUrl || actionData.url;\r\n if (redirectUrl) {\r\n console.log('[PaymentService] Redirecting:', redirectUrl);\r\n window.location.href = redirectUrl;\r\n } else if (payment.status === 'succeeded') {\r\n this.callbacks.onProcessing?.(false);\r\n this.callbacks.onSuccess?.(payment);\r\n }\r\n break;\r\n }\r\n\r\n case 'threeds_auth': {\r\n const session = actionData.metadata?.threedsSession;\r\n if (session?.acsChallengeUrl) {\r\n console.log('[PaymentService] 3DS challenge redirect:', session.acsChallengeUrl);\r\n window.location.href = session.acsChallengeUrl;\r\n }\r\n break;\r\n }\r\n\r\n case 'error': {\r\n const msg = actionData.message || 'Payment action failed';\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n break;\r\n }\r\n\r\n case 'kesspay_auth':\r\n this.handleKessPayAuth(actionData);\r\n break;\r\n\r\n case 'trustflow_auth':\r\n this.handleTrustFlowAuth(actionData);\r\n break;\r\n\r\n case 'finix_radar':\r\n await this.handleFinixRadar(payment, actionData);\r\n break;\r\n\r\n case 'stripe_radar':\r\n await this.handleStripeRadar(payment, actionData);\r\n break;\r\n\r\n case 'radar':\r\n if (actionData.metadata?.provider === 'airwallex') {\r\n await this.handleAirwallexRadar(payment, actionData);\r\n }\r\n break;\r\n\r\n case 'mastercard_auth':\r\n await this.handleMasterCardAuth(payment, actionData);\r\n break;\r\n\r\n default: {\r\n console.log('[PaymentService] Unhandled action, starting polling:', actionData.type);\r\n this.startPolling(payment.id, {\r\n onSuccess: (p) => { this.callbacks.onProcessing?.(false); this.callbacks.onSuccess?.(p); },\r\n onFailure: (e) => { this.callbacks.onError?.(e); this.callbacks.onProcessing?.(false); },\r\n onRequireAction: (p) => { void this.handlePaymentAction(p); },\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // KessPay Auth\r\n // --------------------------------------------------------------------------\r\n private handleKessPayAuth(actionData: any): void {\r\n const threeDSData = actionData?.metadata?.threeds;\r\n if (!threeDSData?.challengeHtml) {\r\n this.callbacks.onError?.('Missing KessPay 3DS challenge HTML');\r\n this.callbacks.onProcessing?.(false);\r\n return;\r\n }\r\n\r\n try {\r\n this.callbacks.onProcessing?.(false);\r\n const tempDoc = document.implementation.createHTMLDocument('KessPay 3DS');\r\n tempDoc.body.innerHTML = threeDSData.challengeHtml;\r\n\r\n const form = tempDoc.querySelector('form');\r\n if (form) {\r\n const redirectForm = document.createElement('form');\r\n redirectForm.method = form.method || 'POST';\r\n redirectForm.action = form.action || '';\r\n redirectForm.style.display = 'none';\r\n form.querySelectorAll('input').forEach(input => {\r\n const newInput = document.createElement('input');\r\n newInput.type = input.type;\r\n newInput.name = input.name;\r\n newInput.value = input.value;\r\n redirectForm.appendChild(newInput);\r\n });\r\n document.body.appendChild(redirectForm);\r\n redirectForm.submit();\r\n } else {\r\n document.open();\r\n document.write(threeDSData.challengeHtml);\r\n document.close();\r\n }\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'KessPay 3DS failed');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // TrustFlow Auth\r\n // --------------------------------------------------------------------------\r\n private handleTrustFlowAuth(actionData: any): void {\r\n const authData = actionData?.metadata?.trustflow;\r\n if (!authData?.appId || !authData?.txnId || !authData?.hash) {\r\n this.callbacks.onError?.('Missing Trust Flow 3DS data');\r\n this.callbacks.onProcessing?.(false);\r\n return;\r\n }\r\n\r\n try {\r\n this.callbacks.onProcessing?.(false);\r\n const form = document.createElement('form');\r\n form.method = 'POST';\r\n form.action = authData.captureUrl;\r\n form.style.display = 'none';\r\n for (const [name, value] of [['APP_ID', authData.appId], ['TXN_ID', authData.txnId], ['HASH', authData.hash]] as const) {\r\n const input = document.createElement('input');\r\n input.type = 'hidden';\r\n input.name = name;\r\n input.value = value;\r\n form.appendChild(input);\r\n }\r\n document.body.appendChild(form);\r\n form.submit();\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'Trust Flow 3DS failed');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // Finix Radar\r\n // --------------------------------------------------------------------------\r\n private async handleFinixRadar(payment: Payment, actionData: any): Promise<void> {\r\n const radarConfig = actionData.metadata?.radar;\r\n if (!radarConfig) {\r\n this.callbacks.onError?.('Finix radar config missing');\r\n this.callbacks.onProcessing?.(false);\r\n return;\r\n }\r\n\r\n try {\r\n await this.loadScript('https://js.finix.com/v/1/finix.js', () => typeof (window as any).Finix?.Auth === 'function');\r\n\r\n const sessionKey = await new Promise<string>((resolve, reject) => {\r\n const timeout = setTimeout(() => reject(new Error('Timeout waiting for Finix Auth')), 10000);\r\n const FinixAuth = (window as any).Finix.Auth(radarConfig.environment, radarConfig.merchantId, () => {\r\n clearTimeout(timeout);\r\n const key = FinixAuth.getSessionKey();\r\n key ? resolve(key) : reject(new Error('No Finix session key'));\r\n });\r\n const immediateKey = FinixAuth.getSessionKey();\r\n if (immediateKey) { clearTimeout(timeout); resolve(immediateKey); }\r\n });\r\n\r\n await this.paymentsResource.saveRadarSession({\r\n orderId: radarConfig.orderId,\r\n finixRadarSessionId: sessionKey,\r\n finixRadarSessionData: {\r\n sessionKey,\r\n merchantId: radarConfig.merchantId,\r\n environment: radarConfig.environment,\r\n createdAt: new Date().toISOString(),\r\n },\r\n });\r\n\r\n const resumed = await this.paymentsResource.completePaymentAfterAction(payment.id);\r\n await this.handleResumedPayment(resumed);\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'Finix radar failed');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // Stripe Radar\r\n // --------------------------------------------------------------------------\r\n private async handleStripeRadar(payment: Payment, actionData: any): Promise<void> {\r\n const radarConfig = actionData.metadata?.radar;\r\n if (!radarConfig?.publishableKey) {\r\n this.callbacks.onError?.('Stripe radar config missing');\r\n this.callbacks.onProcessing?.(false);\r\n return;\r\n }\r\n\r\n try {\r\n await this.loadScript('https://js.stripe.com/v3/', () => typeof (window as any).Stripe === 'function');\r\n\r\n const stripe = (window as any).Stripe(radarConfig.publishableKey);\r\n const result = await stripe.createRadarSession();\r\n if (result.error) throw new Error(result.error.message || 'Failed to create Radar session');\r\n if (!result.radarSession) throw new Error('No radar session returned from Stripe');\r\n\r\n await this.paymentsResource.saveRadarSession({\r\n orderId: radarConfig.orderId,\r\n stripeRadarSessionId: result.radarSession.id,\r\n stripeRadarSessionData: result.radarSession,\r\n });\r\n\r\n const resumed = await this.paymentsResource.completePaymentAfterAction(payment.id);\r\n await this.handleResumedPayment(resumed);\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'Stripe radar failed');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // Airwallex Radar\r\n // --------------------------------------------------------------------------\r\n private async handleAirwallexRadar(payment: Payment, actionData: any): Promise<void> {\r\n const isTest = actionData.metadata?.isTest || false;\r\n const orderId = payment.order?.id;\r\n const checkoutSessionId = payment.order?.checkoutSessionId;\r\n\r\n if (!orderId || !checkoutSessionId) {\r\n this.callbacks.onError?.('Missing order info for Airwallex radar');\r\n this.callbacks.onProcessing?.(false);\r\n return;\r\n }\r\n\r\n try {\r\n const sessionId = crypto.randomUUID();\r\n\r\n const existingScript = document.getElementById('airwallex-fraud-api');\r\n if (!existingScript) {\r\n const baseUrl = isTest ? 'https://static-demo.airwallex.com' : 'https://static.airwallex.com';\r\n const script = document.createElement('script');\r\n script.type = 'text/javascript';\r\n script.async = true;\r\n script.id = 'airwallex-fraud-api';\r\n script.setAttribute('data-order-session-id', sessionId);\r\n script.src = `${baseUrl}/webapp/fraud/device-fingerprint/index.js`;\r\n await new Promise<void>((resolve, reject) => {\r\n script.onload = () => resolve();\r\n script.onerror = () => reject(new Error('Failed to load Airwallex fraud script'));\r\n document.body.appendChild(script);\r\n });\r\n } else {\r\n existingScript.setAttribute('data-order-session-id', sessionId);\r\n }\r\n\r\n await this.paymentsResource.saveRadarSession({\r\n checkoutSessionId,\r\n orderId,\r\n airwallexRadarSessionId: sessionId,\r\n });\r\n\r\n const resumed = await this.paymentsResource.completePaymentAfterAction(payment.id);\r\n await this.handleResumedPayment(resumed);\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'Airwallex radar failed');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // MasterCard Auth (3DS inline challenge)\r\n // --------------------------------------------------------------------------\r\n private async handleMasterCardAuth(payment: Payment, actionData: any): Promise<void> {\r\n const threeDSData = actionData?.metadata?.threeds;\r\n if (!threeDSData?.sessionId || !threeDSData?.merchantId) {\r\n this.callbacks.onError?.('Missing MasterCard 3DS data');\r\n this.callbacks.onProcessing?.(false);\r\n return;\r\n }\r\n\r\n try {\r\n this.callbacks.onProcessing?.(false);\r\n\r\n await this.loadScript(threeDSData.scriptUrl, () => !!(window as any).ThreeDS);\r\n\r\n const containerId = 'mastercard-3ds-container';\r\n let container = document.getElementById(containerId);\r\n if (!container) {\r\n container = document.createElement('div');\r\n container.id = containerId;\r\n container.style.cssText = 'position:absolute;top:-9999px;left:-9999px;width:1px;height:1px;overflow:hidden';\r\n document.body.appendChild(container);\r\n }\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n (window as any).ThreeDS.configure({\r\n merchantId: threeDSData.merchantId,\r\n sessionId: threeDSData.sessionId,\r\n containerId,\r\n callback: () => {\r\n (window as any).ThreeDS.isConfigured() ? resolve() : reject(new Error('ThreeDS configuration failed'));\r\n },\r\n configuration: { userLanguage: 'en-US', wsVersion: threeDSData.version ? parseInt(threeDSData.version, 10) : 72 },\r\n });\r\n });\r\n\r\n const authResult: any = await new Promise((resolve) => {\r\n (window as any).ThreeDS.authenticatePayer(threeDSData.orderId, threeDSData.transactionId, resolve);\r\n });\r\n\r\n const challengeHtml = authResult?.htmlRedirectCode || authResult?.restApiResponse?.authentication?.redirect?.html;\r\n\r\n if (challengeHtml) {\r\n // For standalone, redirect via form submission (no modal support without React)\r\n const tempDoc = document.implementation.createHTMLDocument('MasterCard 3DS');\r\n tempDoc.body.innerHTML = challengeHtml;\r\n const form = tempDoc.querySelector('form');\r\n if (form) {\r\n const redirectForm = document.createElement('form');\r\n redirectForm.method = form.method || 'POST';\r\n redirectForm.action = form.action || '';\r\n redirectForm.style.display = 'none';\r\n form.querySelectorAll('input').forEach(input => {\r\n const newInput = document.createElement('input');\r\n newInput.type = input.type;\r\n newInput.name = input.name;\r\n newInput.value = input.value;\r\n redirectForm.appendChild(newInput);\r\n });\r\n document.body.appendChild(redirectForm);\r\n redirectForm.submit();\r\n } else {\r\n document.open();\r\n document.write(challengeHtml);\r\n document.close();\r\n }\r\n } else {\r\n // Frictionless \u2014 complete immediately\r\n if (threeDSData.paymentId) {\r\n const resumed = await this.paymentsResource.completePaymentAfterAction(threeDSData.paymentId);\r\n await this.handleResumedPayment(resumed);\r\n }\r\n }\r\n\r\n const cleanup = document.getElementById(containerId);\r\n if (cleanup) cleanup.remove();\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'MasterCard 3DS failed');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n }\r\n\r\n // --------------------------------------------------------------------------\r\n // Script loader utility\r\n // --------------------------------------------------------------------------\r\n private async loadScript(src: string, isReady: () => boolean): Promise<void> {\r\n if (typeof window === 'undefined') return;\r\n if (isReady()) return;\r\n\r\n const existing = document.querySelector(`script[src=\"${src}\"]`);\r\n if (existing) {\r\n await this.waitFor(isReady, 10000);\r\n return;\r\n }\r\n\r\n const script = document.createElement('script');\r\n script.src = src;\r\n script.async = true;\r\n await new Promise<void>((resolve, reject) => {\r\n script.onload = () => resolve();\r\n script.onerror = () => reject(new Error(`Failed to load script: ${src}`));\r\n document.head.appendChild(script);\r\n });\r\n }\r\n\r\n private waitFor(predicate: () => boolean, timeout: number): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (predicate()) { resolve(); return; }\r\n const t = setTimeout(() => reject(new Error('Timeout')), timeout);\r\n const check = () => {\r\n if (predicate()) { clearTimeout(t); resolve(); }\r\n else setTimeout(check, 100);\r\n };\r\n check();\r\n });\r\n }\r\n\r\n // ==========================================================================\r\n // REDIRECT RETURN DETECTION\r\n // ==========================================================================\r\n\r\n /**\r\n * Detect ALL redirect return types and resume.\r\n * Handles both generic returns and Airwallex-specific 3DS returns.\r\n * Call once during initialization. Returns true if a return was detected.\r\n */\r\n detectRedirectReturn(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n if (this.redirectReturnProcessed) return false;\r\n\r\n // Try Airwallex 3DS return first\r\n if (this.detectAirwallex3dsReturn()) return true;\r\n\r\n // Then generic return\r\n return this.detectGenericRedirectReturn();\r\n }\r\n\r\n private detectGenericRedirectReturn(): boolean {\r\n const url = new URLSearchParams(window.location.search);\r\n const paymentAction = url.get('paymentAction');\r\n const paymentActionStatus = url.get('paymentActionStatus');\r\n const paymentId = url.get('paymentId');\r\n const mode = url.get('mode');\r\n\r\n if (mode === 'retrieve') return false;\r\n if (paymentAction !== 'requireAction' || paymentActionStatus !== 'completed' || !paymentId) return false;\r\n\r\n console.log('[PaymentService] Generic redirect return detected:', paymentId);\r\n this.redirectReturnProcessed = true;\r\n\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onCurrentPaymentId?.(paymentId);\r\n this.callbacks.onRedirectReturn?.(paymentId);\r\n\r\n this.startPolling(paymentId, {\r\n onSuccess: (payment) => {\r\n this.callbacks.onProcessing?.(false);\r\n this.cleanPaymentUrlParams();\r\n this.callbacks.onSuccess?.(payment);\r\n },\r\n onFailure: (error) => {\r\n this.callbacks.onError?.(error);\r\n this.callbacks.onProcessing?.(false);\r\n this.cleanPaymentUrlParams();\r\n },\r\n onRequireAction: (payment) => { void this.handlePaymentAction(payment); },\r\n });\r\n\r\n return true;\r\n }\r\n\r\n private detectAirwallex3dsReturn(): boolean {\r\n const url = new URLSearchParams(window.location.search);\r\n const paymentIdFromUrl = url.get('paymentId');\r\n const paymentIntentId = url.get('payment_intent_id');\r\n const succeeded = url.get('succeeded');\r\n const processorType = url.get('processorType');\r\n\r\n const hasAirwallexParams = paymentIntentId || succeeded !== null;\r\n if (!hasAirwallexParams || processorType !== 'airwallex' || !paymentIdFromUrl) return false;\r\n\r\n console.log('[PaymentService] Airwallex 3DS return detected:', paymentIdFromUrl);\r\n this.redirectReturnProcessed = true;\r\n\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onCurrentPaymentId?.(paymentIdFromUrl);\r\n\r\n void this.handleAirwallex3dsRedirectReturn(paymentIdFromUrl, paymentIntentId, succeeded);\r\n return true;\r\n }\r\n\r\n private async handleAirwallex3dsRedirectReturn(paymentId: string, paymentIntentId: string | null, succeeded: string | null): Promise<void> {\r\n const cleanParams = () => {\r\n const url = new URLSearchParams(window.location.search);\r\n ['payment_intent_id', 'succeeded', 'processorType', 'paymentId', 'paymentAction', 'paymentActionStatus', 'error_code', 'error_message', 'mode'].forEach(p => url.delete(p));\r\n const newUrl = url.toString() ? `${window.location.pathname}?${url.toString()}` : window.location.pathname;\r\n window.history.replaceState({}, document.title, newUrl);\r\n };\r\n\r\n if (succeeded === 'true') {\r\n try {\r\n await this.paymentsResource.updateThreedsStatus({\r\n paymentId,\r\n status: 'succeeded',\r\n paymentIntentId: paymentIntentId || '',\r\n });\r\n cleanParams();\r\n\r\n const retrieveResult = await this.paymentsResource.retrievePayment(paymentId);\r\n const retrieveStatus = retrieveResult?.retrieveResult?.status || retrieveResult?.status;\r\n\r\n if (retrieveResult?.retrieveResult?.success && retrieveStatus === 'succeeded') {\r\n const payment = await this.paymentsResource.getPaymentStatus(paymentId);\r\n this.callbacks.onProcessing?.(false);\r\n this.callbacks.onSuccess?.(payment);\r\n } else if (retrieveStatus === 'declined' || retrieveStatus === 'error') {\r\n const msg = retrieveResult?.retrieveResult?.message || retrieveResult?.message || 'Payment failed';\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n } else {\r\n const payment = await this.paymentsResource.getPaymentStatus(paymentId);\r\n if (payment.status === 'declined' || payment.status === 'failed') {\r\n const msg = (payment as any).error?.message || (payment as any).error?.processorMessage || 'Payment declined';\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n } else if (payment.status === 'succeeded' || (payment.status === 'pending' && payment.subStatus === 'authorized')) {\r\n this.callbacks.onProcessing?.(false);\r\n this.callbacks.onSuccess?.(payment);\r\n } else if (payment.requireAction !== 'none' && payment.requireActionData && !payment.requireActionData.processed) {\r\n void this.handlePaymentAction(payment);\r\n } else {\r\n this.startPolling(paymentId, {\r\n onSuccess: (p) => { this.callbacks.onProcessing?.(false); this.callbacks.onSuccess?.(p); },\r\n onFailure: (e) => { this.callbacks.onError?.(e); this.callbacks.onProcessing?.(false); },\r\n onRequireAction: (p) => { void this.handlePaymentAction(p); },\r\n });\r\n }\r\n }\r\n } catch (error) {\r\n this.callbacks.onError?.(error instanceof Error ? error.message : 'Failed to process Airwallex 3DS');\r\n this.callbacks.onProcessing?.(false);\r\n }\r\n } else {\r\n const errorMsg = new URLSearchParams(window.location.search).get('error_message') || 'Authentication failed';\r\n this.callbacks.onError?.(errorMsg);\r\n this.callbacks.onProcessing?.(false);\r\n cleanParams();\r\n }\r\n }\r\n\r\n cleanPaymentUrlParams(): void {\r\n if (typeof window === 'undefined') return;\r\n const url = new URLSearchParams(window.location.search);\r\n ['paymentAction', 'paymentActionStatus', 'paymentId', 'payment_intent', 'payment_intent_client_secret', 'source_type', 'redirect_status'].forEach(p => url.delete(p));\r\n const newUrl = url.toString() ? `${window.location.pathname}?${url.toString()}` : window.location.pathname;\r\n window.history.replaceState({}, document.title, newUrl);\r\n }\r\n\r\n // ==========================================================================\r\n // PAYMENT INSTRUMENT MANAGEMENT\r\n // ==========================================================================\r\n\r\n async createCardPaymentInstrument(cardData: CardPaymentMethod): Promise<PaymentInstrumentResponse> {\r\n const bt = await this.initBasisTheory();\r\n return this.paymentsResource.createCardPaymentInstrument(bt ?? undefined, cardData);\r\n }\r\n\r\n async createApplePayPaymentInstrument(token: ApplePayToken): Promise<PaymentInstrumentResponse> {\r\n const bt = await this.initBasisTheory();\r\n return this.paymentsResource.createApplePayPaymentInstrument(bt ?? undefined, token);\r\n }\r\n\r\n async createGooglePayPaymentInstrument(token: GooglePayToken): Promise<PaymentInstrumentResponse> {\r\n const bt = await this.initBasisTheory();\r\n return this.paymentsResource.createGooglePayPaymentInstrument(bt ?? undefined, token);\r\n }\r\n\r\n async getCardPaymentInstruments(): Promise<PaymentInstrumentCustomerResponse> {\r\n return this.paymentsResource.getCardPaymentInstruments();\r\n }\r\n\r\n // ==========================================================================\r\n // 3DS SESSION + CHALLENGE (mirrors useThreeds)\r\n // ==========================================================================\r\n\r\n async createThreedsSession(paymentInstrument: { id: string; token: string | null }): Promise<{ id: string; sessionId: string }> {\r\n const BasisTheory3ds = await this.initBt3ds();\r\n if (!BasisTheory3ds) throw new Error('BasisTheory 3DS not loaded');\r\n\r\n const bt3ds = BasisTheory3ds(this.getBtApiKey());\r\n const session = await bt3ds.createSession({ tokenId: paymentInstrument.token });\r\n\r\n return this.threedsResource.createSession({\r\n provider: 'basis_theory',\r\n sessionData: session,\r\n paymentInstrumentId: paymentInstrument.id,\r\n });\r\n }\r\n\r\n // ==========================================================================\r\n // PAYMENT PROCESSING (all methods)\r\n // ==========================================================================\r\n\r\n async processCardPayment(checkoutSessionId: string, cardData: CardData): Promise<PaymentResult> {\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onError?.(null);\r\n\r\n try {\r\n const instrument = await this.createCardPaymentInstrument({\r\n cardNumber: cardData.cardNumber,\r\n expiryDate: cardData.expiryDate,\r\n cvc: cardData.cvc,\r\n });\r\n if (!instrument?.id) throw new Error('Failed to create payment instrument');\r\n\r\n // Auto-detect 3DS from store config\r\n let threedsSessionId: string | undefined;\r\n const config = await this.fetchStoreConfig();\r\n if (config?.computed?.threedsEnabled) {\r\n try {\r\n const session = await this.createThreedsSession(instrument);\r\n threedsSessionId = session.id;\r\n } catch {\r\n // Continue without 3DS\r\n }\r\n }\r\n\r\n return await this.processAndHandle(checkoutSessionId, instrument.id, threedsSessionId);\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n return { success: false, error: msg };\r\n }\r\n }\r\n\r\n async processApplePayPayment(checkoutSessionId: string, applePayToken: ApplePayToken): Promise<PaymentResult> {\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onError?.(null);\r\n\r\n try {\r\n const instrument = await this.createApplePayPaymentInstrument(applePayToken);\r\n return await this.processAndHandle(checkoutSessionId, instrument.id);\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n return { success: false, error: msg };\r\n }\r\n }\r\n\r\n async processGooglePayPayment(checkoutSessionId: string, googlePayToken: GooglePayToken): Promise<PaymentResult> {\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onError?.(null);\r\n\r\n try {\r\n const instrument = await this.createGooglePayPaymentInstrument(googlePayToken);\r\n return await this.processAndHandle(checkoutSessionId, instrument.id);\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n return { success: false, error: msg };\r\n }\r\n }\r\n\r\n async processPaymentWithInstrument(checkoutSessionId: string, paymentInstrumentId: string): Promise<PaymentResult> {\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onError?.(null);\r\n\r\n try {\r\n return await this.processAndHandle(checkoutSessionId, paymentInstrumentId);\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n return { success: false, error: msg };\r\n }\r\n }\r\n\r\n async processApmPayment(checkoutSessionId: string, apmData: ApmData): Promise<PaymentResult> {\r\n this.callbacks.onProcessing?.(true);\r\n this.callbacks.onError?.(null);\r\n\r\n try {\r\n return await this.processAndHandle(checkoutSessionId, '', undefined, {\r\n processorId: apmData.processorId,\r\n paymentMethod: apmData.paymentMethod,\r\n initiatedBy: apmData.initiatedBy,\r\n source: apmData.source,\r\n });\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error);\r\n this.callbacks.onError?.(msg);\r\n this.callbacks.onProcessing?.(false);\r\n return { success: false, error: msg };\r\n }\r\n }\r\n}\r\n", "/**\r\n * TagadaPay External Page Tracker\r\n *\r\n * Standalone script for tracking users on external pages that are part of a\r\n * TagadaPay funnel but not hosted on the TagadaPay platform.\r\n *\r\n * Use cases:\r\n * - WooCommerce / WordPress storefronts\r\n * - Custom landing pages\r\n * - Any external page that is a funnel step\r\n *\r\n * @example CDN usage\r\n * ```html\r\n * <script src=\"https://cdn.jsdelivr.net/npm/@tagadapay/plugin-sdk/dist/external-tracker.min.js\"></script>\r\n * <script>\r\n * TagadaTracker.init({\r\n * storeId: 'store_xxx',\r\n * accountId: 'acc_xxx',\r\n * stepId: 'step_xxx',\r\n * });\r\n * </script>\r\n * ```\r\n */\r\n\r\nimport { createTagadaClient } from './index';\r\nimport type { TagadaClient } from '../core/client';\r\nimport type { SimpleFunnelContext, FunnelActionType } from '../core/resources/funnel';\r\nimport { setClientToken } from '../core/utils/tokenStorage';\r\n\r\n// ============================================================================\r\n// VERSION\r\n// ============================================================================\r\n\r\nexport const TRACKER_VERSION = '1.0.0';\r\n\r\n// ============================================================================\r\n// TYPES\r\n// ============================================================================\r\n\r\nexport interface TagadaTrackerConfig {\r\n /** Store ID (required) */\r\n storeId: string;\r\n /** Account ID (required \u2014 session init will fail without it) */\r\n accountId: string;\r\n /** Funnel ID (optional \u2014 can be extracted from URL param) */\r\n funnelId?: string;\r\n /** Step ID (required for external pages \u2014 URL-to-step mapping only works for TagadaPay-hosted pages) */\r\n stepId: string;\r\n /** Step name (optional \u2014 for analytics/debugging) */\r\n stepName?: string;\r\n /** Step type (optional \u2014 e.g., 'landing', 'offer', 'external') */\r\n stepType?: string;\r\n /** API base URL (defaults to https://app.tagadapay.com) */\r\n apiBaseUrl?: string;\r\n /** Enable debug logging */\r\n debug?: boolean;\r\n /** Callback when session is ready */\r\n onReady?: (session: ExternalTrackerSession) => void;\r\n /** Callback on error \u2014 when provided, init() will NOT throw */\r\n onError?: (error: Error) => void;\r\n}\r\n\r\nexport interface ExternalTrackerSession {\r\n sessionId: string;\r\n customerId: string;\r\n storeId: string;\r\n funnelId?: string;\r\n currentStepId?: string;\r\n cmsToken?: string;\r\n}\r\n\r\nexport interface NavigateOptions {\r\n /** Event type for navigation (e.g., 'offer.accepted', 'form.submitted') */\r\n eventType: string;\r\n /** Event data */\r\n eventData?: Record<string, unknown>;\r\n /** Override return URL */\r\n returnUrl?: string;\r\n /** Whether to auto-redirect after navigation (default: true) */\r\n autoRedirect?: boolean;\r\n}\r\n\r\nexport interface TrackEventOptions {\r\n /** Event name (e.g., 'button_click', 'scroll_depth', 'video_play') */\r\n name: string;\r\n /** Arbitrary event data */\r\n data?: Record<string, unknown>;\r\n}\r\n\r\n// ============================================================================\r\n// UTILITIES\r\n// ============================================================================\r\n\r\nfunction getUrlParam(name: string): string | null {\r\n if (typeof window === 'undefined') return null;\r\n const params = new URLSearchParams(window.location.search);\r\n return params.get(name);\r\n}\r\n\r\nfunction log(debug: boolean, ...args: unknown[]): void {\r\n if (debug) {\r\n console.log('[TagadaTracker]', ...args);\r\n }\r\n}\r\n\r\nfunction warn(...args: unknown[]): void {\r\n console.warn('[TagadaTracker]', ...args);\r\n}\r\n\r\nfunction validate(config: TagadaTrackerConfig): void {\r\n if (!config.storeId || typeof config.storeId !== 'string') {\r\n throw new Error('TagadaTracker: storeId is required and must be a non-empty string.');\r\n }\r\n if (!config.accountId || typeof config.accountId !== 'string') {\r\n throw new Error('TagadaTracker: accountId is required and must be a non-empty string.');\r\n }\r\n if (!config.stepId || typeof config.stepId !== 'string') {\r\n throw new Error('TagadaTracker: stepId is required and must be a non-empty string.');\r\n }\r\n if (config.apiBaseUrl) {\r\n try {\r\n new URL(config.apiBaseUrl);\r\n } catch {\r\n throw new Error(`TagadaTracker: apiBaseUrl is not a valid URL: \"${config.apiBaseUrl}\"`);\r\n }\r\n }\r\n}\r\n\r\nasync function retryWithBackoff<T>(\r\n fn: () => Promise<T>,\r\n maxRetries: number,\r\n debug: boolean,\r\n): Promise<T> {\r\n let lastError: Error | undefined;\r\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\r\n try {\r\n return await fn();\r\n } catch (err) {\r\n lastError = err instanceof Error ? err : new Error(String(err));\r\n if (attempt < maxRetries) {\r\n const delay = Math.min(1000 * 2 ** attempt, 8000);\r\n log(debug, `Retry ${attempt + 1}/${maxRetries} in ${delay}ms...`);\r\n await new Promise((r) => setTimeout(r, delay));\r\n }\r\n }\r\n }\r\n throw lastError;\r\n}\r\n\r\n// ============================================================================\r\n// MAIN CLASS\r\n// ============================================================================\r\n\r\nclass TagadaExternalTracker {\r\n private config: TagadaTrackerConfig | null = null;\r\n private client: TagadaClient | null = null;\r\n private initialized = false;\r\n private initializing = false;\r\n private unsubscribe: (() => void) | null = null;\r\n\r\n /** Tracker version */\r\n readonly version = TRACKER_VERSION;\r\n\r\n /**\r\n * Initialize the tracker.\r\n * When `onError` is provided, errors are passed to the callback and init()\r\n * resolves to `null` instead of throwing.\r\n */\r\n async init(config: TagadaTrackerConfig): Promise<ExternalTrackerSession | null> {\r\n if (this.initialized) {\r\n log(config.debug || false, 'Already initialized \u2014 returning existing session.');\r\n return this.getSession();\r\n }\r\n\r\n if (this.initializing) {\r\n log(config.debug || false, 'Initialization in progress \u2014 skipping duplicate call.');\r\n return null;\r\n }\r\n\r\n this.initializing = true;\r\n this.config = { debug: false, ...config };\r\n const debug = this.config.debug!;\r\n\r\n try {\r\n validate(this.config);\r\n } catch (err) {\r\n this.initializing = false;\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n if (this.config.onError) {\r\n this.config.onError(error);\r\n return null;\r\n }\r\n throw error;\r\n }\r\n\r\n log(debug, `\uD83D\uDE80 Initializing external tracker v${TRACKER_VERSION}`, {\r\n storeId: config.storeId,\r\n accountId: config.accountId,\r\n stepId: config.stepId,\r\n funnelId: config.funnelId,\r\n });\r\n\r\n try {\r\n const urlToken = getUrlParam('token');\r\n if (urlToken) {\r\n setClientToken(urlToken);\r\n log(debug, '\uD83D\uDD11 Bootstrapped token from URL');\r\n }\r\n\r\n this.client = createTagadaClient({\r\n debugMode: debug,\r\n features: { funnel: { skipAutoInit: true } },\r\n rawPluginConfig: {\r\n storeId: this.config.storeId,\r\n accountId: this.config.accountId,\r\n },\r\n customApiConfig: this.config.apiBaseUrl ? {\r\n apiConfig: {\r\n baseUrl: this.config.apiBaseUrl.trim(),\r\n },\r\n } : undefined,\r\n });\r\n\r\n await this.waitForClientReady();\r\n\r\n const funnelContext = await retryWithBackoff(\r\n () => this.initializeFunnel(),\r\n 2,\r\n debug,\r\n );\r\n\r\n log(debug, '\u2705 Session initialized:', funnelContext);\r\n\r\n this.initialized = true;\r\n const session = this.getSession();\r\n if (session) {\r\n this.config.onReady?.(session);\r\n }\r\n return session;\r\n } catch (err) {\r\n const error = err instanceof Error ? err : new Error(String(err));\r\n log(debug, '\u274C Initialization failed:', error);\r\n\r\n if (this.config.onError) {\r\n this.config.onError(error);\r\n return null;\r\n }\r\n throw error;\r\n } finally {\r\n this.initializing = false;\r\n }\r\n }\r\n\r\n /** Get current session data. */\r\n getSession(): ExternalTrackerSession | null {\r\n if (!this.client?.funnel?.state.context) return null;\r\n const ctx = this.client.funnel.state.context;\r\n return {\r\n sessionId: ctx.sessionId,\r\n customerId: ctx.customerId,\r\n storeId: ctx.storeId,\r\n funnelId: ctx.funnelId,\r\n currentStepId: ctx.currentStepId,\r\n cmsToken: this.client.state.token || undefined,\r\n };\r\n }\r\n\r\n /** Whether the tracker is fully initialized and ready. */\r\n isReady(): boolean {\r\n return this.initialized && !!this.client?.funnel?.state.context;\r\n }\r\n\r\n /**\r\n * Navigate to the next step in the funnel.\r\n * By default, auto-redirects the browser window.\r\n */\r\n async navigate(options: NavigateOptions): Promise<{ url: string } | null> {\r\n if (!this.isReady()) {\r\n throw new Error('TagadaTracker: not initialized. Call init() first.');\r\n }\r\n\r\n log(this.config!.debug!, '\uD83D\uDE80 Navigating:', options);\r\n\r\n const shouldAutoRedirect = options.autoRedirect !== false;\r\n\r\n try {\r\n const result = await this.client!.funnel!.navigate(\r\n {\r\n type: options.eventType as FunnelActionType,\r\n data: options.eventData || {},\r\n },\r\n { autoRedirect: false },\r\n );\r\n\r\n if (result?.url) {\r\n log(this.config!.debug!, '\u2705 Navigation result:', result.url);\r\n if (shouldAutoRedirect && typeof window !== 'undefined') {\r\n window.location.href = options.returnUrl || result.url;\r\n }\r\n return { url: result.url };\r\n }\r\n return null;\r\n } catch (error) {\r\n log(this.config!.debug!, '\u274C Navigation failed:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Track a custom event (e.g., button click, scroll depth, video play).\r\n * Events are sent through the funnel orchestrator for unified analytics.\r\n */\r\n async trackEvent(options: TrackEventOptions): Promise<void> {\r\n if (!this.isReady()) {\r\n warn('trackEvent called before init \u2014 event dropped:', options.name);\r\n return;\r\n }\r\n\r\n log(this.config!.debug!, '\uD83D\uDCCA Tracking event:', options.name, options.data);\r\n\r\n try {\r\n await this.client!.funnel!.navigate(\r\n {\r\n type: options.name as FunnelActionType,\r\n data: options.data || {},\r\n },\r\n { autoRedirect: false },\r\n );\r\n } catch {\r\n // Non-critical \u2014 swallow errors for tracking events\r\n log(this.config!.debug!, '\u26A0\uFE0F Event tracking failed (non-critical):', options.name);\r\n }\r\n }\r\n\r\n /** Get customer ID. */\r\n getCustomerId(): string | null {\r\n return this.client?.state.auth.customer?.id\r\n || this.client?.funnel?.state.context?.customerId\r\n || null;\r\n }\r\n\r\n /** Get funnel session ID. */\r\n getFunnelSessionId(): string | null {\r\n return this.client?.funnel?.state.context?.sessionId || null;\r\n }\r\n\r\n /**\r\n * Build a URL that preserves funnel session context.\r\n * Use this to link to other external pages within the same funnel.\r\n */\r\n buildUrl(baseUrl: string, additionalParams?: Record<string, string>): string {\r\n const session = this.getSession();\r\n if (!session) return baseUrl;\r\n\r\n const url = new URL(baseUrl, typeof window !== 'undefined' ? window.location.origin : undefined);\r\n url.searchParams.set('funnelSessionId', session.sessionId);\r\n if (session.cmsToken) url.searchParams.set('token', session.cmsToken);\r\n if (session.funnelId) url.searchParams.set('funnelId', session.funnelId);\r\n url.searchParams.set('storeId', session.storeId);\r\n\r\n if (additionalParams) {\r\n Object.entries(additionalParams).forEach(([key, value]) => {\r\n url.searchParams.set(key, value);\r\n });\r\n }\r\n return url.toString();\r\n }\r\n\r\n /** Get the underlying SDK client (advanced usage). */\r\n getClient(): TagadaClient | null {\r\n return this.client;\r\n }\r\n\r\n /**\r\n * Reset the tracker to a new step without re-creating the session.\r\n * Useful for SPAs that navigate between funnel steps client-side.\r\n */\r\n async reset(newStepId: string): Promise<ExternalTrackerSession | null> {\r\n if (!this.client || !this.config) {\r\n throw new Error('TagadaTracker: not initialized. Call init() first.');\r\n }\r\n log(this.config.debug!, '\uD83D\uDD04 Resetting to step:', newStepId);\r\n this.config.stepId = newStepId;\r\n const ctx = await this.initializeFunnel();\r\n const session = this.getSession();\r\n if (session) this.config.onReady?.(session);\r\n return session;\r\n }\r\n\r\n /**\r\n * Destroy the tracker, clean up event listeners and state.\r\n * Call this when the tracker is no longer needed (e.g., SPA teardown).\r\n */\r\n destroy(): void {\r\n if (this.unsubscribe) {\r\n this.unsubscribe();\r\n this.unsubscribe = null;\r\n }\r\n if (this.client) {\r\n this.client.destroy?.();\r\n }\r\n this.client = null;\r\n this.config = null;\r\n this.initialized = false;\r\n this.initializing = false;\r\n log(false, '\uD83D\uDDD1\uFE0F Tracker destroyed');\r\n }\r\n\r\n // ========================================================================\r\n // PRIVATE METHODS\r\n // ========================================================================\r\n\r\n private async waitForClientReady(): Promise<void> {\r\n if (!this.client) return;\r\n\r\n // Wait for isInitialized which is set AFTER the full init sequence:\r\n // anonymous token \u2192 session/v2/init \u2192 isInitialized=true\r\n // Do NOT resolve on token alone \u2014 that fires before session init.\r\n return new Promise<void>((resolve) => {\r\n if (this.client?.state.isInitialized) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let resolved = false;\r\n const timeout = setTimeout(() => {\r\n if (!resolved) {\r\n resolved = true;\r\n log(this.config?.debug || false, '\u23F1\uFE0F Client ready timeout \u2014 proceeding');\r\n resolve();\r\n }\r\n }, 10000);\r\n\r\n this.unsubscribe = this.client!.subscribe(() => {\r\n if (!resolved && this.client?.state.isInitialized) {\r\n resolved = true;\r\n clearTimeout(timeout);\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n private async initializeFunnel(): Promise<SimpleFunnelContext | null> {\r\n if (!this.client?.funnel) return null;\r\n\r\n const customerId = this.client.state.auth.customer?.id;\r\n const sessionId = this.client.state.auth.session?.sessionId;\r\n\r\n if (!customerId && !sessionId) {\r\n warn('No auth session available \u2014 funnel init may fail.');\r\n }\r\n\r\n const authSession = {\r\n customerId: customerId || 'anon_placeholder',\r\n sessionId: sessionId || 'sess_placeholder',\r\n };\r\n\r\n const store = {\r\n id: this.config!.storeId,\r\n accountId: this.config!.accountId,\r\n };\r\n\r\n const entryStepId = this.config!.stepId;\r\n log(this.config!.debug!, '\uD83D\uDD0D Initializing funnel at step:', entryStepId);\r\n\r\n return this.client.funnel.initialize(\r\n authSession,\r\n store,\r\n this.config!.funnelId || getUrlParam('funnelId') || undefined,\r\n entryStepId,\r\n );\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// GLOBAL INSTANCE\r\n// ============================================================================\r\n\r\nconst TagadaTracker = new TagadaExternalTracker();\r\n\r\nexport { TagadaTracker, TagadaExternalTracker };\r\n\r\nif (typeof window !== 'undefined') {\r\n (window as any).TagadaTracker = TagadaTracker;\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["getCookie", "name", "_a", "parts", "getEnvironmentConfig", "environment", "apiConfig", "ENVIRONMENT_CONFIGS", "customBaseUrl", "e", "__spreadProps", "__spreadValues", "detectEnvironment", "urlEnv", "storageEnv", "hostname", "href", "override", "isLocalEnvironment", "excludeCdn", "init_environment", "__esmMin", "FunnelActionType", "FunnelResource", "init_funnel", "__esmMin", "apiClient", "request", "sessionId", "currentUrl", "includeDebugData", "params", "url", "EventDispatcher", "init_eventDispatcher", "__esmMin", "listener", "data", "error", "setClientToken", "token", "tokenChanged", "TOKEN_KEY", "error", "getClientToken", "clearClientToken", "init_tokenStorage", "__esmMin", "setFunnelSessionCookie", "sessionId", "FUNNEL_SESSION_COOKIE_NAME", "getFunnelSessionCookie", "cookie", "row", "clearFunnelSessionCookie", "hasFunnelSessionCookie", "getFunnelVariantId", "_a", "STICKY_SESSION_COOKIE_NAME", "sessionData", "error", "init_sessionStorage", "__esmMin", "getFromStorage", "key", "setInStorage", "value", "e", "getFromCookie", "_a", "cookie", "c", "setInCookie", "maxAge", "clearFromCookie", "getSDKParams", "urlParams", "draft", "urlDraft", "storageDraft", "STORAGE_KEYS", "funnelTracking", "urlTracking", "storageTracking", "token", "getClientToken", "funnelSessionId", "funnelId", "funnelEnv", "urlFunnelEnv", "forceReset", "tagadaClientEnv", "urlEnv", "storageEnv", "tagadaClientBaseUrl", "urlBaseUrl", "storageBaseUrl", "currency", "urlCurrency", "storageCurrency", "locale", "urlLocale", "storageLocale", "isDraftMode", "setDraftMode", "handlePreviewMode", "debugMode", "urlToken", "params", "shouldReset", "persistSDKParamsFromURL", "clearClientToken", "clearFunnelSessionCookie", "tokenToSet", "setClientToken", "setFunnelTracking", "setClientEnvironment", "setClientBaseUrl", "enabled", "env", "clearClientEnvironment", "baseUrl", "clearClientBaseUrl", "isFunnelTrackingEnabled", "init_previewMode", "__esmMin", "init_tokenStorage", "init_sessionStorage", "previewModeIndicator_exports", "__export", "injectPreviewModeIndicator", "isIndicatorInjected", "removePreviewModeIndicator", "clearSpecificCookie", "cookieName", "hostname", "parts", "domains", "i", "domain", "pathParts", "p", "paths", "currentPath", "part", "path", "baseDelete", "domainPart", "leavePreviewMode", "url", "param", "cookieDescriptor", "val", "normalizedVal", "e", "clearClientToken", "clearFunnelSessionCookie", "clearClientEnvironment", "clearClientBaseUrl", "cookie", "isInjected", "params", "getSDKParams", "draftMode", "isDraftMode", "trackingDisabled", "isFunnelTrackingEnabled", "hasCustomEnv", "container", "badge", "details", "bridge", "detailsHTML", "isHovering", "showDetails", "hideDetails", "leavePreviewBtn", "indicatorElement", "init_previewModeIndicator", "__esmMin", "init_previewMode", "init_tokenStorage", "init_sessionStorage", "funnelClient_exports", "__export", "FunnelClient", "TrackingProvider", "findMethod", "getAssignedOrderBumpOfferIds", "getAssignedPaymentFlowId", "getAssignedPixels", "getAssignedResources", "getAssignedScripts", "getAssignedStaticResources", "getAssignedStepConfig", "getAssignedUpsellOfferIds", "getEnabledMethods", "getExpressMethods", "getExpressMethodsByProcessor", "getLocalFunnelConfig", "isMethodEnabled", "loadLocalFunnelConfig", "config", "m", "groups", "key", "method", "entry", "getAssignedFunnelId", "meta", "getAssignedFunnelVariant", "getAssignedFunnelStep", "parseStepConfig", "value", "trimmed", "strategies", "strategy", "result", "e", "isLocalDevelopment", "hostname", "localFunnelConfigCache", "localFunnelConfigLoading", "resolve", "response", "error", "localConfigToStepConfig", "local", "merged", "__spreadValues", "localConfig", "windowValue", "parsed", "content", "_a", "_b", "stepConfig", "cardConfig", "legacy", "current", "position", "scripts", "s", "splitPixelConfig", "px", "idField", "rawId", "ids", "id", "__spreadProps", "rawPixels", "normalized", "lazyInjectPreviewIndicator", "init_funnelClient", "__esmMin", "init_environment", "init_funnel", "init_eventDispatcher", "init_previewMode", "init_sessionStorage", "EventDispatcher", "FunnelResource", "listener", "urlSessionId", "getFunnelSessionCookie", "authSession", "store", "funnelId", "existingSessionId", "effectiveFunnelId", "injectedFunnelId", "funnelVariantId", "injectedStepId", "sdkParams", "getSDKParams", "finalFunnelId", "finalStepId", "urlParams", "funnelEnv", "enriched", "err", "entryStepId", "funnelStepId", "event", "options", "_c", "_d", "_e", "_f", "maxWaitTime", "startTime", "currentUrl", "fireAndForget", "shouldAutoRedirect", "stepId", "updates", "context", "setFunnelSessionCookie", "ctx", "detectEnvironment", "localResources", "existingStatic", "exports", "parse", "compile", "match", "pathToRegexp", "stringify", "DEFAULT_DELIMITER", "NOOP_VALUE", "value", "ID_START", "ID_CONTINUE", "SIMPLE_TOKENS", "escapeText", "str", "escape", "TokenData", "tokens", "originalPath", "PathError", "message", "text", "options", "encodePath", "chars", "index", "pos", "name", "quoteStart", "type", "consumeUntil", "endType", "output", "token", "path", "cur", "encode", "delimiter", "data", "fn", "tokensToFunction", "params", "missing", "encoders", "tokenToFunction", "result", "encoder", "extras", "encodeValue", "decode", "regexp", "keys", "decoders", "key", "input", "m", "i", "decoder", "end", "sensitive", "trailing", "flags", "sources", "pathsToArray", "flatten", "toRegExpSource", "pattern", "paths", "init", "p", "seq", "__yieldStar", "backtrack", "isSafeSegmentParam", "negate", "stringifyTokens", "isNameSafe", "isNextNameSafe", "first", "rest", "char", "require_constants", "__commonJSMin", "exports", "WEB_ELEMENTS_VERSION", "API_KEY_HEADER", "BT_TRACE_ID_HEADER", "CF_RAY_HEADER", "BT_IDEMPOTENCY_KEY_HEADER", "BT_EXPOSE_PROXY_RESPONSE_HEADER", "CONTENT_TYPE_HEADER", "MERGE_CONTENT_TYPE", "USER_AGENT_HEADER", "CLIENT_USER_AGENT_HEADER", "USER_AGENT_CLIENT", "DEFAULT_BASE_URL", "DEFAULT_ELEMENTS_BASE_URL", "DD_TOKEN", "DD_GIT_SHA", "CLIENT_BASE_PATHS", "BROWSER_LIST", "bind", "fn", "thisArg", "toString", "getPrototypeOf", "iterator", "toStringTag", "kindOf", "cache", "thing", "str", "kindOfTest", "type", "typeOfTest", "isArray", "isUndefined", "isBuffer", "val", "isFunction", "isArrayBuffer", "isArrayBufferView", "result", "isString", "isNumber", "isObject", "isBoolean", "isPlainObject", "prototype", "isEmptyObject", "isDate", "isFile", "isBlob", "isFileList", "isStream", "isFormData", "kind", "isURLSearchParams", "isReadableStream", "isRequest", "isResponse", "isHeaders", "trim", "forEach", "obj", "allOwnKeys", "i", "l", "keys", "len", "key", "findKey", "_key", "_global", "isContextDefined", "context", "merge", "caseless", "skipUndefined", "assignValue", "targetKey", "extend", "a", "b", "stripBOM", "content", "inherits", "constructor", "superConstructor", "props", "descriptors", "toFlatObject", "sourceObj", "destObj", "filter", "propFilter", "prop", "merged", "endsWith", "searchString", "position", "lastIndex", "toArray", "arr", "isTypedArray", "TypedArray", "forEachEntry", "_iterator", "pair", "matchAll", "regExp", "matches", "isHTMLForm", "toCamelCase", "m", "p1", "p2", "hasOwnProperty", "isRegExp", "reduceDescriptors", "reducer", "reducedDescriptors", "descriptor", "name", "ret", "freezeMethods", "value", "toObjectSet", "arrayOrString", "delimiter", "define", "noop", "toFiniteNumber", "defaultValue", "isSpecCompliantForm", "toJSONObject", "stack", "visit", "source", "target", "reducedValue", "isAsyncFn", "isThenable", "_setImmediate", "setImmediateSupported", "postMessageSupported", "token", "callbacks", "data", "cb", "asap", "isIterable", "utils$1", "AxiosError", "message", "code", "config", "request", "response", "utils", "error", "customProps", "axiosError", "msg", "errCode", "httpAdapter", "isVisitable", "removeBrackets", "renderKey", "path", "dots", "isFlatArray", "predicates", "toFormData", "formData", "options", "option", "metaTokens", "visitor", "defaultVisitor", "indexes", "useBlob", "convertValue", "el", "index", "exposedHelpers", "build", "encode", "charMap", "match", "AxiosURLSearchParams", "params", "encoder", "_encode", "buildURL", "url", "serializeFn", "serializedParams", "hashmarkIndex", "InterceptorManager", "fulfilled", "rejected", "id", "h", "InterceptorManager$1", "transitionalDefaults", "URLSearchParams$1", "FormData$1", "Blob$1", "platform$1", "URLSearchParams", "FormData", "Blob", "hasBrowserEnv", "_navigator", "hasStandardBrowserEnv", "hasStandardBrowserWebWorkerEnv", "origin", "platform", "__spreadValues", "toURLEncodedForm", "helpers", "parsePropPath", "arrayToObject", "formDataToJSON", "buildPath", "isNumericKey", "isLast", "stringifySafely", "rawValue", "parser", "e", "defaults", "headers", "contentType", "hasJSONContentType", "isObjectPayload", "_FormData", "transitional", "forcedJSONParsing", "JSONRequested", "strictJSONParsing", "status", "method", "defaults$1", "ignoreDuplicateOf", "parseHeaders", "rawHeaders", "parsed", "line", "$internals", "normalizeHeader", "header", "normalizeValue", "parseTokens", "tokens", "tokensRE", "isValidHeaderName", "matchHeaderValue", "isHeaderNameFilter", "formatHeader", "w", "char", "buildAccessors", "accessorName", "methodName", "arg1", "arg2", "arg3", "AxiosHeaders", "valueOrRewrite", "rewrite", "self", "setHeader", "_value", "_header", "_rewrite", "lHeader", "setHeaders", "dest", "entry", "matcher", "deleted", "deleteHeader", "format", "normalized", "targets", "asStrings", "first", "computed", "accessors", "defineAccessor", "mapped", "headerValue", "AxiosHeaders$1", "transformData", "fns", "isCancel", "CanceledError", "settle", "resolve", "reject", "validateStatus", "parseProtocol", "speedometer", "samplesCount", "min", "bytes", "timestamps", "head", "tail", "firstSampleTS", "chunkLength", "now", "startedAt", "bytesCount", "passed", "throttle", "freq", "timestamp", "threshold", "lastArgs", "timer", "invoke", "args", "progressEventReducer", "listener", "isDownloadStream", "bytesNotified", "_speedometer", "loaded", "total", "progressBytes", "rate", "inRange", "progressEventDecorator", "throttled", "lengthComputable", "asyncDecorator", "isURLSameOrigin", "isMSIE", "cookies", "expires", "domain", "secure", "sameSite", "cookie", "isAbsoluteURL", "combineURLs", "baseURL", "relativeURL", "buildFullPath", "requestedURL", "allowAbsoluteUrls", "isRelativeUrl", "headersToObject", "mergeConfig", "config1", "config2", "getMergedValue", "mergeDeepProperties", "valueFromConfig2", "defaultToConfig2", "mergeDirectKeys", "mergeMap", "configValue", "resolveConfig", "newConfig", "withXSRFToken", "xsrfHeaderName", "xsrfCookieName", "auth", "formHeaders", "allowedHeaders", "xsrfValue", "isXHRAdapterSupported", "xhrAdapter", "_config", "requestData", "requestHeaders", "responseType", "onUploadProgress", "onDownloadProgress", "onCanceled", "uploadThrottled", "downloadThrottled", "flushUpload", "flushDownload", "done", "onloadend", "responseHeaders", "err", "event", "timeoutErrorMessage", "cancel", "protocol", "composeSignals", "signals", "timeout", "length", "controller", "aborted", "onabort", "reason", "unsubscribe", "signal", "composeSignals$1", "streamChunk", "chunk", "chunkSize", "pos", "end", "readBytes", "iterable", "__asyncGenerator", "iter", "__forAwait", "readStream", "more", "temp", "__await", "__yieldStar", "stream", "reader", "trackStream", "onProgress", "onFinish", "_onFinish", "loadedBytes", "DEFAULT_CHUNK_SIZE", "globalFetchAPI", "Request", "Response", "ReadableStream", "TextEncoder", "test", "factory", "env", "envFetch", "isFetchSupported", "isRequestSupported", "isResponseSupported", "isReadableStreamSupported", "encodeText", "supportsRequestStream", "duplexAccessed", "hasContentType", "supportsResponseStream", "resolvers", "res", "getBodyLength", "body", "resolveBodyLength", "cancelToken", "withCredentials", "fetchOptions", "_fetch", "composedSignal", "requestContentLength", "_request", "contentTypeHeader", "flush", "isCredentialsSupported", "resolvedOptions", "__spreadProps", "isStreamResponse", "responseContentLength", "responseData", "seedCache", "getFetch", "fetch", "seeds", "seed", "map", "knownAdapters", "fetchAdapter.getFetch", "renderReason", "isResolvedHandle", "adapter", "getAdapter", "adapters", "nameOrAdapter", "rejectedReasons", "reasons", "state", "s", "throwIfCancellationRequested", "dispatchRequest", "VERSION", "validators", "deprecatedWarnings", "validator", "version", "formatMessage", "opt", "desc", "opts", "correctSpelling", "assertOptions", "schema", "allowUnknown", "Axios", "instanceConfig", "configOrUrl", "dummy", "paramsSerializer", "contextHeaders", "requestInterceptorChain", "synchronousRequestInterceptors", "interceptor", "responseInterceptorChain", "promise", "chain", "onFulfilled", "onRejected", "fullPath", "generateHTTPMethod", "isForm", "Axios$1", "CancelToken", "_CancelToken", "executor", "resolvePromise", "onfulfilled", "_resolve", "abort", "c", "CancelToken$1", "spread", "callback", "isAxiosError", "payload", "HttpStatusCode", "HttpStatusCode$1", "createInstance", "defaultConfig", "instance", "axios", "promises", "require_map_obj", "__commonJSMin", "exports", "module", "isObject", "value", "mapObjectSkip", "isObjectCustom", "mapObject", "object", "mapper", "options", "isSeen", "__spreadValues", "target", "mapArray", "array", "element", "key", "mapResult", "newKey", "newValue", "shouldRecurse", "require_camelcase", "__commonJSMin", "exports", "module", "preserveCamelCase", "string", "isLastCharLower", "isLastCharUpper", "isLastLastCharUpper", "i", "character", "camelCase", "input", "options", "postProcess", "x", "_", "p1", "m", "require_quick_lru", "__commonJSMin", "exports", "module", "QuickLRU", "options", "key", "value", "deleted", "item", "oldCacheSize", "require_camelcase_keys", "__commonJSMin", "exports", "module", "mapObj", "camelCase", "QuickLru", "has", "array", "key", "x", "cache", "isObject", "value", "camelCaseConvert", "input", "options", "__spreadValues", "exclude", "pascalCase", "stopPaths", "deep", "stopPathsSet", "makeMapper", "parentPath", "path", "cacheKey", "ret", "require_os", "__commonJSMin", "exports", "module", "tslib_es6_exports", "__export", "__addDisposableResource", "__assign", "__asyncDelegator", "__asyncGenerator", "__asyncValues", "__await", "__awaiter", "__classPrivateFieldGet", "__classPrivateFieldIn", "__classPrivateFieldSet", "__createBinding", "__decorate", "__disposeResources", "__esDecorate", "__exportStar", "__extends", "__generator", "__importDefault", "__importStar", "__makeTemplateObject", "__metadata", "__param", "__propKey", "__read", "__rest", "__rewriteRelativeImportExtension", "__runInitializers", "__setFunctionName", "__spread", "__spreadArray", "__spreadArrays", "__values", "tslib_es6_default", "d", "b", "extendStatics", "__", "s", "t", "p", "i", "decorators", "target", "key", "desc", "c", "r", "paramIndex", "decorator", "ctor", "descriptorIn", "contextIn", "initializers", "extraInitializers", "accept", "f", "kind", "descriptor", "_", "done", "context", "result", "thisArg", "value", "useValue", "x", "name", "prefix", "metadataKey", "metadataValue", "_arguments", "P", "generator", "adopt", "resolve", "reject", "fulfilled", "step", "e", "rejected", "body", "y", "g", "verb", "n", "v", "op", "m", "o", "ar", "error", "il", "k", "a", "j", "jl", "to", "from", "pack", "l", "q", "awaitReturn", "resume", "settle", "fulfill", "cooked", "raw", "mod", "ownKeys", "__setModuleDefault", "receiver", "state", "env", "async", "dispose", "inner", "fail", "_SuppressedError", "next", "path", "preserveJsx", "tsx", "ext", "cm", "init_tslib_es6", "__esmMin", "k2", "suppressed", "message", "SUPPORTED_LOCALE", "localeLowerCase", "str", "locale", "lang", "lowerCase", "m", "exports", "lower_case_1", "DEFAULT_SPLIT_REGEXP", "DEFAULT_STRIP_REGEXP", "noCase", "input", "options", "_a", "splitRegexp", "_b", "stripRegexp", "_c", "transform", "_d", "delimiter", "result", "replace", "start", "end", "exports", "re", "value", "no_case_1", "dotCase", "input", "options", "tslib_1", "exports", "dot_case_1", "snakeCase", "input", "options", "tslib_1", "exports", "require_to_no_case", "__commonJSMin", "exports", "module", "toNoCase", "hasSpace", "hasSeparator", "hasCamel", "string", "unseparate", "uncamelize", "separatorSplitter", "m", "next", "camelSplitter", "previous", "uppers", "require_to_space_case", "__commonJSMin", "exports", "module", "clean", "toSpaceCase", "string", "matches", "match", "require_to_snake_case", "__commonJSMin", "exports", "module", "toSpace", "toSnakeCase", "string", "require_snakecase_keys", "__commonJSMin", "exports", "module", "map", "snakeCase", "obj", "options", "key", "val", "matches", "patterns", "value", "pattern", "require_BasisTheoryApiError", "__commonJSMin", "exports", "_extendableBuiltin", "cls", "ExtendableBuiltin", "instance", "BasisTheoryApiError", "_BasisTheoryApiError", "message", "status", "data", "_debug", "require_logging", "__commonJSMin", "exports", "_constants", "logger", "ddTok", "isTelemetryEnabled", "log", "message", "level", "attributes", "_document", "_window", "_window$location", "_window2", "_window2$location", "_navigator", "env", "payload", "__spreadValues", "e", "enabled", "require_utils", "__commonJSMin", "exports", "_axios", "_interopRequireDefault", "_camelcaseKeys", "_os", "_snakeCase", "_snakecaseKeys", "_BasisTheoryApiError", "_constants", "_logging", "obj", "assertInit", "prop", "transformRequestSnakeCase", "data", "proxyRaw", "transformReactorRequestSnakeCase", "reactor", "__spreadValues", "transformProxyRequestSnakeCase", "proxy", "transformTokenRequestSnakeCase", "payload", "isList", "arg", "transformTokenResponseCamelCase", "tokenResponse", "t", "transformReactorResponseCamelCase", "reactorResponse", "transformProxyResponseCamelCase", "proxyResponse", "p", "transformResponseCamelCase", "dataExtractor", "res", "dataAndHeadersExtractor", "concatRequestTransformerWithDefault", "requestTransformer", "concatResponseTransformerWithDefault", "responseTransformer", "createRequestConfig", "options", "transformers", "apiKey", "correlationId", "idempotencyKey", "query", "headers", "apiKeyHeader", "correlationIdHeader", "idempotencyKeyHeader", "handleAxiosError", "error", "debug", "_error$response$statu", "_error$response", "_error$response2", "_error$config", "_error$config$method", "_error$config2", "_error$config3", "_error$config4", "_error$config4$method", "_error$config5", "_error$config5$header", "_error$response5", "_error$response6", "_error$response7", "_error$response8", "status", "_debug", "_error$response3", "_error$response3$head", "_error$response4", "_error$response4$head", "logSeverity", "errorInterceptor", "errorInterceptorDebug", "getQueryParams", "keys", "params", "appendSafe", "key", "value", "isNested", "type", "formattedKey", "aValue", "objectKey", "appInfoToUserAgentString", "appInfo", "buildUserAgentString", "userAgent", "getBrowser", "version", "browser", "b", "e", "isEnvReactNative", "getOSVersion", "osMatch", "getRuntime", "buildClientUserAgentString", "clientUserAgent", "debugTransform", "__spreadProps", "require_BasisTheoryValidationError", "__commonJSMin", "exports", "_extendableBuiltin", "cls", "ExtendableBuiltin", "instance", "BasisTheoryValidationError", "_BasisTheoryValidationError", "message", "details", "validation", "require_HttpClientError", "__commonJSMin", "exports", "_extendableBuiltin", "cls", "ExtendableBuiltin", "instance", "HttpClientError", "_HttpClientError", "message", "status", "data", "headers", "require_common", "__commonJSMin", "exports", "_exportNames", "_BasisTheoryApiError", "_BasisTheoryValidationError", "_HttpClientError", "_constants", "key", "_utils", "require_types", "__commonJSMin", "require_BasisTheoryService", "__commonJSMin", "exports", "_axios", "_interopRequireDefault", "_common", "obj", "BasisTheoryService", "options", "apiKey", "baseURL", "transformRequest", "transformResponse", "appInfo", "debug", "__spreadValues", "require_service", "__commonJSMin", "exports", "_types", "key", "_BasisTheoryService", "require_CrudBuilder", "__commonJSMin", "exports", "_common", "Create", "Service", "model", "options", "Retrieve", "id", "Update", "Patch", "config", "__spreadProps", "__spreadValues", "Delete", "List", "query", "url", "CrudBuilder", "baseService", "require_BasisTheoryApplicationTemplates", "__commonJSMin", "exports", "_common", "_service", "_CrudBuilder", "BasisTheoryApplicationTemplates", "options", "require_application_templates", "__commonJSMin", "exports", "_BasisTheoryApplicationTemplates", "require_BasisTheoryApplicationKeys", "__commonJSMin", "exports", "_common", "_service", "_CrudBuilder", "BasisTheoryApplicationKeys", "applicationId", "keyId", "require_applicationKeys", "__commonJSMin", "exports", "_BasisTheoryApplicationKeys", "require_BasisTheoryApplications", "__commonJSMin", "exports", "_common", "_service", "_CrudBuilder", "BasisTheoryApplications", "options", "id", "require_applications", "__commonJSMin", "exports", "_BasisTheoryApplications", "require_BasisTheoryTokenize", "__commonJSMin", "exports", "_common", "_service", "BasisTheoryTokenize", "tokens", "options", "require_tokenize", "__commonJSMin", "exports", "_BasisTheoryTokenize", "require_tokenize", "__commonJSMin", "exports", "_tokenize", "delegateTokenize", "elements", "payload", "requestOptions", "require_BasisTheoryTokens", "__commonJSMin", "exports", "_common", "_utils", "_service", "_CrudBuilder", "BasisTheoryTokens", "options", "_options", "id", "url", "model", "config", "__spreadProps", "__spreadValues", "searchRequest", "require_tokens", "__commonJSMin", "exports", "_BasisTheoryTokens", "require_tokens", "__commonJSMin", "exports", "_tokens", "delegateTokens", "elements", "payload", "requestOptions", "id", "require_BasisTheoryProxy", "__commonJSMin", "exports", "_common", "_service", "BasisTheoryProxy", "options", "method", "_options$path2", "_options$path", "_options$body", "extractor", "require_proxy", "__commonJSMin", "exports", "_BasisTheoryProxy", "key", "require_proxy", "__commonJSMin", "exports", "_proxy", "delegateProxy", "elements", "options", "require_BasisTheoryTokenIntents", "__commonJSMin", "exports", "_common", "_service", "_CrudBuilder", "BasisTheoryTokenIntents", "options", "_options", "require_token_intents", "__commonJSMin", "exports", "_BasisTheoryTokenIntents", "require_token_intents", "__commonJSMin", "exports", "_tokenIntents", "delegateTokenIntents", "elements", "payload", "requestOptions", "require_services", "__commonJSMin", "exports", "_tokenize", "key", "_tokens", "_proxy", "_tokenIntents", "require_script", "__commonJSMin", "exports", "findScript", "url", "injectScript", "script", "parent", "require_constants", "__commonJSMin", "exports", "ELEMENTS_INIT_ERROR_MESSAGE", "ELEMENTS_NOM_DOM_ERROR_MESSAGE", "ELEMENTS_SCRIPT_LOAD_ERROR_MESSAGE", "ELEMENTS_SCRIPT_UNKNOWN_ERROR_MESSAGE", "ELEMENTS_SCRIPT_FAILED_TO_DELIVER", "CARD_BRANDS", "CARD_ICON_POSITIONS", "AUTOCOMPLETE_VALUES", "require_load", "__commonJSMin", "exports", "_logging", "_constants", "_script2", "elementsPromise", "loadScript", "url", "retryCount", "resolve", "reject", "script", "_script", "error", "event", "response", "responseObject", "responseText", "e", "_responseText", "loadElements", "elementsClientUrl", "require_elements", "__commonJSMin", "exports", "_services", "key", "_script", "_load", "require_BasisTheoryLogs", "__commonJSMin", "exports", "_service", "_CrudBuilder", "BasisTheoryLogs", "require_logs", "__commonJSMin", "exports", "_BasisTheoryLogs", "require_BasisTheoryPermissions", "__commonJSMin", "exports", "_common", "_service", "BasisTheoryPermissions", "query", "options", "url", "require_permissions", "__commonJSMin", "exports", "_BasisTheoryPermissions", "require_BasisTheoryProxies", "__commonJSMin", "exports", "_utils", "_service", "_CrudBuilder", "BasisTheoryProxies", "options", "_options", "__spreadValues", "require_proxies", "__commonJSMin", "exports", "_BasisTheoryProxies", "key", "require_BasisTheoryReactorFormulas", "__commonJSMin", "exports", "_service", "_CrudBuilder", "BasisTheoryReactorFormulas", "require_reactor_formulas", "__commonJSMin", "exports", "_BasisTheoryReactorFormulas", "require_BasisTheoryReactors", "__commonJSMin", "exports", "_common", "_utils", "_service", "_CrudBuilder", "BasisTheoryReactors", "options", "_options", "__spreadValues", "reactorId", "request", "require_reactors", "__commonJSMin", "exports", "_BasisTheoryReactors", "require_BasisTheorySessions", "__commonJSMin", "exports", "_common", "_utils", "_service", "BasisTheorySessions", "options", "_options", "__spreadValues", "authorizeSessionRequest", "require_sessions", "__commonJSMin", "exports", "_BasisTheorySessions", "require_BasisTheoryTenants", "__commonJSMin", "exports", "_common", "_service", "_CrudBuilder", "BasisTheoryTenants", "options", "model", "invitationId", "query", "url", "memberId", "require_tenants", "__commonJSMin", "exports", "_BasisTheoryTenants", "require_BasisTheoryThreeDs", "__commonJSMin", "exports", "_common", "_service", "BasisTheoryThreeDS", "createRequest", "sessionId", "authenticateRequest", "require_threeds", "__commonJSMin", "exports", "_BasisTheoryThreeDs", "key", "require_BasisTheory", "__commonJSMin", "exports", "_applicationTemplates", "_applicationKeys", "_applications", "_common", "_logging", "_elements", "_constants", "_logs", "_permissions", "_proxies", "_reactorFormulas", "_reactors", "_sessions", "_tenants", "_threeds", "_defineProperty", "obj", "key", "value", "defaultInitOptions", "BasisTheory", "apiKey", "options", "__spreadValues", "baseUrl", "baseUrlObject", "e", "appInfo", "error", "type", "tokens", "elementsBaseUrl", "elements", "elementsUseNgApi", "elementsUseSameOriginApi", "disableTelemetry", "debug", "_this$_elements", "require_basis_theory_js", "__commonJSMin", "exports", "_exportNames", "_BasisTheory", "key", "_applications", "_tokens", "_instance", "module_exports", "__export", "$78b3785cefa2a9d4$export$30207c6d2c13b02b", "$78b3785cefa2a9d4$export$7cd62790311d5c9", "$d6091d0740832a34$var$isAcsThreeDSChallengeRequest", "obj", "messageType", "messageVersion", "threeDSServerTransID", "acsTransID", "challengeWindowSize", "$12389938bc382e86$export$f73e2cb993c10d36", "$ede1e6694b13a411$export$3f521420530811cf", "$ede1e6694b13a411$export$9aef2de9a9febd46", "$ede1e6694b13a411$export$909c260dfc8c4a", "$ede1e6694b13a411$export$a831561ce8167be0", "$ede1e6694b13a411$export$e575008eba482a0", "$ede1e6694b13a411$export$c3ee1e672e1e24e7", "$ede1e6694b13a411$export$c823725bfc2e0c49", "$ede1e6694b13a411$export$16a30e6d25dd54ab", "$ede1e6694b13a411$export$260aceedd9fe5f81", "$9baa5c7531c09ef3$var$disableTelemetry", "$9baa5c7531c09ef3$export$bfcc8eb13073c803", "$9baa5c7531c09ef3$export$af88d00dbe7f521", "$12389938bc382e86$var$stringifyValue", "$12389938bc382e86$export$fa80f116bca647aa", "$12389938bc382e86$export$524b4f5938fca0ea", "$12389938bc382e86$export$a5202107d3e3cdb0", "$12389938bc382e86$export$d96f5f7405a82f1b", "$c64965f72f06da5e$var$isHTMLElement", "$c64965f72f06da5e$export$eca25244f8f7df8e", "$c64965f72f06da5e$export$f681a8129d2e9d28", "$c64965f72f06da5e$export$d80fffb1deb3b97e", "$c64965f72f06da5e$export$b824392d62597b74", "$c64965f72f06da5e$export$78907e7ba1b6c00e", "$fa75e9b184a0a110$var$convertCasing", "$fa75e9b184a0a110$export$3561b44d041d13c", "$fa75e9b184a0a110$export$72d485cca95ce2e2", "$bb80761c88de0bf5$export$c564cdbbe6da493", "$263638c749818df0$export$7d6f1c8842f9f527", "$9e6eab7e85fe68ea$export$9130146a86a85749", "$9e6eab7e85fe68ea$export$5e14cdade93d6f7b", "$9e6eab7e85fe68ea$export$c1c631b5969e899b", "$b7edf56a6b60e294$var$getIframeId", "$b7edf56a6b60e294$export$c41ae42ecc348abb", "$36674fed137cfc63$var$errorMessagesMap", "$36674fed137cfc63$var$validationErrorMessagesMap", "$36674fed137cfc63$var$isValidationApiError", "$36674fed137cfc63$export$89d83cc97c52a37", "$36674fed137cfc63$export$1e46c02a50c8708f", "$2bc795de5a692819$var$submitMethodRequestRedirect", "$2bc795de5a692819$var$submitMethodRequest", "$2bc795de5a692819$var$makeSessionRequest", "$2bc795de5a692819$export$f7c62c73429afa28", "$0db30e8bab82ecdb$export$8181f6b5c58f6044", "$d6091d0740832a34$var$submitChallengeRequest", "$d6091d0740832a34$var$submitChallengeRequestRedirect", "$d6091d0740832a34$var$makeChallengeRequest", "$d6091d0740832a34$export$452d4d807a279e0d", "init_module", "__esmMin", "disableTelemetryArg", "ddTok", "log", "message", "level", "error", "attributes", "payload", "__spreadProps", "__spreadValues", "e", "WindowSizeId", "val", "validColorDepths", "actualColorDepth", "possibleValues", "c", "size", "err", "container", "name", "id", "width", "height", "onLoadCallback", "msg", "iframe", "formName", "formAction", "formTarget", "form", "value", "input", "hidden", "ids", "_a", "transformKey", "convertCase", "key", "match", "_apiKey", "_baseUrl", "method", "path", "body", "correlationId", "additional_headers", "apiKey", "baseUrl", "NotificationType", "notification", "type", "session", "timeout", "resolve", "reject", "handleMessage", "event", "_b", "_c", "_d", "response", "transformedSession", "apiError", "errorKey", "errorParts", "errorMessage", "threeDSMethodURL", "methodNotificationURL", "threeDSMethodDataBase64", "newWindow", "checkClosedInterval", "tokenId", "tokenIntentId", "pan", "skipMethodRequest", "methodRequestMode", "challengeMode", "providedParams", "param", "sessionParamKey", "sessionParamValue", "deviceInfo", "json", "timeoutId", "acsURL", "creq", "containerId", "windowSize", "creqBase64", "challengeIframeName", "challengeIframe", "creqInput", "sessionId", "acsTransactionId", "acsChallengeUrl", "threeDSVersion", "mode", "configOptions", "index_exports", "__export", "ApiClient", "CheckoutResource", "CheckoutUtils", "CurrencyUtils", "ExpressPaymentMethodsResource", "FunnelActionType", "GoogleAutocompleteCore", "ISODataCore", "OrderBumpUtils", "OrderUtils", "OrdersResource", "PaymentService", "PaymentsResource", "PluginConfigUtils", "PostPurchasesUtils", "ProductsUtils", "PromotionsUtils", "ShippingRatesResource", "StoreConfigResource", "TagadaApiError", "TagadaAuthError", "TagadaCircuitBreakerError", "TagadaClient", "TagadaError", "TagadaErrorCode", "TagadaExternalTracker", "TagadaNetworkError", "TagadaTracker", "TagadaValidationError", "ThreedsResource", "broadcastConfigUpdate", "clearFunnelSessionCookie", "createRawPluginConfig", "createTagadaClient", "debounceConfigUpdate", "formatMoney", "funnelQueryKeys", "getAssignedPaymentFlowId", "getAssignedStepConfig", "getBasisTheoryApiKey", "getBasisTheoryTenantId", "getFunnelSessionCookie", "getFunnelVariantId", "getInternalPath", "getPathInfo", "getPluginConfig", "hasFunnelSessionCookie", "injectStepConfigScripts", "isPathRemapped", "loadLocalConfig", "loadPluginConfig", "matchRoute", "onConfigUpdate", "sendConfigUpdate", "setFunnelSessionCookie", "init_environment", "init_funnelClient", "bind", "fn", "thisArg", "toString", "getPrototypeOf", "iterator", "toStringTag", "kindOf", "cache", "thing", "str", "kindOfTest", "type", "typeOfTest", "isArray", "isUndefined", "isBuffer", "val", "isFunction", "isArrayBuffer", "isArrayBufferView", "result", "isString", "isNumber", "isObject", "isBoolean", "isPlainObject", "prototype", "isEmptyObject", "isDate", "isFile", "isBlob", "isFileList", "isStream", "isFormData", "kind", "isURLSearchParams", "isReadableStream", "isRequest", "isResponse", "isHeaders", "trim", "forEach", "obj", "fn", "allOwnKeys", "i", "l", "keys", "len", "key", "findKey", "_key", "_global", "isContextDefined", "context", "merge", "caseless", "skipUndefined", "assignValue", "targetKey", "extend", "a", "b", "thisArg", "bind", "stripBOM", "content", "inherits", "constructor", "superConstructor", "props", "descriptors", "toFlatObject", "sourceObj", "destObj", "filter", "propFilter", "prop", "merged", "endsWith", "searchString", "position", "lastIndex", "toArray", "arr", "isTypedArray", "TypedArray", "forEachEntry", "_iterator", "pair", "matchAll", "regExp", "matches", "isHTMLForm", "toCamelCase", "m", "p1", "p2", "hasOwnProperty", "isRegExp", "reduceDescriptors", "reducer", "reducedDescriptors", "descriptor", "name", "ret", "freezeMethods", "value", "toObjectSet", "arrayOrString", "delimiter", "define", "noop", "toFiniteNumber", "defaultValue", "isSpecCompliantForm", "toJSONObject", "stack", "visit", "source", "target", "reducedValue", "isAsyncFn", "isThenable", "_setImmediate", "setImmediateSupported", "postMessageSupported", "token", "callbacks", "data", "cb", "asap", "isIterable", "utils_default", "AxiosError", "message", "code", "config", "request", "response", "utils_default", "prototype", "descriptors", "error", "customProps", "axiosError", "obj", "prop", "msg", "errCode", "AxiosError_default", "null_default", "isVisitable", "thing", "utils_default", "removeBrackets", "key", "renderKey", "path", "dots", "token", "i", "isFlatArray", "arr", "predicates", "prop", "toFormData", "obj", "formData", "options", "null_default", "option", "source", "metaTokens", "visitor", "defaultVisitor", "indexes", "useBlob", "convertValue", "value", "AxiosError_default", "el", "index", "stack", "exposedHelpers", "build", "toFormData_default", "encode", "str", "charMap", "match", "AxiosURLSearchParams", "params", "options", "toFormData_default", "prototype", "name", "value", "encoder", "_encode", "pair", "AxiosURLSearchParams_default", "encode", "val", "buildURL", "url", "params", "options", "_encode", "utils_default", "serializeFn", "serializedParams", "AxiosURLSearchParams_default", "hashmarkIndex", "InterceptorManager", "fulfilled", "rejected", "options", "id", "fn", "utils_default", "h", "InterceptorManager_default", "transitional_default", "URLSearchParams_default", "AxiosURLSearchParams_default", "FormData_default", "Blob_default", "browser_default", "URLSearchParams_default", "FormData_default", "Blob_default", "utils_exports", "__export", "hasBrowserEnv", "hasStandardBrowserEnv", "hasStandardBrowserWebWorkerEnv", "_navigator", "origin", "platform_default", "__spreadValues", "utils_exports", "browser_default", "toURLEncodedForm", "data", "options", "toFormData_default", "platform_default", "__spreadValues", "value", "key", "path", "helpers", "utils_default", "parsePropPath", "name", "utils_default", "match", "arrayToObject", "arr", "obj", "keys", "i", "len", "key", "formDataToJSON", "formData", "buildPath", "path", "value", "target", "index", "isNumericKey", "isLast", "formDataToJSON_default", "stringifySafely", "rawValue", "parser", "encoder", "utils_default", "e", "defaults", "transitional_default", "data", "headers", "contentType", "hasJSONContentType", "isObjectPayload", "formDataToJSON_default", "isFileList", "toURLEncodedForm", "_FormData", "toFormData_default", "transitional", "forcedJSONParsing", "JSONRequested", "strictJSONParsing", "AxiosError_default", "platform_default", "status", "method", "defaults_default", "ignoreDuplicateOf", "utils_default", "parseHeaders_default", "rawHeaders", "parsed", "key", "val", "i", "line", "$internals", "normalizeHeader", "header", "normalizeValue", "value", "utils_default", "parseTokens", "str", "tokens", "tokensRE", "match", "isValidHeaderName", "matchHeaderValue", "context", "filter", "isHeaderNameFilter", "formatHeader", "w", "char", "buildAccessors", "obj", "accessorName", "methodName", "arg1", "arg2", "arg3", "AxiosHeaders", "headers", "valueOrRewrite", "rewrite", "self", "setHeader", "_value", "_header", "_rewrite", "lHeader", "key", "setHeaders", "parseHeaders_default", "dest", "entry", "parser", "matcher", "deleted", "deleteHeader", "keys", "i", "format", "normalized", "targets", "asStrings", "thing", "first", "computed", "target", "accessors", "prototype", "defineAccessor", "mapped", "headerValue", "AxiosHeaders_default", "transformData", "fns", "response", "config", "defaults_default", "context", "headers", "AxiosHeaders_default", "data", "utils_default", "fn", "isCancel", "value", "CanceledError", "message", "config", "request", "AxiosError_default", "utils_default", "CanceledError_default", "settle", "resolve", "reject", "response", "validateStatus", "AxiosError_default", "parseProtocol", "url", "match", "speedometer", "samplesCount", "min", "bytes", "timestamps", "head", "tail", "firstSampleTS", "chunkLength", "now", "startedAt", "i", "bytesCount", "passed", "speedometer_default", "throttle", "fn", "freq", "timestamp", "threshold", "lastArgs", "timer", "invoke", "args", "now", "passed", "throttle_default", "progressEventReducer", "listener", "isDownloadStream", "freq", "bytesNotified", "_speedometer", "speedometer_default", "throttle_default", "e", "loaded", "total", "progressBytes", "rate", "inRange", "data", "progressEventDecorator", "throttled", "lengthComputable", "asyncDecorator", "fn", "args", "utils_default", "isURLSameOrigin_default", "platform_default", "origin", "isMSIE", "url", "cookies_default", "platform_default", "name", "value", "expires", "path", "domain", "secure", "sameSite", "cookie", "utils_default", "match", "isAbsoluteURL", "url", "combineURLs", "baseURL", "relativeURL", "buildFullPath", "baseURL", "requestedURL", "allowAbsoluteUrls", "isRelativeUrl", "isAbsoluteURL", "combineURLs", "headersToObject", "thing", "AxiosHeaders_default", "__spreadValues", "mergeConfig", "config1", "config2", "config", "getMergedValue", "target", "source", "prop", "caseless", "utils_default", "mergeDeepProperties", "a", "b", "valueFromConfig2", "defaultToConfig2", "mergeDirectKeys", "mergeMap", "merge", "configValue", "resolveConfig_default", "config", "newConfig", "mergeConfig", "data", "withXSRFToken", "xsrfHeaderName", "xsrfCookieName", "headers", "auth", "AxiosHeaders_default", "buildURL", "buildFullPath", "utils_default", "platform_default", "formHeaders", "allowedHeaders", "key", "val", "isURLSameOrigin_default", "xsrfValue", "cookies_default", "isXHRAdapterSupported", "xhr_default", "config", "resolve", "reject", "_config", "resolveConfig_default", "requestData", "requestHeaders", "AxiosHeaders_default", "responseType", "onUploadProgress", "onDownloadProgress", "onCanceled", "uploadThrottled", "downloadThrottled", "flushUpload", "flushDownload", "done", "request", "onloadend", "responseHeaders", "response", "settle", "value", "err", "AxiosError_default", "event", "msg", "timeoutErrorMessage", "transitional", "transitional_default", "utils_default", "val", "key", "progressEventReducer", "cancel", "CanceledError_default", "protocol", "parseProtocol", "platform_default", "composeSignals", "signals", "timeout", "length", "controller", "aborted", "onabort", "reason", "unsubscribe", "err", "AxiosError_default", "CanceledError_default", "timer", "signal", "utils_default", "composeSignals_default", "streamChunk", "chunk", "chunkSize", "len", "pos", "end", "readBytes", "iterable", "__asyncGenerator", "iter", "__forAwait", "readStream", "more", "temp", "error", "__await", "__yieldStar", "stream", "reader", "done", "value", "trackStream", "onProgress", "onFinish", "iterator", "bytes", "_onFinish", "e", "controller", "loadedBytes", "err", "reason", "DEFAULT_CHUNK_SIZE", "isFunction", "utils_default", "globalFetchAPI", "Request", "Response", "ReadableStream", "TextEncoder", "test", "fn", "args", "e", "factory", "env", "envFetch", "isFetchSupported", "isRequestSupported", "isResponseSupported", "isReadableStreamSupported", "encodeText", "encoder", "str", "supportsRequestStream", "duplexAccessed", "hasContentType", "platform_default", "supportsResponseStream", "resolvers", "res", "type", "config", "method", "AxiosError_default", "getBodyLength", "body", "resolveBodyLength", "headers", "length", "url", "data", "signal", "cancelToken", "timeout", "onDownloadProgress", "onUploadProgress", "responseType", "withCredentials", "fetchOptions", "resolveConfig_default", "_fetch", "composedSignal", "composeSignals_default", "request", "unsubscribe", "requestContentLength", "_request", "contentTypeHeader", "onProgress", "flush", "progressEventDecorator", "progressEventReducer", "asyncDecorator", "trackStream", "isCredentialsSupported", "resolvedOptions", "__spreadProps", "__spreadValues", "response", "isStreamResponse", "options", "prop", "responseContentLength", "responseData", "resolve", "reject", "settle", "AxiosHeaders_default", "err", "seedCache", "getFetch", "fetch", "seeds", "len", "i", "seed", "target", "map", "adapter", "knownAdapters", "null_default", "xhr_default", "getFetch", "utils_default", "fn", "value", "e", "renderReason", "reason", "isResolvedHandle", "adapter", "getAdapter", "adapters", "config", "length", "nameOrAdapter", "rejectedReasons", "id", "AxiosError_default", "reasons", "state", "s", "adapters_default", "throwIfCancellationRequested", "config", "CanceledError_default", "dispatchRequest", "AxiosHeaders_default", "transformData", "adapters_default", "defaults_default", "response", "reason", "isCancel", "VERSION", "validators", "type", "i", "thing", "deprecatedWarnings", "validator", "version", "message", "formatMessage", "opt", "desc", "VERSION", "value", "opts", "AxiosError_default", "correctSpelling", "assertOptions", "options", "schema", "allowUnknown", "keys", "result", "validator_default", "validators", "validator_default", "Axios", "instanceConfig", "InterceptorManager_default", "configOrUrl", "config", "err", "dummy", "stack", "e", "mergeConfig", "transitional", "paramsSerializer", "headers", "utils_default", "contextHeaders", "method", "AxiosHeaders_default", "requestInterceptorChain", "synchronousRequestInterceptors", "interceptor", "responseInterceptorChain", "promise", "i", "len", "chain", "dispatchRequest", "newConfig", "onFulfilled", "onRejected", "error", "fullPath", "buildFullPath", "buildURL", "url", "generateHTTPMethod", "isForm", "data", "Axios_default", "CancelToken", "_CancelToken", "executor", "resolvePromise", "resolve", "token", "cancel", "i", "onfulfilled", "_resolve", "promise", "message", "config", "request", "CanceledError_default", "listener", "index", "controller", "abort", "err", "c", "CancelToken_default", "spread", "callback", "arr", "isAxiosError", "payload", "utils_default", "HttpStatusCode", "key", "value", "HttpStatusCode_default", "createInstance", "defaultConfig", "context", "Axios_default", "instance", "bind", "utils_default", "instanceConfig", "mergeConfig", "axios", "defaults_default", "CanceledError_default", "CancelToken_default", "isCancel", "VERSION", "toFormData_default", "AxiosError_default", "promises", "spread", "isAxiosError", "AxiosHeaders_default", "thing", "formDataToJSON_default", "adapters_default", "HttpStatusCode_default", "axios_default", "Axios", "AxiosError", "CanceledError", "isCancel", "CancelToken", "VERSION", "all", "Cancel", "isAxiosError", "spread", "toFormData", "AxiosHeaders", "HttpStatusCode", "formToJSON", "getAdapter", "mergeConfig", "axios_default", "TagadaErrorCode", "TagadaError", "message", "options", "_a", "TagadaApiError", "statusCode", "_b", "TagadaNetworkError", "TagadaAuthError", "TagadaValidationError", "details", "TagadaCircuitBreakerError", "ApiClient", "config", "axios_default", "__spreadValues", "_a", "_b", "error", "token", "response", "TagadaError", "provider", "url", "data", "key", "value", "now", "history", "TagadaCircuitBreakerError", "_c", "_d", "_e", "status", "serverMessage", "TagadaAuthError", "TagadaApiError", "TagadaErrorCode", "TagadaNetworkError", "getScreenResolution", "getTimeZone", "e", "getBrowserLocale", "UA", "match", "ua", "patterns", "p", "m", "parseBrowser", "tests", "re", "name", "version", "parseOS", "raw", "parseDevice", "_a", "parseEngine", "parseCPU", "detectIsBot", "detectIsChromeFamily", "browserName", "detectIsStandalonePWA", "detectIsAppleSilicon", "osName", "collectDeviceInfo", "browser", "os", "device", "engine", "cpu", "flags", "getUrlParams", "params", "EventBus", "event", "callback", "data", "callbacks", "cb", "e", "init_eventDispatcher", "decodeJWTClient", "token", "parts", "payload", "paddedPayload", "decoded", "parsedPayload", "error", "isTokenExpired", "init_environment", "import_meta", "DEFAULT_PREFIXES", "resolveEnvValue", "key", "prefixes", "_a", "_b", "_c", "prefix", "envKey", "loadLocalDevConfig", "configVariant", "resolveEnvValue", "isLocalEnvironment", "localResponse", "localConfig", "config", "configLoaded", "deploymentResponse", "e", "defaultResponse", "result", "loadStaticResources", "funnelResponse", "funnelConfig", "loadLocalFunnelConfig", "transformed", "key", "value", "response", "staticResources", "error", "getMetaContent", "name", "metaTag", "readWindowConfig", "encoded", "getPluginConfig", "storeId", "accountId", "basePath", "loadProductionConfig", "loadPluginConfig", "rawConfig", "_a", "_b", "productionConfig", "__spreadProps", "__spreadValues", "envConfig", "createRawPluginConfig", "loadLocalConfig", "configName", "defaultConfig", "possiblePaths", "path", "resolvedConfig", "PluginConfigUtils", "context", "init_previewMode", "init_tokenStorage", "init_tokenStorage", "resolutionCache", "resolvedCodes", "getAuthCode", "resolveAuthHandoff", "authCode", "storeId", "apiBaseUrl", "debugMode", "resolvedCodes", "inFlightResolution", "resolutionCache", "resolutionPromise", "response", "errorData", "data", "setClientToken", "cleanAuthCodeFromUrl", "error", "url", "shouldResolveAuthCode", "getAuthCode", "TagadaClient", "config", "EventBus", "EventDispatcher", "_a", "_b", "_c", "_d", "event", "accountId", "funnelId", "err", "handlePreviewMode", "env", "envConfig", "getEnvironmentConfig", "__spreadProps", "__spreadValues", "ApiClient", "funnelFeature", "funnelConfig", "FunnelClient", "getClientToken", "listener", "updates", "detectEnvironment", "error", "configVariant", "loadPluginConfig", "shouldResolveAuthCode", "storeId", "authCode", "handoffData", "resolveAuthHandoff", "decodedSession", "decodeJWTClient", "queryToken", "setClientToken", "existingToken", "tokenToUse", "shouldPersist", "isTokenExpired", "token", "resolve", "urlToken", "draft", "isDraftMode", "response", "sessionData", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "deviceInfo", "collectDeviceInfo", "urlParams", "getUrlParams", "browserLocale", "getBrowserLocale", "draftParam", "setDraftMode", "sessionInitData", "storeData", "storeConfig", "localeConfig", "currencyConfig", "authState", "skipAutoInit", "code", "newConfig", "updatedConfig", "handleMessage", "elementId", "styles", "staticHighlightId", "existingHighlight", "applyToElement", "element", "isVoidElement", "targetElement", "parent", "newWrapper", "computedStyle", "elementDisplay", "verticalAlign", "prop", "camelProp", "value", "inlineValue", "highlightDiv", "borderRadius", "stylesToApply", "property", "camelProperty", "_", "letter", "appliedStyles", "k", "v", "maxAttempts", "intervalMs", "attempts", "isElementHidden", "style", "findAndApply", "elements", "i", "CheckoutResource", "apiClient", "params", "getFunnelSessionId", "funnelSessionId", "navigationEvent", "requestParams", "__spreadProps", "__spreadValues", "checkoutToken", "currency", "queryParams", "url", "checkoutSessionId", "data", "code", "promotionId", "lineItems", "variantId", "quantity", "priceId", "orderBumpOfferId", "selected", "paymentMethodName", "init_funnelClient", "BASIS_THEORY_CONFIG", "getBasisTheoryKeys", "isProduction", "config", "isProductionBasisTheory", "hostname", "getBasisTheoryApiKey", "getBasisTheoryKeys", "getBasisTheoryTenantId", "ShippingRatesResource", "apiClient", "sessionId", "shippingRateId", "params", "queryParams", "PaymentsResource", "apiClient", "paymentInstrumentData", "basisTheory", "cardData", "_a", "_b", "btResponse", "__spreadValues", "expiration_month", "expiration_year", "response", "applePayToken", "googlePayToken", "apmData", "expiryDate", "month", "year", "currentYear", "century", "fullYear", "checkoutSessionId", "paymentInstrumentId", "threedsSessionId", "options", "requestBody", "error", "paymentId", "data", "OrdersResource", "apiClient", "orderId", "response", "orderData", "checkoutSessionId", "status", "items", "ExpressPaymentMethodsResource", "apiClient", "sessionId", "data", "customerId", "StoreConfigResource", "apiClient", "storeId", "ThreedsResource", "apiClient", "request", "GEODATA_CDN_BASE", "countriesCache", "regionsCache", "inflightCountries", "inflightRegions", "fetchCountriesRaw", "language", "cached", "inflight", "url", "GEODATA_CDN_BASE", "res", "data", "fetchRegionsRaw", "getCountriesCached", "getRegionsCached", "ensureGeoDataLoaded", "language", "fetchCountriesRaw", "fetchRegionsRaw", "getCountries", "raw", "getCountriesCached", "code", "c", "a", "b", "getStatesForCountry", "countryCode", "tuples", "getRegionsCached", "iso", "name", "isLanguageRegistered", "language", "countriesCache", "getRegisteredLanguages", "importLanguage", "ensureGeoDataLoaded", "ISODataCore", "language", "countriesArray", "getCountries", "countries", "country", "error", "countryCode", "getStatesForCountry", "state", "e", "regionCode", "_a", "region", "googleState", "googleStateLong", "regions", "match", "r", "isLanguageRegistered", "getRegisteredLanguages", "importLanguage", "ensureGeoDataLoaded", "GoogleAutocompleteCore", "apiKey", "_a", "_b", "input", "options", "resolve", "reject", "predictions", "status", "_c", "placeId", "place", "placeDetails", "components", "component", "types", "init_funnel", "ProductsUtils", "products", "variantId", "product", "variant", "v", "currency", "price", "p", "defaultPrice", "allVariants", "predicate", "filtered", "OrderUtils", "order", "formatMoney", "amountMinorUnits", "currencyCode", "locale", "decimalPlaces", "CurrencyUtils", "value", "e", "symbol", "context", "defaultCurrency", "_a", "_b", "_c", "code", "CheckoutUtils", "checkoutData", "_a", "lineItems", "totalPrice", "PromotionsUtils", "promotion", "PostPurchasesUtils", "offer", "_a", "_b", "locale", "OrderBumpUtils", "offer", "__spreadProps", "__spreadValues", "baseAmount", "totalAmount", "adjustedAmount", "offers", "total", "funnelQueryKeys", "sessionId", "funnelId", "sendConfigUpdate", "targetWindow", "config", "targetOrigin", "message", "broadcastConfigUpdate", "selector", "iframes", "iframe", "onConfigUpdate", "callback", "handleMessage", "event", "_a", "debounceConfigUpdate", "fn", "delay", "timeoutId", "import_path_to_regexp", "internalPathCache", "isBrowser", "originalPushState", "originalReplaceState", "clearCache", "args", "getInternalPath", "isLocalhost", "queryRemap", "storageRemap", "remapConfig", "currentPath", "result", "jsonError", "e", "fullRemapMetaTag", "content", "decodedContent", "parsed", "metaTag", "trimmedContent", "error", "isPathRemapped", "getPathInfo", "externalPath", "internalPath", "query", "hash", "matchesPathPattern", "pathname", "pattern", "params", "key", "value", "mapParamNames", "externalParams", "externalPattern", "internalPattern", "externalParamNames", "extractParamNames", "internalParamNames", "mappedParams", "externalName", "index", "internalName", "matches", "m", "matchRoute", "remappedInternalPath", "remapData", "externalMatch", "init_funnelClient", "init_funnelClient", "PaymentService", "config", "PaymentsResource", "ThreedsResource", "StoreConfigResource", "callbacks", "apiKey", "getBasisTheoryApiKey", "BasisTheory", "bt", "error", "BasisTheory3ds", "paymentId", "maxAttempts", "interval", "check", "_a", "payment", "e", "checkoutSessionId", "paymentInstrumentId", "threedsSessionId", "extra", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "paymentFlowId", "getAssignedPaymentFlowId", "response", "resolve", "resumedPayment", "_i", "_j", "_k", "_l", "errorMsg", "p", "_m", "actionData", "redirectUrl", "session", "msg", "threeDSData", "tempDoc", "form", "redirectForm", "input", "newInput", "authData", "name", "value", "radarConfig", "sessionKey", "reject", "timeout", "FinixAuth", "key", "immediateKey", "resumed", "result", "isTest", "orderId", "sessionId", "existingScript", "baseUrl", "script", "_n", "containerId", "container", "authResult", "challengeHtml", "cleanup", "src", "isReady", "predicate", "t", "url", "paymentAction", "paymentActionStatus", "paymentIdFromUrl", "paymentIntentId", "succeeded", "processorType", "_o", "_p", "_q", "_r", "_s", "_t", "_u", "_v", "_w", "_x", "_y", "_z", "_A", "_B", "_C", "cleanParams", "newUrl", "retrieveResult", "retrieveStatus", "cardData", "token", "paymentInstrument", "instrument", "applePayToken", "googlePayToken", "apmData", "init_tokenStorage", "TRACKER_VERSION", "getUrlParam", "name", "log", "debug", "args", "warn", "validate", "config", "retryWithBackoff", "fn", "maxRetries", "lastError", "attempt", "err", "delay", "r", "TagadaExternalTracker", "_a", "_b", "__spreadValues", "error", "urlToken", "setClientToken", "createTagadaClient", "funnelContext", "session", "ctx", "options", "shouldAutoRedirect", "result", "e", "_c", "_d", "_e", "baseUrl", "additionalParams", "url", "key", "value", "newStepId", "resolve", "resolved", "timeout", "customerId", "sessionId", "authSession", "store", "entryStepId", "TagadaTracker", "TagadaTracker", "parseStepConfigScripts", "stepConfig", "getAssignedStepConfig", "s", "injectScript", "script", "index", "position", "scriptId", "scriptBody", "scriptTagMatch", "wrappedScript", "scriptElement", "injectStepConfigScripts", "scripts", "runInjection", "createTagadaClient", "config", "TagadaClient", "getBasisTheoryApiKey", "getBasisTheoryTenantId"]
|
|
7
|
+
}
|