@adyen/adyen-web 6.34.1 → 6.35.0

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.
Files changed (120) hide show
  1. package/dist/cjs/adyen.css +2 -3
  2. package/dist/cjs/adyen.css.map +1 -1
  3. package/dist/cjs/index.cjs +2 -2
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/index.d.cts +39 -26
  6. package/dist/es/adyen.css +2 -3
  7. package/dist/es/adyen.css.map +1 -1
  8. package/dist/es/components/Card/components/CardInput/CardInput.js +1 -1
  9. package/dist/es/components/Card/components/CardInput/CardInput.js.map +1 -1
  10. package/dist/es/components/Card/components/CardInput/components/BrandIcon.js +1 -1
  11. package/dist/es/components/Card/components/CardInput/components/BrandIcon.js.map +1 -1
  12. package/dist/es/components/Card/components/CardInput/components/CardFields.js +1 -1
  13. package/dist/es/components/Card/components/CardInput/components/CardFields.js.map +1 -1
  14. package/dist/es/components/Card/components/CardInput/components/CardFieldsWrapper.js +1 -1
  15. package/dist/es/components/Card/components/CardInput/components/CardFieldsWrapper.js.map +1 -1
  16. package/dist/es/components/Card/components/CardInput/components/CardNumber.js +1 -1
  17. package/dist/es/components/Card/components/CardInput/components/CardNumber.js.map +1 -1
  18. package/dist/es/components/Card/components/CardInput/components/DualBrandSelector.js +2 -0
  19. package/dist/es/components/Card/components/CardInput/components/DualBrandSelector.js.map +1 -0
  20. package/dist/es/components/Card/components/CardInput/components/DualBrandSelector.module.scss.js +2 -0
  21. package/dist/es/components/Card/components/CardInput/components/DualBrandSelector.module.scss.js.map +1 -0
  22. package/dist/es/components/Card/components/CardInput/types.js.map +1 -1
  23. package/dist/es/components/Card/components/CardInput/utils.js +1 -1
  24. package/dist/es/components/Card/components/CardInput/utils.js.map +1 -1
  25. package/dist/es/components/Card/constants.js.map +1 -1
  26. package/dist/es/components/CustomCard/CustomCard.js +1 -1
  27. package/dist/es/components/CustomCard/CustomCard.js.map +1 -1
  28. package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js +1 -1
  29. package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  30. package/dist/es/components/Giftcard/components/GiftcardComponent.js +1 -1
  31. package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  32. package/dist/es/components/internal/BaseElement/BaseElement.js +1 -1
  33. package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
  34. package/dist/es/components/internal/FormFields/Field/Field.js +1 -1
  35. package/dist/es/components/internal/FormFields/Field/Field.js.map +1 -1
  36. package/dist/es/components/internal/SecuredFields/SFP/SFPUtils.js +1 -1
  37. package/dist/es/components/internal/SecuredFields/SFP/SFPUtils.js.map +1 -1
  38. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  39. package/dist/es/components/internal/SecuredFields/binLookup/extensions.js +1 -1
  40. package/dist/es/components/internal/SecuredFields/binLookup/extensions.js.map +1 -1
  41. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleBrandFromBinLookup.js +1 -1
  42. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleBrandFromBinLookup.js.map +1 -1
  43. package/dist/es/components/internal/SecuredFields/lib/CSF/partials/processBrand.js +1 -1
  44. package/dist/es/components/internal/SecuredFields/lib/CSF/partials/processBrand.js.map +1 -1
  45. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/cardType.js +1 -1
  46. package/dist/es/components/internal/SecuredFields/lib/CSF/utils/cardType.js.map +1 -1
  47. package/dist/es/components/internal/SecuredFields/lib/constants.js +1 -1
  48. package/dist/es/components/internal/SecuredFields/lib/constants.js.map +1 -1
  49. package/dist/es/core/Analytics/Analytics.js +1 -1
  50. package/dist/es/core/Analytics/Analytics.js.map +1 -1
  51. package/dist/es/core/Analytics/AnalyticsService.js.map +1 -1
  52. package/dist/es/core/Analytics/events/AnalyticsInfoEvent.js +1 -1
  53. package/dist/es/core/Analytics/events/AnalyticsInfoEvent.js.map +1 -1
  54. package/dist/es/core/config.js +1 -1
  55. package/dist/es/core/config.js.map +1 -1
  56. package/dist/es/index.d.ts +39 -26
  57. package/dist/es/utils/createSdkData.js +1 -1
  58. package/dist/es/utils/createSdkData.js.map +1 -1
  59. package/dist/es-legacy/adyen.css +2 -3
  60. package/dist/es-legacy/adyen.css.map +1 -1
  61. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js +1 -1
  62. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js.map +1 -1
  63. package/dist/es-legacy/components/Card/components/CardInput/components/BrandIcon.js +1 -1
  64. package/dist/es-legacy/components/Card/components/CardInput/components/BrandIcon.js.map +1 -1
  65. package/dist/es-legacy/components/Card/components/CardInput/components/CardFields.js +1 -1
  66. package/dist/es-legacy/components/Card/components/CardInput/components/CardFields.js.map +1 -1
  67. package/dist/es-legacy/components/Card/components/CardInput/components/CardFieldsWrapper.js +1 -1
  68. package/dist/es-legacy/components/Card/components/CardInput/components/CardFieldsWrapper.js.map +1 -1
  69. package/dist/es-legacy/components/Card/components/CardInput/components/CardNumber.js +1 -1
  70. package/dist/es-legacy/components/Card/components/CardInput/components/CardNumber.js.map +1 -1
  71. package/dist/es-legacy/components/Card/components/CardInput/components/DualBrandSelector.js +2 -0
  72. package/dist/es-legacy/components/Card/components/CardInput/components/DualBrandSelector.js.map +1 -0
  73. package/dist/es-legacy/components/Card/components/CardInput/components/DualBrandSelector.module.scss.js +2 -0
  74. package/dist/es-legacy/components/Card/components/CardInput/components/DualBrandSelector.module.scss.js.map +1 -0
  75. package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
  76. package/dist/es-legacy/components/Card/components/CardInput/utils.js +1 -1
  77. package/dist/es-legacy/components/Card/components/CardInput/utils.js.map +1 -1
  78. package/dist/es-legacy/components/Card/constants.js.map +1 -1
  79. package/dist/es-legacy/components/CustomCard/CustomCard.js +1 -1
  80. package/dist/es-legacy/components/CustomCard/CustomCard.js.map +1 -1
  81. package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js +1 -1
  82. package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  83. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js +1 -1
  84. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  85. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js +1 -1
  86. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  87. package/dist/es-legacy/components/internal/FormFields/Field/Field.js +1 -1
  88. package/dist/es-legacy/components/internal/FormFields/Field/Field.js.map +1 -1
  89. package/dist/es-legacy/components/internal/SecuredFields/SFP/SFPUtils.js +1 -1
  90. package/dist/es-legacy/components/internal/SecuredFields/SFP/SFPUtils.js.map +1 -1
  91. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  92. package/dist/es-legacy/components/internal/SecuredFields/binLookup/extensions.js +1 -1
  93. package/dist/es-legacy/components/internal/SecuredFields/binLookup/extensions.js.map +1 -1
  94. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleBrandFromBinLookup.js +1 -1
  95. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleBrandFromBinLookup.js.map +1 -1
  96. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/partials/processBrand.js +1 -1
  97. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/partials/processBrand.js.map +1 -1
  98. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/cardType.js +1 -1
  99. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/utils/cardType.js.map +1 -1
  100. package/dist/es-legacy/components/internal/SecuredFields/lib/constants.js +1 -1
  101. package/dist/es-legacy/components/internal/SecuredFields/lib/constants.js.map +1 -1
  102. package/dist/es-legacy/core/Analytics/Analytics.js +1 -1
  103. package/dist/es-legacy/core/Analytics/Analytics.js.map +1 -1
  104. package/dist/es-legacy/core/Analytics/AnalyticsService.js.map +1 -1
  105. package/dist/es-legacy/core/Analytics/events/AnalyticsInfoEvent.js +1 -1
  106. package/dist/es-legacy/core/Analytics/events/AnalyticsInfoEvent.js.map +1 -1
  107. package/dist/es-legacy/core/config.js +1 -1
  108. package/dist/es-legacy/core/config.js.map +1 -1
  109. package/dist/es-legacy/utils/createSdkData.js +1 -1
  110. package/dist/es-legacy/utils/createSdkData.js.map +1 -1
  111. package/package.json +3 -3
  112. package/styles/adyen.css +2 -3
  113. package/dist/es/components/internal/FormFields/RadioGroupExtended/RadioButtonIcon.js +0 -2
  114. package/dist/es/components/internal/FormFields/RadioGroupExtended/RadioButtonIcon.js.map +0 -1
  115. package/dist/es/components/internal/FormFields/RadioGroupExtended/RadioGroupExtended.js +0 -2
  116. package/dist/es/components/internal/FormFields/RadioGroupExtended/RadioGroupExtended.js.map +0 -1
  117. package/dist/es-legacy/components/internal/FormFields/RadioGroupExtended/RadioButtonIcon.js +0 -2
  118. package/dist/es-legacy/components/internal/FormFields/RadioGroupExtended/RadioButtonIcon.js.map +0 -1
  119. package/dist/es-legacy/components/internal/FormFields/RadioGroupExtended/RadioGroupExtended.js +0 -2
  120. package/dist/es-legacy/components/internal/FormFields/RadioGroupExtended/RadioGroupExtended.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Analytics.js","sources":["../../../../src/core/Analytics/Analytics.ts"],"sourcesContent":["import { debounce, DEFAULT_DEBOUNCE_TIME_MS } from '../../utils/debounce';\nimport { processAnalyticsData } from './utils';\nimport { AbstractAnalyticsEvent, AnalyticsEventCategory } from './events/AbstractAnalyticsEvent';\nimport Storage from '../../utils/Storage';\nimport { LIBRARY_BUNDLE_TYPE, LIBRARY_VERSION } from '../config';\nimport { AnalyticsEventQueue } from './AnalyticsEventQueue';\nimport type { AnalyticsOptions } from './types';\nimport type { AnalyticsEventPayload, IAnalyticsService, RequestAttemptIdPayload } from './AnalyticsService';\n\nexport interface AnalyticsProps {\n service: IAnalyticsService;\n eventQueue: AnalyticsEventQueue;\n enabled?: boolean;\n analyticsData?: AnalyticsOptions['analyticsData'];\n}\n\nexport interface IAnalytics {\n checkoutAttemptId?: string;\n setUp({ sessionId, checkoutStage, locale }: { sessionId?: string; checkoutStage?: 'precheckout' | 'checkout'; locale?: string }): Promise<void>;\n sendFlavor(flavor: 'dropin' | 'components'): Promise<void>;\n sendAnalytics(event: AbstractAnalyticsEvent): void;\n flush(): void;\n}\n\nexport interface CheckoutAttemptIdSessionStorage {\n id: string;\n timestamp: number;\n}\n\n/**\n * If the checkout attempt ID was stored more than fifteen minutes ago, then we should request a new ID.\n * More here: COWEB-1099\n */\nfunction isSessionCreatedUnderFifteenMinutes(session: CheckoutAttemptIdSessionStorage | null): boolean {\n const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;\n if (!session?.timestamp) return false;\n const fifteenMinutesAgo = Date.now() - FIFTEEN_MINUTES_IN_MS;\n return session.timestamp > fifteenMinutesAgo;\n}\n\nconst ANALYTICS_INFO_DEBOUNCE_DELAY = process.env.NODE_ENV === 'development' ? 5_000 : 10_000;\nconst ANALYTICS_ERROR_AND_LOGS_DEBOUNCE_DELAY = DEFAULT_DEBOUNCE_TIME_MS;\n\nclass Analytics implements IAnalytics {\n private readonly analyticsData?: AnalyticsOptions['analyticsData'];\n private readonly service: IAnalyticsService;\n private readonly eventsQueue: AnalyticsEventQueue;\n private readonly storage = new Storage<CheckoutAttemptIdSessionStorage>('checkout-attempt-id', 'sessionStorage');\n private readonly debouncedSendInfoEvents: () => void;\n private readonly debouncedSendEvents: () => void;\n\n private _checkoutAttemptId?: string;\n private enabled: boolean = true;\n private isFlavorReported = false;\n private pendingFlavor?: 'dropin' | 'components';\n\n constructor({ service, eventQueue, enabled, analyticsData }: AnalyticsProps) {\n this.service = service;\n this.eventsQueue = eventQueue;\n\n this.debouncedSendInfoEvents = debounce(this.sendEvents.bind(this), ANALYTICS_INFO_DEBOUNCE_DELAY);\n this.debouncedSendEvents = debounce(this.sendEvents.bind(this), ANALYTICS_ERROR_AND_LOGS_DEBOUNCE_DELAY);\n\n if (enabled !== undefined) this.enabled = enabled;\n if (analyticsData) this.analyticsData = analyticsData;\n }\n\n public get checkoutAttemptId(): string | undefined {\n return this._checkoutAttemptId;\n }\n\n private set checkoutAttemptId(checkoutAttemptId: string) {\n this._checkoutAttemptId = checkoutAttemptId;\n }\n\n public async setUp({\n sessionId,\n checkoutStage,\n locale\n }: { sessionId?: string; locale?: string; checkoutStage?: 'precheckout' | 'checkout' } = {}): Promise<void> {\n try {\n const checkoutAttemptIdSession = this.storage.get();\n const isSessionReusable = isSessionCreatedUnderFifteenMinutes(checkoutAttemptIdSession);\n\n const { applicationInfo, checkoutAttemptId: checkoutAttemptIdFromPayByLink } = processAnalyticsData(this.analyticsData) ?? {};\n\n const availableCheckoutAttemptId: string | undefined = isSessionReusable ? checkoutAttemptIdSession?.id : checkoutAttemptIdFromPayByLink;\n\n const payload: RequestAttemptIdPayload = {\n version: LIBRARY_VERSION,\n buildType: LIBRARY_BUNDLE_TYPE,\n channel: 'Web',\n platform: 'Web',\n locale,\n referrer: window.location.href,\n screenWidth: window.screen.width,\n checkoutStage: checkoutStage || 'checkout',\n level: this.enabled ? 'all' : 'initial',\n ...(applicationInfo && { applicationInfo }),\n ...(sessionId && { sessionId }),\n ...(availableCheckoutAttemptId && { checkoutAttemptId: availableCheckoutAttemptId })\n };\n\n this.checkoutAttemptId = await this.service.requestCheckoutAttemptId(payload);\n\n this.dispatchPendingAnalytics();\n\n this.storage.set({\n id: this.checkoutAttemptId,\n timestamp: isSessionReusable ? checkoutAttemptIdSession.timestamp : Date.now()\n });\n } catch (error: unknown) {\n this.enabled = false;\n console.warn('Analytics: Error setting up', error);\n }\n }\n\n public sendAnalytics(event: AbstractAnalyticsEvent): void {\n if (!this.enabled) {\n return;\n }\n\n try {\n this.addEventToQueue(event);\n } catch (error: unknown) {\n console.warn('Analytics: Error adding event to queue', error);\n }\n }\n\n /**\n * Sends the integration flavor to the analytics service.\n * If the checkout attempt ID is not available, it will be stored and sent when it becomes available.\n *\n * @param flavor The integration flavor to send.\n * @returns A promise that resolves when the flavor is sent.\n */\n public async sendFlavor(flavor: 'dropin' | 'components'): Promise<void> {\n if (this.isFlavorReported) return;\n\n if (!this.checkoutAttemptId) {\n if (!this.pendingFlavor) this.pendingFlavor = flavor;\n return;\n }\n\n await this.dispatchFlavor(flavor);\n }\n\n private async dispatchFlavor(flavor: 'dropin' | 'components'): Promise<void> {\n if (this.isFlavorReported) return;\n if (!this.checkoutAttemptId) return;\n\n this.isFlavorReported = true;\n\n try {\n await this.service.reportIntegrationFlavor(flavor, this.checkoutAttemptId);\n } catch (error) {\n console.warn('Analytics: Error reporting flavor', error);\n }\n }\n\n public flush(): void {\n void this.sendEvents();\n }\n\n /**\n * Info events don't have high priority, therefore we add a delay in order to dispatch a batch of events\n * Log/Error events are sent almost immediately. There is a debounce mechanism in place but the delay is very minimal\n *\n * @param event\n * @private\n */\n private addEventToQueue(event: AbstractAnalyticsEvent): void {\n this.eventsQueue.add(event);\n\n if (event.getEventCategory() === AnalyticsEventCategory.info) {\n this.debouncedSendInfoEvents();\n } else {\n this.debouncedSendEvents();\n }\n }\n\n private async sendEvents(): Promise<void> {\n if (!this.checkoutAttemptId || !this.enabled) {\n return;\n }\n\n if (!this.eventsQueue.hasEvents) {\n return;\n }\n\n const payload: AnalyticsEventPayload = {\n channel: 'Web',\n platform: 'Web',\n info: this.eventsQueue.infoEvents,\n errors: this.eventsQueue.errorEvents,\n logs: this.eventsQueue.logEvents\n };\n\n this.eventsQueue.clear();\n\n try {\n await this.service.sendEvents(payload, this.checkoutAttemptId);\n } catch (error) {\n console.warn('Analytics: Error sending events', error);\n }\n }\n\n /**\n * Report the integration flavor and send queued analyic events once the attempt ID is available\n */\n private dispatchPendingAnalytics(): void {\n if (!this.isFlavorReported && this.pendingFlavor) {\n const flavor = this.pendingFlavor;\n this.pendingFlavor = undefined;\n void this.dispatchFlavor(flavor);\n }\n\n void this.sendEvents();\n }\n}\n\nexport default Analytics;\n"],"names":["ANALYTICS_ERROR_AND_LOGS_DEBOUNCE_DELAY","DEFAULT_DEBOUNCE_TIME_MS","Analytics","checkoutAttemptId","this","_checkoutAttemptId","setUp","sessionId","checkoutStage","locale","checkoutAttemptIdSession","storage","get","isSessionReusable","session","timestamp","fifteenMinutesAgo","Date","now","isSessionCreatedUnderFifteenMinutes","applicationInfo","checkoutAttemptIdFromPayByLink","processAnalyticsData","analyticsData","availableCheckoutAttemptId","id","payload","version","LIBRARY_VERSION","buildType","LIBRARY_BUNDLE_TYPE","channel","platform","referrer","window","location","href","screenWidth","screen","width","level","enabled","service","requestCheckoutAttemptId","dispatchPendingAnalytics","set","error","console","warn","sendAnalytics","event","addEventToQueue","sendFlavor","flavor","isFlavorReported","dispatchFlavor","pendingFlavor","reportIntegrationFlavor","flush","sendEvents","eventsQueue","add","getEventCategory","AnalyticsEventCategory","info","debouncedSendInfoEvents","debouncedSendEvents","hasEvents","infoEvents","errors","errorEvents","logs","logEvents","clear","undefined","constructor","eventQueue","_define_property","Storage","debounce","bind"],"mappings":"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"}
1
+ {"version":3,"file":"Analytics.js","sources":["../../../../src/core/Analytics/Analytics.ts"],"sourcesContent":["import { debounce, DEFAULT_DEBOUNCE_TIME_MS } from '../../utils/debounce';\nimport { processAnalyticsData } from './utils';\nimport { AbstractAnalyticsEvent, AnalyticsEventCategory } from './events/AbstractAnalyticsEvent';\nimport Storage from '../../utils/Storage';\nimport { CHANNEL, LIBRARY_BUNDLE_TYPE, LIBRARY_VERSION, PLATFORM } from '../config';\nimport { AnalyticsEventQueue } from './AnalyticsEventQueue';\nimport type { AnalyticsOptions } from './types';\nimport type { AnalyticsEventPayload, IAnalyticsService, RequestAttemptIdPayload } from './AnalyticsService';\n\nexport interface AnalyticsProps {\n service: IAnalyticsService;\n eventQueue: AnalyticsEventQueue;\n enabled?: boolean;\n analyticsData?: AnalyticsOptions['analyticsData'];\n}\n\nexport interface IAnalytics {\n checkoutAttemptId?: string;\n setUp({ sessionId, checkoutStage, locale }: { sessionId?: string; checkoutStage?: 'precheckout' | 'checkout'; locale?: string }): Promise<void>;\n sendFlavor(flavor: 'dropin' | 'components'): Promise<void>;\n sendAnalytics(event: AbstractAnalyticsEvent): void;\n flush(): void;\n}\n\nexport interface CheckoutAttemptIdSessionStorage {\n id: string;\n timestamp: number;\n}\n\n/**\n * If the checkout attempt ID was stored more than fifteen minutes ago, then we should request a new ID.\n * More here: COWEB-1099\n */\nfunction isSessionCreatedUnderFifteenMinutes(session: CheckoutAttemptIdSessionStorage | null): boolean {\n const FIFTEEN_MINUTES_IN_MS = 15 * 60 * 1000;\n if (!session?.timestamp) return false;\n const fifteenMinutesAgo = Date.now() - FIFTEEN_MINUTES_IN_MS;\n return session.timestamp > fifteenMinutesAgo;\n}\n\nconst ANALYTICS_INFO_DEBOUNCE_DELAY = process.env.NODE_ENV === 'development' ? 5_000 : 10_000;\nconst ANALYTICS_ERROR_AND_LOGS_DEBOUNCE_DELAY = DEFAULT_DEBOUNCE_TIME_MS;\n\nclass Analytics implements IAnalytics {\n private readonly analyticsData?: AnalyticsOptions['analyticsData'];\n private readonly service: IAnalyticsService;\n private readonly eventsQueue: AnalyticsEventQueue;\n private readonly storage = new Storage<CheckoutAttemptIdSessionStorage>('checkout-attempt-id', 'sessionStorage');\n private readonly debouncedSendInfoEvents: () => void;\n private readonly debouncedSendEvents: () => void;\n\n private _checkoutAttemptId?: string;\n private enabled: boolean = true;\n private isFlavorReported = false;\n private pendingFlavor?: 'dropin' | 'components';\n\n constructor({ service, eventQueue, enabled, analyticsData }: AnalyticsProps) {\n this.service = service;\n this.eventsQueue = eventQueue;\n\n this.debouncedSendInfoEvents = debounce(this.sendEvents.bind(this), ANALYTICS_INFO_DEBOUNCE_DELAY);\n this.debouncedSendEvents = debounce(this.sendEvents.bind(this), ANALYTICS_ERROR_AND_LOGS_DEBOUNCE_DELAY);\n\n if (enabled !== undefined) this.enabled = enabled;\n if (analyticsData) this.analyticsData = analyticsData;\n }\n\n public get checkoutAttemptId(): string | undefined {\n return this._checkoutAttemptId;\n }\n\n private set checkoutAttemptId(checkoutAttemptId: string) {\n this._checkoutAttemptId = checkoutAttemptId;\n }\n\n public async setUp({\n sessionId,\n checkoutStage,\n locale\n }: { sessionId?: string; locale?: string; checkoutStage?: 'precheckout' | 'checkout' } = {}): Promise<void> {\n try {\n const checkoutAttemptIdSession = this.storage.get();\n const isSessionReusable = isSessionCreatedUnderFifteenMinutes(checkoutAttemptIdSession);\n\n const { applicationInfo, checkoutAttemptId: checkoutAttemptIdFromPayByLink } = processAnalyticsData(this.analyticsData) ?? {};\n\n const availableCheckoutAttemptId: string | undefined = isSessionReusable ? checkoutAttemptIdSession?.id : checkoutAttemptIdFromPayByLink;\n\n const payload: RequestAttemptIdPayload = {\n version: LIBRARY_VERSION,\n buildType: LIBRARY_BUNDLE_TYPE,\n channel: CHANNEL.WEB,\n platform: PLATFORM,\n locale,\n referrer: window.location.href,\n screenWidth: window.screen.width,\n checkoutStage: checkoutStage || 'checkout',\n level: this.enabled ? 'all' : 'initial',\n ...(applicationInfo && { applicationInfo }),\n ...(sessionId && { sessionId }),\n ...(availableCheckoutAttemptId && { checkoutAttemptId: availableCheckoutAttemptId })\n };\n\n this.checkoutAttemptId = await this.service.requestCheckoutAttemptId(payload);\n\n this.dispatchPendingAnalytics();\n\n this.storage.set({\n id: this.checkoutAttemptId,\n timestamp: isSessionReusable ? checkoutAttemptIdSession.timestamp : Date.now()\n });\n } catch (error: unknown) {\n this.enabled = false;\n console.warn('Analytics: Error setting up', error);\n }\n }\n\n public sendAnalytics(event: AbstractAnalyticsEvent): void {\n if (!this.enabled) {\n return;\n }\n\n try {\n this.addEventToQueue(event);\n } catch (error: unknown) {\n console.warn('Analytics: Error adding event to queue', error);\n }\n }\n\n /**\n * Sends the integration flavor to the analytics service.\n * If the checkout attempt ID is not available, it will be stored and sent when it becomes available.\n *\n * @param flavor The integration flavor to send.\n * @returns A promise that resolves when the flavor is sent.\n */\n public async sendFlavor(flavor: 'dropin' | 'components'): Promise<void> {\n if (this.isFlavorReported) return;\n\n if (!this.checkoutAttemptId) {\n if (!this.pendingFlavor) this.pendingFlavor = flavor;\n return;\n }\n\n await this.dispatchFlavor(flavor);\n }\n\n private async dispatchFlavor(flavor: 'dropin' | 'components'): Promise<void> {\n if (this.isFlavorReported) return;\n if (!this.checkoutAttemptId) return;\n\n this.isFlavorReported = true;\n\n try {\n await this.service.reportIntegrationFlavor(flavor, this.checkoutAttemptId);\n } catch (error) {\n console.warn('Analytics: Error reporting flavor', error);\n }\n }\n\n public flush(): void {\n void this.sendEvents();\n }\n\n /**\n * Info events don't have high priority, therefore we add a delay in order to dispatch a batch of events\n * Log/Error events are sent almost immediately. There is a debounce mechanism in place but the delay is very minimal\n *\n * @param event\n * @private\n */\n private addEventToQueue(event: AbstractAnalyticsEvent): void {\n this.eventsQueue.add(event);\n\n if (event.getEventCategory() === AnalyticsEventCategory.info) {\n this.debouncedSendInfoEvents();\n } else {\n this.debouncedSendEvents();\n }\n }\n\n private async sendEvents(): Promise<void> {\n if (!this.checkoutAttemptId || !this.enabled) {\n return;\n }\n\n if (!this.eventsQueue.hasEvents) {\n return;\n }\n\n const payload: AnalyticsEventPayload = {\n channel: CHANNEL.WEB,\n platform: PLATFORM,\n info: this.eventsQueue.infoEvents,\n errors: this.eventsQueue.errorEvents,\n logs: this.eventsQueue.logEvents\n };\n\n this.eventsQueue.clear();\n\n try {\n await this.service.sendEvents(payload, this.checkoutAttemptId);\n } catch (error) {\n console.warn('Analytics: Error sending events', error);\n }\n }\n\n /**\n * Report the integration flavor and send queued analyic events once the attempt ID is available\n */\n private dispatchPendingAnalytics(): void {\n if (!this.isFlavorReported && this.pendingFlavor) {\n const flavor = this.pendingFlavor;\n this.pendingFlavor = undefined;\n void this.dispatchFlavor(flavor);\n }\n\n void this.sendEvents();\n }\n}\n\nexport default Analytics;\n"],"names":["ANALYTICS_ERROR_AND_LOGS_DEBOUNCE_DELAY","DEFAULT_DEBOUNCE_TIME_MS","Analytics","checkoutAttemptId","this","_checkoutAttemptId","setUp","sessionId","checkoutStage","locale","checkoutAttemptIdSession","storage","get","isSessionReusable","session","timestamp","fifteenMinutesAgo","Date","now","isSessionCreatedUnderFifteenMinutes","applicationInfo","checkoutAttemptIdFromPayByLink","processAnalyticsData","analyticsData","availableCheckoutAttemptId","id","payload","version","LIBRARY_VERSION","buildType","LIBRARY_BUNDLE_TYPE","channel","CHANNEL","WEB","platform","PLATFORM","referrer","window","location","href","screenWidth","screen","width","level","enabled","service","requestCheckoutAttemptId","dispatchPendingAnalytics","set","error","console","warn","sendAnalytics","event","addEventToQueue","sendFlavor","flavor","isFlavorReported","dispatchFlavor","pendingFlavor","reportIntegrationFlavor","flush","sendEvents","eventsQueue","add","getEventCategory","AnalyticsEventCategory","info","debouncedSendInfoEvents","debouncedSendEvents","hasEvents","infoEvents","errors","errorEvents","logs","logEvents","clear","undefined","constructor","eventQueue","_define_property","Storage","debounce","bind"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsService.js","sources":["../../../../src/core/Analytics/AnalyticsService.ts"],"sourcesContent":["import AdyenCheckoutError from '../Errors/AdyenCheckoutError';\nimport { AbstractAnalyticsEvent } from './events/AbstractAnalyticsEvent';\nimport { HttpOptions, httpPost } from '../Services/http';\nimport type { ApplicationInfo } from './types';\n\nexport interface IAnalyticsService {\n requestCheckoutAttemptId(payload: RequestAttemptIdPayload): Promise<string>;\n sendEvents(payload: AnalyticsEventPayload, checkoutAttemptId: string): Promise<void>;\n reportIntegrationFlavor(flavor: 'dropin' | 'components', checkoutAttemptId: string): Promise<void>;\n}\n\nexport interface RequestAttemptIdPayload {\n version: string;\n channel: 'Web';\n platform: 'Web';\n locale: string;\n checkoutStage: 'precheckout' | 'checkout';\n referrer: string;\n screenWidth: number;\n buildType: string;\n level: 'initial' | 'all';\n sessionId?: string;\n checkoutAttemptId?: string;\n applicationInfo?: ApplicationInfo;\n}\n\nexport interface AnalyticsEventPayload {\n channel: 'Web';\n platform: 'Web';\n info: Array<AbstractAnalyticsEvent>;\n errors: Array<AbstractAnalyticsEvent>;\n logs: Array<AbstractAnalyticsEvent>;\n}\n\nexport interface AnalyticsFlavorPayload {\n flavor: 'dropin' | 'components';\n checkoutAttemptId: string;\n}\n\nconst ANALYTICS_PATH = 'v3/analytics';\n\nclass AnalyticsService implements IAnalyticsService {\n private readonly clientKey: string;\n private readonly analyticsContext: string;\n\n constructor({ clientKey, analyticsContext }: { clientKey: string; analyticsContext: string }) {\n this.clientKey = clientKey;\n this.analyticsContext = analyticsContext;\n }\n\n public async requestCheckoutAttemptId(payload: RequestAttemptIdPayload) {\n const httpOptions: HttpOptions = {\n loadingContext: this.analyticsContext,\n path: `${ANALYTICS_PATH}?clientKey=${this.clientKey}`\n };\n\n try {\n const { checkoutAttemptId } = await httpPost<{ checkoutAttemptId: string }>(httpOptions, payload);\n return checkoutAttemptId;\n } catch (error: unknown) {\n throw new AdyenCheckoutError('NETWORK_ERROR', 'requestCheckoutAttemptId() - failed to get checkout attempt ID', { cause: error });\n }\n }\n\n public async sendEvents(payload: AnalyticsEventPayload, checkoutAttemptId: string): Promise<void> {\n if (!checkoutAttemptId) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'sendEvents() - checkoutAttemptId is required');\n }\n\n // No events to be sent\n if (!payload.info.length && !payload.errors.length && !payload.logs.length) {\n return Promise.resolve();\n }\n\n const httpOptions: HttpOptions = {\n loadingContext: this.analyticsContext,\n path: `${ANALYTICS_PATH}/${checkoutAttemptId}?clientKey=${this.clientKey}`\n };\n\n try {\n await httpPost(httpOptions, payload);\n } catch (error: unknown) {\n throw new AdyenCheckoutError('NETWORK_ERROR', 'sendEvents() - failed to send events', { cause: error });\n }\n }\n\n public async reportIntegrationFlavor(flavor: 'dropin' | 'components', checkoutAttemptId: string): Promise<void> {\n if (!flavor || !checkoutAttemptId) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'reportIntegrationFlavor() - flavor or checkoutAttemptId is required');\n }\n\n const httpOptions: HttpOptions = {\n loadingContext: this.analyticsContext,\n path: `${ANALYTICS_PATH}?clientKey=${this.clientKey}`\n };\n\n const payload: AnalyticsFlavorPayload = {\n flavor,\n checkoutAttemptId\n };\n\n try {\n await httpPost(httpOptions, payload);\n } catch (error: unknown) {\n throw new AdyenCheckoutError('NETWORK_ERROR', 'reportIntegrationFlavor() - failed to send flavor', { cause: error });\n }\n }\n}\n\nexport { AnalyticsService };\n"],"names":["ANALYTICS_PATH","AnalyticsService","requestCheckoutAttemptId","payload","httpOptions","loadingContext","this","analyticsContext","path","clientKey","checkoutAttemptId","httpPost","error","AdyenCheckoutError","cause","sendEvents","info","length","errors","logs","Promise","resolve","reportIntegrationFlavor","flavor","constructor","_define_property"],"mappings":"sNAuCA,MAAMA,EAAiB,eAEvB,MAAMC,EASF,8BAAaC,CAAyBC,GAClC,MAAMC,EAA2B,CAC7BC,eAAgBC,KAAKC,iBACrBC,KAAM,GAAGR,eAA4BM,KAAKG,aAG9C,IACI,MAAMC,kBAAEA,SAA4BC,EAAwCP,EAAaD,GACzF,OAAOO,CACX,CAAE,MAAOE,GACL,MAAM,IAAIC,EAAmB,gBAAiB,iEAAkE,CAAEC,MAAOF,GAC7H,CACJ,CAEA,gBAAaG,CAAWZ,EAAgCO,GACpD,IAAKA,EACD,MAAM,IAAIG,EAAmB,uBAAwB,gDAIzD,IAAKV,EAAQa,KAAKC,SAAWd,EAAQe,OAAOD,SAAWd,EAAQgB,KAAKF,OAChE,OAAOG,QAAQC,UAGnB,MAAMjB,EAA2B,CAC7BC,eAAgBC,KAAKC,iBACrBC,KAAM,GAAGR,KAAkBU,eAA+BJ,KAAKG,aAGnE,UACUE,EAASP,EAAaD,EAChC,CAAE,MAAOS,GACL,MAAM,IAAIC,EAAmB,gBAAiB,uCAAwC,CAAEC,MAAOF,GACnG,CACJ,CAEA,6BAAaU,CAAwBC,EAAiCb,GAClE,IAAKa,IAAWb,EACZ,MAAM,IAAIG,EAAmB,uBAAwB,uEAGzD,MAAMT,EAA2B,CAC7BC,eAAgBC,KAAKC,iBACrBC,KAAM,GAAGR,eAA4BM,KAAKG,aAGxCN,EAAkC,CACpCoB,SACAb,qBAGJ,UACUC,EAASP,EAAaD,EAChC,CAAE,MAAOS,GACL,MAAM,IAAIC,EAAmB,gBAAiB,oDAAqD,CAAEC,MAAOF,GAChH,CACJ,CA7DA,WAAAY,EAAYf,UAAEA,EAASF,iBAAEA,IAHzBkB,EAAAnB,KAAiBG,oBACjBgB,EAAAnB,KAAiBC,2BAGbD,KAAKG,UAAYA,EACjBH,KAAKC,iBAAmBA,CAC5B"}
1
+ {"version":3,"file":"AnalyticsService.js","sources":["../../../../src/core/Analytics/AnalyticsService.ts"],"sourcesContent":["import AdyenCheckoutError from '../Errors/AdyenCheckoutError';\nimport { AbstractAnalyticsEvent } from './events/AbstractAnalyticsEvent';\nimport { HttpOptions, httpPost } from '../Services/http';\nimport type { ApplicationInfo } from './types';\nimport { CHANNEL } from '../config';\n\nexport interface IAnalyticsService {\n requestCheckoutAttemptId(payload: RequestAttemptIdPayload): Promise<string>;\n sendEvents(payload: AnalyticsEventPayload, checkoutAttemptId: string): Promise<void>;\n reportIntegrationFlavor(flavor: 'dropin' | 'components', checkoutAttemptId: string): Promise<void>;\n}\n\nexport interface RequestAttemptIdPayload {\n version: string;\n channel: CHANNEL;\n platform: string;\n locale: string;\n checkoutStage: 'precheckout' | 'checkout';\n referrer: string;\n screenWidth: number;\n buildType: string;\n level: 'initial' | 'all';\n sessionId?: string;\n checkoutAttemptId?: string;\n applicationInfo?: ApplicationInfo;\n}\n\nexport interface AnalyticsEventPayload {\n channel: CHANNEL;\n platform: string;\n info: Array<AbstractAnalyticsEvent>;\n errors: Array<AbstractAnalyticsEvent>;\n logs: Array<AbstractAnalyticsEvent>;\n}\n\nexport interface AnalyticsFlavorPayload {\n flavor: 'dropin' | 'components';\n checkoutAttemptId: string;\n}\n\nconst ANALYTICS_PATH = 'v3/analytics';\n\nclass AnalyticsService implements IAnalyticsService {\n private readonly clientKey: string;\n private readonly analyticsContext: string;\n\n constructor({ clientKey, analyticsContext }: { clientKey: string; analyticsContext: string }) {\n this.clientKey = clientKey;\n this.analyticsContext = analyticsContext;\n }\n\n public async requestCheckoutAttemptId(payload: RequestAttemptIdPayload) {\n const httpOptions: HttpOptions = {\n loadingContext: this.analyticsContext,\n path: `${ANALYTICS_PATH}?clientKey=${this.clientKey}`\n };\n\n try {\n const { checkoutAttemptId } = await httpPost<{ checkoutAttemptId: string }>(httpOptions, payload);\n return checkoutAttemptId;\n } catch (error: unknown) {\n throw new AdyenCheckoutError('NETWORK_ERROR', 'requestCheckoutAttemptId() - failed to get checkout attempt ID', { cause: error });\n }\n }\n\n public async sendEvents(payload: AnalyticsEventPayload, checkoutAttemptId: string): Promise<void> {\n if (!checkoutAttemptId) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'sendEvents() - checkoutAttemptId is required');\n }\n\n // No events to be sent\n if (!payload.info.length && !payload.errors.length && !payload.logs.length) {\n return Promise.resolve();\n }\n\n const httpOptions: HttpOptions = {\n loadingContext: this.analyticsContext,\n path: `${ANALYTICS_PATH}/${checkoutAttemptId}?clientKey=${this.clientKey}`\n };\n\n try {\n await httpPost(httpOptions, payload);\n } catch (error: unknown) {\n throw new AdyenCheckoutError('NETWORK_ERROR', 'sendEvents() - failed to send events', { cause: error });\n }\n }\n\n public async reportIntegrationFlavor(flavor: 'dropin' | 'components', checkoutAttemptId: string): Promise<void> {\n if (!flavor || !checkoutAttemptId) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'reportIntegrationFlavor() - flavor or checkoutAttemptId is required');\n }\n\n const httpOptions: HttpOptions = {\n loadingContext: this.analyticsContext,\n path: `${ANALYTICS_PATH}?clientKey=${this.clientKey}`\n };\n\n const payload: AnalyticsFlavorPayload = {\n flavor,\n checkoutAttemptId\n };\n\n try {\n await httpPost(httpOptions, payload);\n } catch (error: unknown) {\n throw new AdyenCheckoutError('NETWORK_ERROR', 'reportIntegrationFlavor() - failed to send flavor', { cause: error });\n }\n }\n}\n\nexport { AnalyticsService };\n"],"names":["ANALYTICS_PATH","AnalyticsService","requestCheckoutAttemptId","payload","httpOptions","loadingContext","this","analyticsContext","path","clientKey","checkoutAttemptId","httpPost","error","AdyenCheckoutError","cause","sendEvents","info","length","errors","logs","Promise","resolve","reportIntegrationFlavor","flavor","constructor","_define_property"],"mappings":"sNAwCA,MAAMA,EAAiB,eAEvB,MAAMC,EASF,8BAAaC,CAAyBC,GAClC,MAAMC,EAA2B,CAC7BC,eAAgBC,KAAKC,iBACrBC,KAAM,GAAGR,eAA4BM,KAAKG,aAG9C,IACI,MAAMC,kBAAEA,SAA4BC,EAAwCP,EAAaD,GACzF,OAAOO,CACX,CAAE,MAAOE,GACL,MAAM,IAAIC,EAAmB,gBAAiB,iEAAkE,CAAEC,MAAOF,GAC7H,CACJ,CAEA,gBAAaG,CAAWZ,EAAgCO,GACpD,IAAKA,EACD,MAAM,IAAIG,EAAmB,uBAAwB,gDAIzD,IAAKV,EAAQa,KAAKC,SAAWd,EAAQe,OAAOD,SAAWd,EAAQgB,KAAKF,OAChE,OAAOG,QAAQC,UAGnB,MAAMjB,EAA2B,CAC7BC,eAAgBC,KAAKC,iBACrBC,KAAM,GAAGR,KAAkBU,eAA+BJ,KAAKG,aAGnE,UACUE,EAASP,EAAaD,EAChC,CAAE,MAAOS,GACL,MAAM,IAAIC,EAAmB,gBAAiB,uCAAwC,CAAEC,MAAOF,GACnG,CACJ,CAEA,6BAAaU,CAAwBC,EAAiCb,GAClE,IAAKa,IAAWb,EACZ,MAAM,IAAIG,EAAmB,uBAAwB,uEAGzD,MAAMT,EAA2B,CAC7BC,eAAgBC,KAAKC,iBACrBC,KAAM,GAAGR,eAA4BM,KAAKG,aAGxCN,EAAkC,CACpCoB,SACAb,qBAGJ,UACUC,EAASP,EAAaD,EAChC,CAAE,MAAOS,GACL,MAAM,IAAIC,EAAmB,gBAAiB,oDAAqD,CAAEC,MAAOF,GAChH,CACJ,CA7DA,WAAAY,EAAYf,UAAEA,EAASF,iBAAEA,IAHzBkB,EAAAnB,KAAiBG,oBACjBgB,EAAAnB,KAAiBC,2BAGbD,KAAKG,UAAYA,EACjBH,KAAKC,iBAAmBA,CAC5B"}
@@ -1,2 +1,2 @@
1
- import{AbstractAnalyticsEvent as e,AnalyticsEventCategory as t}from"./AbstractAnalyticsEvent.js";import{mapErrorCodesForAnalytics as o}from"../utils.js";function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var i=function(e){return e.instantPaymentButton="instant_payment_button",e.dualBrandButton="dual_brand_button",e.fastlaneSignupConsentToggle="fastlane_signup_consent_toggle",e.otherPaymentMethodButton="otherpaymentmethod_button",e.featuredIssuer="featured_issuer",e.list="list",e.listSearch="list_search",e.qrDownloadButton="qr_download_button",e.segmentedControl="segmented_control",e.cardNumber="card_number",e.expiryDate="expiry_date",e.expiryMonth="expiry_month",e.expiryYear="expiry_year",e.securityCode="security_code",e}({}),d=function(e){return e.clicked="clicked",e.rendered="rendered",e.selected="selected",e.validationError="validationError",e.focus="focus",e.unfocus="unfocus",e.configured="configured",e.displayed="displayed",e.input="input",e.download="download",e.sdkDownloadInitiated="sdkDownloadInitiated",e.sdkDownloadFailed="sdkDownloadFailed",e.sdkDownloadAborted="sdkDownloadAborted",e.sdkDownloadCompleted="sdkDownloadCompleted",e.Initialized="initialized",e.LookupStarted="lookupStarted",e.LookupUserNotFound="lookupUserNotFound",e.OtpStarted="otpStarted",e.OtpSucceeded="otpSucceeded",e.OtpCanceled="otpCanceled",e.OtpFailed="otpFailed",e.AddressSelectorClicked="addressSelectorClicked",e.AddressSelectorClosed="addressSelectorClosed",e.AddressChanged="addressChanged",e}({});class s extends e{get configDataExcludedFields(){return["paymentMethodsConfiguration","elementRef","isDropin","oneClick","storedPaymentMethodId","paymentMethodId","isInstantPayment","type","data","holderName","shopperEmail","email","telephoneNumber","clickToPayConfiguration","modules","i18n"]}createAnalyticsConfigData(e){if(!e)return{};const t={};try{for(const[o,r]of Object.entries(e))this.configDataExcludedFields.includes(o)||("function"==typeof r?t[o]="function":Array.isArray(r)?t[o]=r.join(", ").substring(0,128):t[o]="object"==typeof r&&null!==r?JSON.stringify(r).substring(0,128):r);return t}catch(e){return t}}getEventCategory(){return t.info}constructor(e){super(e.component),r(this,"type",void 0),r(this,"configData",void 0),r(this,"target",void 0),r(this,"issuer",void 0),r(this,"isExpress",void 0),r(this,"expressPage",void 0),r(this,"isStoredPaymentMethod",void 0),r(this,"brand",void 0),r(this,"selectedValue",void 0),r(this,"validationErrorCode",void 0),r(this,"validationErrorMessage",void 0),r(this,"cdnUrl",void 0),this.type=e.type,e.target&&(this.target=e.target),e.issuer&&(this.issuer=e.issuer),void 0!==e.isStoredPaymentMethod&&(this.isStoredPaymentMethod=e.isStoredPaymentMethod),void 0!==e.isExpress&&(this.isExpress=e.isExpress),e.expressPage&&(this.expressPage=e.expressPage),e.brand&&(this.brand=e.brand),e.cdnUrl&&(this.cdnUrl=e.cdnUrl),e.selectedValue&&(this.selectedValue=e.selectedValue),e.validationErrorCode&&(this.validationErrorCode=e.validationErrorCode),e.validationErrorMessage&&(this.validationErrorMessage=e.validationErrorMessage),"rendered"===this.type&&(this.configData=this.createAnalyticsConfigData(e?.configData)),"validationError"===this.type&&(this.validationErrorCode=o(this.validationErrorCode,this.target))}}export{s as AnalyticsInfoEvent,d as InfoEventType,i as UiTarget};
1
+ import{AbstractAnalyticsEvent as e,AnalyticsEventCategory as t}from"./AbstractAnalyticsEvent.js";import{mapErrorCodesForAnalytics as o}from"../utils.js";function i(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var r=function(e){return e.instantPaymentButton="instant_payment_button",e.dualBrandButton="dual_brand_button",e.fastlaneSignupConsentToggle="fastlane_signup_consent_toggle",e.otherPaymentMethodButton="otherpaymentmethod_button",e.featuredIssuer="featured_issuer",e.list="list",e.listSearch="list_search",e.qrDownloadButton="qr_download_button",e.segmentedControl="segmented_control",e.cardNumber="card_number",e.expiryDate="expiry_date",e.expiryMonth="expiry_month",e.expiryYear="expiry_year",e.securityCode="security_code",e}({}),d=function(e){return e.clicked="clicked",e.rendered="rendered",e.selected="selected",e.validationError="validationError",e.focus="focus",e.unfocus="unfocus",e.configured="configured",e.displayed="displayed",e.input="input",e.download="download",e.sdkDownloadInitiated="sdkDownloadInitiated",e.sdkDownloadFailed="sdkDownloadFailed",e.sdkDownloadAborted="sdkDownloadAborted",e.sdkDownloadCompleted="sdkDownloadCompleted",e.Initialized="initialized",e.LookupStarted="lookupStarted",e.LookupUserNotFound="lookupUserNotFound",e.OtpStarted="otpStarted",e.OtpSucceeded="otpSucceeded",e.OtpCanceled="otpCanceled",e.OtpFailed="otpFailed",e.AddressSelectorClicked="addressSelectorClicked",e.AddressSelectorClosed="addressSelectorClosed",e.AddressChanged="addressChanged",e}({});class s extends e{get configDataExcludedFields(){return["paymentMethodsConfiguration","elementRef","isDropin","oneClick","storedPaymentMethodId","paymentMethodId","isInstantPayment","type","data","holderName","shopperEmail","email","telephoneNumber","clickToPayConfiguration","modules","i18n"]}createAnalyticsConfigData(e){if(!e)return{};const t={};try{for(const[o,i]of Object.entries(e))this.configDataExcludedFields.includes(o)||("function"==typeof i?t[o]="function":Array.isArray(i)?t[o]=i.join(", ").substring(0,128):t[o]="object"==typeof i&&null!==i?JSON.stringify(i).substring(0,128):i);return t}catch(e){return t}}getEventCategory(){return t.info}constructor(e){super(e.component),i(this,"type",void 0),i(this,"configData",void 0),i(this,"target",void 0),i(this,"issuer",void 0),i(this,"isExpress",void 0),i(this,"expressPage",void 0),i(this,"isStoredPaymentMethod",void 0),i(this,"brand",void 0),i(this,"selectedValue",void 0),i(this,"validationErrorCode",void 0),i(this,"validationErrorMessage",void 0),i(this,"cdnUrl",void 0),this.type=e.type,e.target&&(this.target=e.target),e.issuer&&(this.issuer=e.issuer),void 0!==e.isStoredPaymentMethod&&(this.isStoredPaymentMethod=e.isStoredPaymentMethod),void 0!==e.isExpress&&(this.isExpress=e.isExpress),e.expressPage&&(this.expressPage=e.expressPage),e.brand&&(this.brand=e.brand),e.cdnUrl&&(this.cdnUrl=e.cdnUrl),e.selectedValue&&(this.selectedValue=e.selectedValue),e.validationErrorCode&&(this.validationErrorCode=e.validationErrorCode),e.validationErrorMessage&&(this.validationErrorMessage=e.validationErrorMessage),"rendered"!==this.type&&"displayed"!==this.type||(this.configData=this.createAnalyticsConfigData(e?.configData)),"validationError"===this.type&&(this.validationErrorCode=o(this.validationErrorCode,this.target))}}export{s as AnalyticsInfoEvent,d as InfoEventType,r as UiTarget};
2
2
  //# sourceMappingURL=AnalyticsInfoEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsInfoEvent.js","sources":["../../../../../src/core/Analytics/events/AnalyticsInfoEvent.ts"],"sourcesContent":["import { AbstractAnalyticsEvent, AnalyticsEventCategory } from './AbstractAnalyticsEvent';\nimport { mapErrorCodesForAnalytics } from '../utils';\n\ntype AnalyticsInfoEventProps = {\n type: InfoEventType;\n component: string;\n target?: UiTarget;\n issuer?: string;\n isExpress?: boolean;\n expressPage?: string;\n isStoredPaymentMethod?: boolean;\n brand?: string;\n validationErrorCode?: string;\n validationErrorMessage?: string;\n configData?: Record<string, any>;\n cdnUrl?: string;\n selectedValue?: string;\n};\n\nexport enum UiTarget {\n instantPaymentButton = 'instant_payment_button',\n dualBrandButton = 'dual_brand_button',\n fastlaneSignupConsentToggle = 'fastlane_signup_consent_toggle',\n otherPaymentMethodButton = 'otherpaymentmethod_button',\n featuredIssuer = 'featured_issuer',\n list = 'list',\n listSearch = 'list_search',\n qrDownloadButton = 'qr_download_button',\n segmentedControl = 'segmented_control',\n cardNumber = 'card_number',\n expiryDate = 'expiry_date',\n expiryMonth = 'expiry_month',\n expiryYear = 'expiry_year',\n securityCode = 'security_code'\n}\n\nexport enum InfoEventType {\n /** When a UI element is clicked */\n clicked = 'clicked',\n /** When a component is rendered in the browser (e.g. render() method is called) */\n rendered = 'rendered',\n /** When a list item is selected (e.g. issuer list) */\n selected = 'selected',\n /** When there is a validation issue with the input */\n validationError = 'validationError',\n /** When input gets focus */\n focus = 'focus',\n /** When input gets unfocus */\n unfocus = 'unfocus',\n /** When iframe fields are configured */\n configured = 'configured',\n /** When a dropdown list is displayed */\n displayed = 'displayed',\n /** When shopper utilizes an input field to search for values (e.g. issuer list) */\n input = 'input',\n /** When shopper clicks to download the image (e.g. QR code image) */\n download = 'download',\n sdkDownloadInitiated = 'sdkDownloadInitiated',\n sdkDownloadFailed = 'sdkDownloadFailed',\n sdkDownloadAborted = 'sdkDownloadAborted',\n sdkDownloadCompleted = 'sdkDownloadCompleted',\n Initialized = 'initialized',\n LookupStarted = 'lookupStarted',\n LookupUserNotFound = 'lookupUserNotFound',\n OtpStarted = 'otpStarted',\n OtpSucceeded = 'otpSucceeded',\n OtpCanceled = 'otpCanceled',\n OtpFailed = 'otpFailed',\n AddressSelectorClicked = 'addressSelectorClicked',\n AddressSelectorClosed = 'addressSelectorClosed',\n AddressChanged = 'addressChanged'\n}\n\nexport class AnalyticsInfoEvent extends AbstractAnalyticsEvent {\n /**\n * Analytics event type\n */\n private readonly type: InfoEventType;\n\n /**\n * Component config data set by the merchant. Sent only in 'rendered' events\n * @private\n */\n private readonly configData?: Record<string, string | boolean>;\n private readonly target?: UiTarget;\n private readonly issuer?: string;\n private readonly isExpress?: boolean;\n private readonly expressPage?: string;\n private readonly isStoredPaymentMethod?: boolean;\n private readonly brand?: string;\n private readonly selectedValue?: string;\n private readonly validationErrorCode?: string;\n private readonly validationErrorMessage?: string;\n\n /**\n * Third party script URL's (e.g. Apple Pay)\n */\n public cdnUrl?: string;\n\n constructor(props: AnalyticsInfoEventProps) {\n super(props.component);\n\n this.type = props.type;\n\n if (props.target) this.target = props.target;\n if (props.issuer) this.issuer = props.issuer;\n if (props.isStoredPaymentMethod !== undefined) this.isStoredPaymentMethod = props.isStoredPaymentMethod;\n if (props.isExpress !== undefined) this.isExpress = props.isExpress;\n if (props.expressPage) this.expressPage = props.expressPage;\n if (props.brand) this.brand = props.brand;\n if (props.cdnUrl) this.cdnUrl = props.cdnUrl;\n if (props.selectedValue) this.selectedValue = props.selectedValue;\n if (props.validationErrorCode) this.validationErrorCode = props.validationErrorCode;\n if (props.validationErrorMessage) this.validationErrorMessage = props.validationErrorMessage;\n if (this.type === InfoEventType.rendered) {\n this.configData = this.createAnalyticsConfigData(props?.configData);\n }\n\n // Some of the more generic validation error codes required combination with target to retrieve a specific code\n if (this.type === InfoEventType.validationError) {\n this.validationErrorCode = mapErrorCodesForAnalytics(this.validationErrorCode, this.target);\n }\n }\n\n /**\n * Set of properties that must not be included when creating the configData for Analytics\n * @private\n */\n private get configDataExcludedFields() {\n const DROPIN_FIELDS = ['paymentMethodsConfiguration'];\n const FIELDS_INJECTED_BY_DROPIN = [\n 'elementRef',\n 'isDropin',\n 'oneClick',\n 'storedPaymentMethodId',\n 'paymentMethodId',\n 'isInstantPayment',\n 'type'\n ];\n const PII_FIELDS = ['data', 'holderName', 'shopperEmail', 'email', 'telephoneNumber', 'clickToPayConfiguration'];\n\n /**\n * TODO: Many unit tests are passing 'modules' as props, which leads to circular structure issue\n * The components must use the 'modules' from the core and not from the props\n */\n const UNIT_TEST_FIELDS = ['modules', 'i18n'];\n\n return [...DROPIN_FIELDS, ...FIELDS_INJECTED_BY_DROPIN, ...PII_FIELDS, ...UNIT_TEST_FIELDS];\n }\n\n /**\n * Creates a serializable analytics payload from the given config object.\n * Functions are replaced with 'function', and objects/arrays are stringified.\n */\n private createAnalyticsConfigData(config: Record<string, any>) {\n if (!config) return {};\n\n const MAX_STRING_LENGTH = 128;\n const result: Record<string, string> = {};\n\n try {\n for (const [key, value] of Object.entries(config)) {\n if (!this.configDataExcludedFields.includes(key)) {\n if (typeof value === 'function') {\n result[key] = 'function';\n } else if (Array.isArray(value)) {\n result[key] = value.join(', ').substring(0, MAX_STRING_LENGTH);\n } else if (typeof value === 'object' && value !== null) {\n result[key] = JSON.stringify(value).substring(0, MAX_STRING_LENGTH);\n } else {\n result[key] = value;\n }\n }\n }\n\n return result;\n } catch (error: unknown) {\n if (process.env.NODE_ENV === 'development') console.warn('AnalyticsInfoEvent: Error when creating configData\\n', error);\n return result;\n }\n }\n\n public getEventCategory(): AnalyticsEventCategory {\n return AnalyticsEventCategory.info;\n }\n}\n"],"names":["UiTarget","InfoEventType","AnalyticsInfoEvent","AbstractAnalyticsEvent","configDataExcludedFields","createAnalyticsConfigData","config","result","key","value","Object","entries","this","includes","Array","isArray","join","substring","JSON","stringify","error","getEventCategory","AnalyticsEventCategory","info","constructor","props","super","component","_define_property","type","configData","target","issuer","isExpress","expressPage","isStoredPaymentMethod","brand","selectedValue","validationErrorCode","validationErrorMessage","cdnUrl","undefined","mapErrorCodesForAnalytics"],"mappings":"iRAmBO,IAAAA,EAAKA,SAAAA,GAAAA,2fAAAA,CAeZ,CAfYA,CAeZ,CAAA,GAEOC,EAAKA,SAAAA,GAAAA,OACyBA,EAAA,QAAA,UAEgDA,EAAA,SAAA,WAE7BA,EAAA,SAAA,WAEAA,EAAA,gBAAA,kBAE1BA,EAAA,MAAA,QAEEA,EAAA,QAAA,UAEUA,EAAA,WAAA,aAEAA,EAAA,UAAA,YAE2CA,EAAA,MAAA,QAEdA,EAAA,SAAA,+gBAnB3DA,CAmCZ,CAnCYA,CAmCZ,CAAA,GAEO,MAAMC,UAA2BC,EAuDpC,4BAAYC,GAmBR,MAAO,CAlBgB,8BAEnB,aACA,WACA,WACA,wBACA,kBACA,mBACA,OAEgB,OAAQ,aAAc,eAAgB,QAAS,kBAAmB,0BAM5D,UAAW,OAGzC,CAMQC,yBAAAA,CAA0BC,GAC9B,IAAKA,EAAQ,MAAO,CAAA,EAEpB,MACMC,EAAiC,CAAA,EAEvC,IACI,IAAK,MAAOC,EAAKC,KAAUC,OAAOC,QAAQL,GACjCM,KAAKR,yBAAyBS,SAASL,KACnB,mBAAVC,EACPF,EAAOC,GAAO,WACPM,MAAMC,QAAQN,GACrBF,EAAOC,GAAOC,EAAMO,KAAK,MAAMC,UAAU,EAT/B,KAWVV,EAAOC,GADiB,iBAAVC,GAAgC,OAAVA,EACtBS,KAAKC,UAAUV,GAAOQ,UAAU,EAXpC,KAaIR,GAK1B,OAAOF,CACX,CAAE,MAAOa,GAEL,OAAOb,CACX,CACJ,CAEOc,gBAAAA,GACH,OAAOC,EAAuBC,IAClC,CArFA,WAAAC,CAAYC,GACRC,MAAMD,EAAME,WAvBhBC,EAAAhB,KAAiBiB,eAMjBD,OAAiBE,qBACjBF,EAAAhB,KAAiBmB,iBACjBH,EAAAhB,KAAiBoB,cAAjB,GACAJ,EAAAhB,KAAiBqB,iBAAjB,GACAL,OAAiBM,mBAAjB,GACAN,EAAAhB,KAAiBuB,6BAAjB,GACAP,OAAiBQ,aAAjB,GACAR,EAAAhB,KAAiByB,wBACjBT,OAAiBU,8BACjBV,EAAAhB,KAAiB2B,iCAKjBX,EAAAhB,KAAO4B,iBAKH5B,KAAKiB,KAAOJ,EAAMI,KAEdJ,EAAMM,SAAQnB,KAAKmB,OAASN,EAAMM,QAClCN,EAAMO,SAAQpB,KAAKoB,OAASP,EAAMO,aACFS,IAAhChB,EAAMU,wBAAqCvB,KAAKuB,sBAAwBV,EAAMU,4BAC1DM,IAApBhB,EAAMQ,YAAyBrB,KAAKqB,UAAYR,EAAMQ,WACtDR,EAAMS,cAAatB,KAAKsB,YAAcT,EAAMS,aAC5CT,EAAMW,QAAOxB,KAAKwB,MAAQX,EAAMW,OAChCX,EAAMe,SAAQ5B,KAAK4B,OAASf,EAAMe,QAClCf,EAAMY,gBAAezB,KAAKyB,cAAgBZ,EAAMY,eAChDZ,EAAMa,sBAAqB1B,KAAK0B,oBAAsBb,EAAMa,qBAC5Db,EAAMc,yBAAwB3B,KAAK2B,uBAAyBd,EAAMc,wBACzD,aAAT3B,KAAKiB,OACLjB,KAAKkB,WAAalB,KAAKP,0BAA0BoB,GAAOK,aAI/C,oBAATlB,KAAKiB,OACLjB,KAAK0B,oBAAsBI,EAA0B9B,KAAK0B,oBAAqB1B,KAAKmB,QAE5F"}
1
+ {"version":3,"file":"AnalyticsInfoEvent.js","sources":["../../../../../src/core/Analytics/events/AnalyticsInfoEvent.ts"],"sourcesContent":["import { AbstractAnalyticsEvent, AnalyticsEventCategory } from './AbstractAnalyticsEvent';\nimport { mapErrorCodesForAnalytics } from '../utils';\n\ntype AnalyticsInfoEventProps = {\n type: InfoEventType;\n component: string;\n target?: UiTarget;\n issuer?: string;\n isExpress?: boolean;\n expressPage?: string;\n isStoredPaymentMethod?: boolean;\n brand?: string;\n validationErrorCode?: string;\n validationErrorMessage?: string;\n configData?: Record<string, any>;\n cdnUrl?: string;\n selectedValue?: string;\n};\n\nexport enum UiTarget {\n instantPaymentButton = 'instant_payment_button',\n dualBrandButton = 'dual_brand_button',\n fastlaneSignupConsentToggle = 'fastlane_signup_consent_toggle',\n otherPaymentMethodButton = 'otherpaymentmethod_button',\n featuredIssuer = 'featured_issuer',\n list = 'list',\n listSearch = 'list_search',\n qrDownloadButton = 'qr_download_button',\n segmentedControl = 'segmented_control',\n cardNumber = 'card_number',\n expiryDate = 'expiry_date',\n expiryMonth = 'expiry_month',\n expiryYear = 'expiry_year',\n securityCode = 'security_code'\n}\n\nexport enum InfoEventType {\n /** When a UI element is clicked */\n clicked = 'clicked',\n /** When a component is rendered in the browser (e.g. render() method is called) */\n rendered = 'rendered',\n /** When a list item is selected (e.g. issuer list) */\n selected = 'selected',\n /** When there is a validation issue with the input */\n validationError = 'validationError',\n /** When input gets focus */\n focus = 'focus',\n /** When input gets unfocus */\n unfocus = 'unfocus',\n /** When iframe fields are configured */\n configured = 'configured',\n /** When a dropdown list is displayed */\n displayed = 'displayed',\n /** When shopper utilizes an input field to search for values (e.g. issuer list) */\n input = 'input',\n /** When shopper clicks to download the image (e.g. QR code image) */\n download = 'download',\n sdkDownloadInitiated = 'sdkDownloadInitiated',\n sdkDownloadFailed = 'sdkDownloadFailed',\n sdkDownloadAborted = 'sdkDownloadAborted',\n sdkDownloadCompleted = 'sdkDownloadCompleted',\n Initialized = 'initialized',\n LookupStarted = 'lookupStarted',\n LookupUserNotFound = 'lookupUserNotFound',\n OtpStarted = 'otpStarted',\n OtpSucceeded = 'otpSucceeded',\n OtpCanceled = 'otpCanceled',\n OtpFailed = 'otpFailed',\n AddressSelectorClicked = 'addressSelectorClicked',\n AddressSelectorClosed = 'addressSelectorClosed',\n AddressChanged = 'addressChanged'\n}\n\nexport class AnalyticsInfoEvent extends AbstractAnalyticsEvent {\n /**\n * Analytics event type\n */\n private readonly type: InfoEventType;\n\n /**\n * Component config data set by the merchant. Sent only in 'rendered' events\n * @private\n */\n private readonly configData?: Record<string, string | boolean>;\n private readonly target?: UiTarget;\n private readonly issuer?: string;\n private readonly isExpress?: boolean;\n private readonly expressPage?: string;\n private readonly isStoredPaymentMethod?: boolean;\n private readonly brand?: string;\n private readonly selectedValue?: string;\n private readonly validationErrorCode?: string;\n private readonly validationErrorMessage?: string;\n\n /**\n * Third party script URL's (e.g. Apple Pay)\n */\n public cdnUrl?: string;\n\n constructor(props: AnalyticsInfoEventProps) {\n super(props.component);\n\n this.type = props.type;\n\n if (props.target) this.target = props.target;\n if (props.issuer) this.issuer = props.issuer;\n if (props.isStoredPaymentMethod !== undefined) this.isStoredPaymentMethod = props.isStoredPaymentMethod;\n if (props.isExpress !== undefined) this.isExpress = props.isExpress;\n if (props.expressPage) this.expressPage = props.expressPage;\n if (props.brand) this.brand = props.brand;\n if (props.cdnUrl) this.cdnUrl = props.cdnUrl;\n if (props.selectedValue) this.selectedValue = props.selectedValue;\n if (props.validationErrorCode) this.validationErrorCode = props.validationErrorCode;\n if (props.validationErrorMessage) this.validationErrorMessage = props.validationErrorMessage;\n if (this.type === InfoEventType.rendered || this.type === InfoEventType.displayed) {\n this.configData = this.createAnalyticsConfigData(props?.configData);\n }\n\n // Some of the more generic validation error codes required combination with target to retrieve a specific code\n if (this.type === InfoEventType.validationError) {\n this.validationErrorCode = mapErrorCodesForAnalytics(this.validationErrorCode, this.target);\n }\n }\n\n /**\n * Set of properties that must not be included when creating the configData for Analytics\n * @private\n */\n private get configDataExcludedFields() {\n const DROPIN_FIELDS = ['paymentMethodsConfiguration'];\n const FIELDS_INJECTED_BY_DROPIN = [\n 'elementRef',\n 'isDropin',\n 'oneClick',\n 'storedPaymentMethodId',\n 'paymentMethodId',\n 'isInstantPayment',\n 'type'\n ];\n const PII_FIELDS = ['data', 'holderName', 'shopperEmail', 'email', 'telephoneNumber', 'clickToPayConfiguration'];\n\n /**\n * TODO: Many unit tests are passing 'modules' as props, which leads to circular structure issue\n * The components must use the 'modules' from the core and not from the props\n */\n const UNIT_TEST_FIELDS = ['modules', 'i18n'];\n\n return [...DROPIN_FIELDS, ...FIELDS_INJECTED_BY_DROPIN, ...PII_FIELDS, ...UNIT_TEST_FIELDS];\n }\n\n /**\n * Creates a serializable analytics payload from the given config object.\n * Functions are replaced with 'function', and objects/arrays are stringified.\n */\n private createAnalyticsConfigData(config: Record<string, any>) {\n if (!config) return {};\n\n const MAX_STRING_LENGTH = 128;\n const result: Record<string, string> = {};\n\n try {\n for (const [key, value] of Object.entries(config)) {\n if (!this.configDataExcludedFields.includes(key)) {\n if (typeof value === 'function') {\n result[key] = 'function';\n } else if (Array.isArray(value)) {\n result[key] = value.join(', ').substring(0, MAX_STRING_LENGTH);\n } else if (typeof value === 'object' && value !== null) {\n result[key] = JSON.stringify(value).substring(0, MAX_STRING_LENGTH);\n } else {\n result[key] = value;\n }\n }\n }\n\n return result;\n } catch (error: unknown) {\n if (process.env.NODE_ENV === 'development') console.warn('AnalyticsInfoEvent: Error when creating configData\\n', error);\n return result;\n }\n }\n\n public getEventCategory(): AnalyticsEventCategory {\n return AnalyticsEventCategory.info;\n }\n}\n"],"names":["UiTarget","InfoEventType","AnalyticsInfoEvent","AbstractAnalyticsEvent","configDataExcludedFields","createAnalyticsConfigData","config","result","key","value","Object","entries","this","includes","Array","isArray","join","substring","JSON","stringify","error","getEventCategory","AnalyticsEventCategory","info","constructor","props","super","component","_define_property","type","configData","target","issuer","isExpress","expressPage","isStoredPaymentMethod","brand","selectedValue","validationErrorCode","validationErrorMessage","cdnUrl","undefined","mapErrorCodesForAnalytics"],"mappings":"iRAmBO,IAAAA,EAAKA,SAAAA,GAAAA,2fAAAA,CAeZ,CAfYA,CAeZ,CAAA,GAEOC,EAAKA,SAAAA,GAAAA,OACyBA,EAAA,QAAA,UAEgDA,EAAA,SAAA,WAE7BA,EAAA,SAAA,WAEAA,EAAA,gBAAA,kBAE1BA,EAAA,MAAA,QAEEA,EAAA,QAAA,UAEUA,EAAA,WAAA,aAEAA,EAAA,UAAA,YAE2CA,EAAA,MAAA,QAEdA,EAAA,SAAA,+gBAnB3DA,CAmCZ,CAnCYA,CAmCZ,CAAA,GAEO,MAAMC,UAA2BC,EAuDpC,4BAAYC,GAmBR,MAAO,CAlBgB,8BAEnB,aACA,WACA,WACA,wBACA,kBACA,mBACA,OAEgB,OAAQ,aAAc,eAAgB,QAAS,kBAAmB,0BAM5D,UAAW,OAGzC,CAMQC,yBAAAA,CAA0BC,GAC9B,IAAKA,EAAQ,MAAO,CAAA,EAEpB,MACMC,EAAiC,CAAA,EAEvC,IACI,IAAK,MAAOC,EAAKC,KAAUC,OAAOC,QAAQL,GACjCM,KAAKR,yBAAyBS,SAASL,KACnB,mBAAVC,EACPF,EAAOC,GAAO,WACPM,MAAMC,QAAQN,GACrBF,EAAOC,GAAOC,EAAMO,KAAK,MAAMC,UAAU,EAT/B,KAWVV,EAAOC,GADiB,iBAAVC,GAAgC,OAAVA,EACtBS,KAAKC,UAAUV,GAAOQ,UAAU,EAXpC,KAaIR,GAK1B,OAAOF,CACX,CAAE,MAAOa,GAEL,OAAOb,CACX,CACJ,CAEOc,gBAAAA,GACH,OAAOC,EAAuBC,IAClC,CArFA,WAAAC,CAAYC,GACRC,MAAMD,EAAME,WAvBhBC,EAAAhB,KAAiBiB,eAMjBD,OAAiBE,qBACjBF,EAAAhB,KAAiBmB,iBACjBH,EAAAhB,KAAiBoB,cAAjB,GACAJ,EAAAhB,KAAiBqB,iBAAjB,GACAL,OAAiBM,mBAAjB,GACAN,EAAAhB,KAAiBuB,6BAAjB,GACAP,OAAiBQ,aAAjB,GACAR,EAAAhB,KAAiByB,wBACjBT,OAAiBU,8BACjBV,EAAAhB,KAAiB2B,iCAKjBX,EAAAhB,KAAO4B,iBAKH5B,KAAKiB,KAAOJ,EAAMI,KAEdJ,EAAMM,SAAQnB,KAAKmB,OAASN,EAAMM,QAClCN,EAAMO,SAAQpB,KAAKoB,OAASP,EAAMO,aACFS,IAAhChB,EAAMU,wBAAqCvB,KAAKuB,sBAAwBV,EAAMU,4BAC1DM,IAApBhB,EAAMQ,YAAyBrB,KAAKqB,UAAYR,EAAMQ,WACtDR,EAAMS,cAAatB,KAAKsB,YAAcT,EAAMS,aAC5CT,EAAMW,QAAOxB,KAAKwB,MAAQX,EAAMW,OAChCX,EAAMe,SAAQ5B,KAAK4B,OAASf,EAAMe,QAClCf,EAAMY,gBAAezB,KAAKyB,cAAgBZ,EAAMY,eAChDZ,EAAMa,sBAAqB1B,KAAK0B,oBAAsBb,EAAMa,qBAC5Db,EAAMc,yBAAwB3B,KAAK2B,uBAAyBd,EAAMc,qCAClE3B,KAAKiB,MAA4C,cAATjB,KAAKiB,OAC7CjB,KAAKkB,WAAalB,KAAKP,0BAA0BoB,GAAOK,aAI/C,oBAATlB,KAAKiB,OACLjB,KAAK0B,oBAAsBI,EAA0B9B,KAAK0B,oBAAqB1B,KAAKmB,QAE5F"}
@@ -1,2 +1,2 @@
1
- function e(e,n){if(null==e)throw new Error(n);return e}const n="https://checkoutshopper-live.adyen.com/checkoutshopper/",o=e("6.34.1","LIBRARY_VERSION is not defined"),t=e("esm","BUNDLE_TYPE is not defined"),r=["amount","secondaryAmount","countryCode","environment","_environmentUrls","loadingContext","i18n","modules","order","session","clientKey","showPayButton","redirectFromTopWhenInIframe","onPaymentCompleted","onPaymentFailed","beforeRedirect","beforeSubmit","onSubmit","onActionHandled","onAdditionalDetails","onChange","onEnterKeyPressed","onError","onBalanceCheck","onOrderCancel","onOrderRequest","onOrderUpdated","onPaymentMethodsRequest"],d=6e4;export{d as DEFAULT_HTTP_TIMEOUT,n as FALLBACK_CONTEXT,r as GENERIC_OPTIONS,t as LIBRARY_BUNDLE_TYPE,o as LIBRARY_VERSION};
1
+ function e(e,n){if(null==e)throw new Error(n);return e}const n="https://checkoutshopper-live.adyen.com/checkoutshopper/",o=e("6.35.0","LIBRARY_VERSION is not defined"),t=e("esm","BUNDLE_TYPE is not defined"),r=["amount","secondaryAmount","countryCode","environment","_environmentUrls","loadingContext","i18n","modules","order","session","clientKey","showPayButton","redirectFromTopWhenInIframe","onPaymentCompleted","onPaymentFailed","beforeRedirect","beforeSubmit","onSubmit","onActionHandled","onAdditionalDetails","onChange","onEnterKeyPressed","onError","onBalanceCheck","onOrderCancel","onOrderRequest","onOrderUpdated","onPaymentMethodsRequest"],i=6e4;var d=function(e){return e.WEB="web",e}({});const a="web";var s=function(e){return e.NATIVE="nativeComponent",e.GENERIC="genericComponent",e}({});export{d as CHANNEL,i as DEFAULT_HTTP_TIMEOUT,n as FALLBACK_CONTEXT,r as GENERIC_OPTIONS,t as LIBRARY_BUNDLE_TYPE,o as LIBRARY_VERSION,s as PAYMENT_METHOD_BEHAVIOR,a as PLATFORM};
2
2
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/core/config.ts"],"sourcesContent":["/**\n * Asserts that a value is defined and throws an error if it is not.\n *\n * @param value The value to check.\n * @param message The error message to throw if the value is undefined.\n * @returns The value if it is defined.\n */\nfunction assertDefined<T>(value: T | undefined, message: string): T {\n if (value === undefined || value === null) {\n throw new Error(message);\n }\n return value;\n}\n\n/**\n * FALLBACK_CONTEXT\n */\nexport const FALLBACK_CONTEXT = 'https://checkoutshopper-live.adyen.com/checkoutshopper/';\n\n/**\n * Library version injected at build time.\n * Always defined - the build process ensures this value is set.\n */\nexport const LIBRARY_VERSION = assertDefined(process.env.VERSION, 'LIBRARY_VERSION is not defined');\n\n/**\n * Bundle type injected at build time.\n * Always defined - the build process ensures this value is set.\n */\nexport const LIBRARY_BUNDLE_TYPE = assertDefined(process.env.BUNDLE_TYPE, 'BUNDLE_TYPE is not defined');\n\nexport const GENERIC_OPTIONS = [\n 'amount',\n 'secondaryAmount',\n 'countryCode',\n 'environment',\n '_environmentUrls',\n 'loadingContext',\n 'i18n',\n 'modules',\n 'order',\n 'session',\n 'clientKey',\n 'showPayButton',\n 'redirectFromTopWhenInIframe',\n\n // Events\n 'onPaymentCompleted',\n 'onPaymentFailed',\n 'beforeRedirect',\n 'beforeSubmit',\n 'onSubmit',\n 'onActionHandled',\n 'onAdditionalDetails',\n 'onChange',\n 'onEnterKeyPressed',\n 'onError',\n 'onBalanceCheck',\n 'onOrderCancel',\n 'onOrderRequest',\n 'onOrderUpdated',\n 'onPaymentMethodsRequest'\n];\n\nexport const DEFAULT_HTTP_TIMEOUT = 60000;\n\nexport default {\n FALLBACK_CONTEXT,\n GENERIC_OPTIONS,\n DEFAULT_HTTP_TIMEOUT\n};\n"],"names":["assertDefined","value","message","Error","FALLBACK_CONTEXT","LIBRARY_VERSION","LIBRARY_BUNDLE_TYPE","GENERIC_OPTIONS","DEFAULT_HTTP_TIMEOUT"],"mappings":"AAOA,SAASA,EAAiBC,EAAsBC,GAC5C,GAAID,QACA,MAAM,IAAIE,MAAMD,GAEpB,OAAOD,CACX,CAKO,MAAMG,EAAmB,0DAMnBC,EAAkBL,EAAc,SAAqB,kCAMrDM,EAAsBN,EAAc,MAAyB,8BAE7DO,EAAkB,CAC3B,SACA,kBACA,cACA,cACA,mBACA,iBACA,OACA,UACA,QACA,UACA,YACA,gBACA,8BAGA,qBACA,kBACA,iBACA,eACA,WACA,kBACA,sBACA,WACA,oBACA,UACA,iBACA,gBACA,iBACA,iBACA,2BAGSC,EAAuB"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/core/config.ts"],"sourcesContent":["/**\n * Asserts that a value is defined and throws an error if it is not.\n *\n * @param value The value to check.\n * @param message The error message to throw if the value is undefined.\n * @returns The value if it is defined.\n */\nfunction assertDefined<T>(value: T | undefined, message: string): T {\n if (value === undefined || value === null) {\n throw new Error(message);\n }\n return value;\n}\n\n/**\n * FALLBACK_CONTEXT\n */\nexport const FALLBACK_CONTEXT = 'https://checkoutshopper-live.adyen.com/checkoutshopper/';\n\n/**\n * Library version injected at build time.\n * Always defined - the build process ensures this value is set.\n */\nexport const LIBRARY_VERSION = assertDefined(process.env.VERSION, 'LIBRARY_VERSION is not defined');\n\n/**\n * Bundle type injected at build time.\n * Always defined - the build process ensures this value is set.\n */\nexport const LIBRARY_BUNDLE_TYPE = assertDefined(process.env.BUNDLE_TYPE, 'BUNDLE_TYPE is not defined');\n\nexport const GENERIC_OPTIONS = [\n 'amount',\n 'secondaryAmount',\n 'countryCode',\n 'environment',\n '_environmentUrls',\n 'loadingContext',\n 'i18n',\n 'modules',\n 'order',\n 'session',\n 'clientKey',\n 'showPayButton',\n 'redirectFromTopWhenInIframe',\n\n // Events\n 'onPaymentCompleted',\n 'onPaymentFailed',\n 'beforeRedirect',\n 'beforeSubmit',\n 'onSubmit',\n 'onActionHandled',\n 'onAdditionalDetails',\n 'onChange',\n 'onEnterKeyPressed',\n 'onError',\n 'onBalanceCheck',\n 'onOrderCancel',\n 'onOrderRequest',\n 'onOrderUpdated',\n 'onPaymentMethodsRequest'\n];\n\nexport const DEFAULT_HTTP_TIMEOUT = 60000;\n\nexport default {\n FALLBACK_CONTEXT,\n GENERIC_OPTIONS,\n DEFAULT_HTTP_TIMEOUT\n};\n\n/**\n * @internal\n */\n\nexport enum CHANNEL {\n WEB = 'web'\n}\n\n/**\n * @internal\n */\nexport const PLATFORM = 'web';\n\n/**\n * How the SDK handles the rendering of a payment method.\n *\n * - NATIVE: The payment method has a dedicated component in the SDK.\n * - GENERIC: The payment method has no dedicated component; it falls back to a generic component (Redirect).\n * @internal\n */\nexport enum PAYMENT_METHOD_BEHAVIOR {\n NATIVE = 'nativeComponent',\n GENERIC = 'genericComponent'\n}\n"],"names":["assertDefined","value","message","Error","FALLBACK_CONTEXT","LIBRARY_VERSION","LIBRARY_BUNDLE_TYPE","GENERIC_OPTIONS","DEFAULT_HTTP_TIMEOUT","CHANNEL","PLATFORM","PAYMENT_METHOD_BEHAVIOR"],"mappings":"AAOA,SAASA,EAAiBC,EAAsBC,GAC5C,GAAID,QACA,MAAM,IAAIE,MAAMD,GAEpB,OAAOD,CACX,CAKO,MAAMG,EAAmB,0DAMnBC,EAAkBL,EAAc,SAAqB,kCAMrDM,EAAsBN,EAAc,MAAyB,8BAE7DO,EAAkB,CAC3B,SACA,kBACA,cACA,cACA,mBACA,iBACA,OACA,UACA,QACA,UACA,YACA,gBACA,8BAGA,qBACA,kBACA,iBACA,eACA,WACA,kBACA,sBACA,WACA,oBACA,UACA,iBACA,gBACA,iBACA,iBACA,2BAGSC,EAAuB,IAY7B,IAAKC,EAAAA,SAAAA,GAAAA,mBAAAA,CAEZ,CAFYA,CAEZ,CAAA,GAKO,MAAMC,EAAW,MASjB,IAAKC,EAAAA,SAAAA,GAAAA,+DAAAA,CAGZ,CAHYA,CAGZ,CAAA"}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="applepayjs" />
2
2
  /// <reference types="googlepay" />
3
3
  import * as preact from 'preact';
4
- import { h, TargetedMouseEvent, Ref, RefObject, Component, FunctionComponent, ComponentChild } from 'preact';
4
+ import { h, TargetedMouseEvent, Ref, RefObject, Component, ComponentChildren, FunctionComponent, ComponentChild } from 'preact';
5
5
  import { OrderResponseBody, OnShippingAddressChangeData, OnShippingOptionsChangeData, OnInitActions } from '@paypal/paypal-js';
6
6
 
7
7
  /**
@@ -1530,7 +1530,7 @@ declare class SecuredFieldsProvider extends Component<SFPProps, SFPState> {
1530
1530
  private handleOnTouchstartIOS;
1531
1531
  private handleKeyPressed;
1532
1532
  state: SFPState;
1533
- props: any;
1533
+ props: SFPProps;
1534
1534
  private issuingCountryCode;
1535
1535
  constructor(props: SFPProps);
1536
1536
  static readonly defaultProps: {
@@ -1574,7 +1574,7 @@ declare class SecuredFieldsProvider extends Component<SFPProps, SFPState> {
1574
1574
  mapErrorsToValidationRuleResult(): SFStateErrorObj;
1575
1575
  processBinLookupResponse(binLookupResponse: BinLookupResponse, resetObject: SingleBrandResetObject): void;
1576
1576
  private setRootNode;
1577
- render(props: any, state: any): any;
1577
+ render(props: any, state: SFPState): any;
1578
1578
  }
1579
1579
 
1580
1580
  type Placeholders = CardPlaceholders | Placeholders$1;
@@ -1582,6 +1582,7 @@ type Placeholders = CardPlaceholders | Placeholders$1;
1582
1582
  * Should be the only props that can be sent to SFP (from CardInput, SecuredFieldsInput, GiftcardComponent)
1583
1583
  */
1584
1584
  interface SFPProps {
1585
+ ref?: Ref<SecuredFieldsProvider>;
1585
1586
  autoFocus?: boolean;
1586
1587
  brands?: string[];
1587
1588
  brandsConfiguration?: CardBrandsConfiguration;
@@ -1590,38 +1591,41 @@ interface SFPProps {
1590
1591
  countryCode?: string;
1591
1592
  forceCompat?: boolean;
1592
1593
  hasKoreanFields?: boolean;
1593
- i18n: Language;
1594
- implementationType?: string;
1594
+ i18n?: Language;
1595
+ implementationType?: 'components' | 'custom';
1595
1596
  keypadFix?: boolean;
1596
1597
  koreanAuthenticationRequired?: boolean;
1597
1598
  legacyInputMode?: boolean;
1598
1599
  loadingContext: string;
1599
1600
  minimumExpiryDate?: string;
1600
- onAdditionalSFConfig?: () => {};
1601
- onAdditionalSFRemoved?: () => {};
1602
- onAllValid?: () => {};
1603
- onAutoComplete?: () => {};
1604
- onBinValue?: () => {};
1605
- onBrand?: () => {};
1606
- onChange: () => {};
1607
- onConfigSuccess?: () => {};
1608
- onError?: () => {};
1609
- onFieldValid?: () => {};
1610
- onFocus?: () => {};
1611
- onLoad?: () => {};
1612
- onStateUpdate: (obj: SFPState) => void;
1613
- onSubmitAnalytics: (event: AbstractAnalyticsEvent) => void;
1601
+ onAdditionalSFConfig?: () => void;
1602
+ onAdditionalSFRemoved?: () => void;
1603
+ onAllValid?: (obj: CardAllValidData) => void;
1604
+ onAutoComplete?: (obj: CardAutoCompleteData) => void;
1605
+ onBinValue?: (obj: CardBinValueData) => void;
1606
+ onBrand?: (obj: CardBrandData) => void;
1607
+ onChange?: (state: SFPState, eventDetails?: OnChangeEventDetails) => void;
1608
+ onConfigSuccess?: (cbObj: CardConfigSuccessData) => void;
1609
+ onError?: (error: AdyenCheckoutError) => void;
1610
+ onFieldValid?: (fieldObj: CardFieldValidData) => void;
1611
+ onFocus?: (obj: CardFocusData) => void;
1612
+ onLoad?: (cbObj: CardLoadData) => void;
1613
+ onStateUpdate?: (obj: SFPState) => void;
1614
+ onSubmitAnalytics?: (event: AbstractAnalyticsEvent) => void;
1614
1615
  handleKeyPress?: (obj: KeyboardEvent) => void;
1615
- rootNode: HTMLElement;
1616
+ rootNode?: HTMLElement;
1616
1617
  showWarnings?: boolean;
1617
1618
  styles?: StylesObject;
1618
1619
  trimTrailingSeparator?: boolean;
1619
1620
  type: string;
1620
- render: () => {};
1621
- resources: Resources;
1622
- maskSecurityCode: boolean;
1623
- exposeExpiryDate: boolean;
1624
- disableIOSArrowKeys: (obj: TouchStartEventObj) => void | null;
1621
+ render?: (helpers: {
1622
+ setRootNode: (input: HTMLElement) => void;
1623
+ setFocusOn: (fieldName: string) => void;
1624
+ }, state: SFPState) => ComponentChildren;
1625
+ resources?: Resources;
1626
+ maskSecurityCode?: boolean;
1627
+ exposeExpiryDate?: boolean;
1628
+ disableIOSArrowKeys?: (obj: TouchStartEventObj) => void | null;
1625
1629
  placeholders?: Placeholders;
1626
1630
  showContextualElement?: boolean;
1627
1631
  }
@@ -1654,12 +1658,18 @@ interface SFPValid {
1654
1658
  encryptedPassword?: boolean;
1655
1659
  encryptedPin?: boolean;
1656
1660
  }
1661
+ interface OnChangeEventDetails {
1662
+ event: string;
1663
+ fieldType?: string;
1664
+ }
1657
1665
 
1658
1666
  /** A list of all the data-cse attributes that relate to securedFields (as found in card, giftcard) */
1659
1667
  declare const ALL_SECURED_FIELDS: readonly ["encryptedCardNumber", "encryptedExpiryDate", "encryptedExpiryMonth", "encryptedExpiryYear", "encryptedSecurityCode", "encryptedPassword"];
1660
1668
  declare const REQUIRED = "required";
1661
1669
  declare const OPTIONAL = "optional";
1662
1670
  declare const HIDDEN = "hidden";
1671
+ declare const BEST_GUESS_MODE = "best-guess";
1672
+ declare const BIN_LOOKUP_MODE = "bin-lookup";
1663
1673
 
1664
1674
  declare global {
1665
1675
  interface Window {
@@ -1668,6 +1678,7 @@ declare global {
1668
1678
  }
1669
1679
  }
1670
1680
  type SFFieldType = (typeof ALL_SECURED_FIELDS)[number];
1681
+ type BrandModeType = typeof BIN_LOOKUP_MODE | typeof BEST_GUESS_MODE;
1671
1682
  interface StylesObject {
1672
1683
  base?: StyleDefinitions;
1673
1684
  error?: StyleDefinitions;
@@ -1727,6 +1738,7 @@ interface CardBinLookupData {
1727
1738
  supportedBrandsRaw?: BrandObject[];
1728
1739
  rootNode?: HTMLElement;
1729
1740
  isReset?: boolean;
1741
+ dualBrandingType?: string;
1730
1742
  }
1731
1743
  interface CardBinValueData {
1732
1744
  type: string;
@@ -1743,6 +1755,7 @@ interface CardBrandData {
1743
1755
  cvcText: string;
1744
1756
  showSocialSecurityNumber?: boolean;
1745
1757
  brandImageUrl?: string;
1758
+ mode?: BrandModeType;
1746
1759
  }
1747
1760
  interface CardConfigSuccessData {
1748
1761
  iframesConfigured: boolean;
@@ -4776,7 +4789,7 @@ declare class EPSElement extends IssuerListContainer {
4776
4789
  formatProps(props: any): any;
4777
4790
  }
4778
4791
 
4779
- interface GiftcardComponentProps {
4792
+ interface GiftcardComponentProps extends Partial<Pick<SFPProps, 'clientKey' | 'loadingContext'>> {
4780
4793
  onChange: (state: any) => void;
4781
4794
  onFocus: (event: any) => void;
4782
4795
  onBlur: (event: any) => void;
@@ -1,2 +1,2 @@
1
- import t from"./base64.js";function e(e,a){const n={schemaVersion:1,createdAt:Date.now(),analytics:{checkoutAttemptId:e},...a&&{riskData:{clientData:a}}};return t.encode(JSON.stringify(n))}export{e as createSdkData};
1
+ import t from"./base64.js";import{LIBRARY_VERSION as e,PLATFORM as o,CHANNEL as n}from"../core/config.js";function r(r,a,c){const i={schemaVersion:1,createdAt:Date.now(),channel:n.WEB,platform:o,sdkVersion:e,paymentMethodBehavior:c,analytics:{checkoutAttemptId:r},...a&&{riskData:{clientData:a}}};return t.encode(JSON.stringify(i))}export{r as createSdkData};
2
2
  //# sourceMappingURL=createSdkData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createSdkData.js","sources":["../../../src/utils/createSdkData.ts"],"sourcesContent":["import base64 from './base64';\n\nexport interface SdkDataObject {\n schemaVersion: number;\n createdAt: number;\n analytics: {\n checkoutAttemptId: string;\n };\n riskData: {\n clientData: string;\n };\n}\n\n/**\n * Creates the sdkData object with analytics and risk information\n * @param checkoutAttemptId - The checkout attempt ID from analytics\n * @param clientData - The client data from risk module\n * @returns Base64 encoded JSON string of the SDK data object\n */\nexport function createSdkData(checkoutAttemptId: string, clientData: string | null): string {\n const sdkDataObject: SdkDataObject = {\n schemaVersion: 1,\n createdAt: Date.now(),\n analytics: {\n checkoutAttemptId\n },\n ...(clientData && { riskData: { clientData } })\n };\n\n return base64.encode(JSON.stringify(sdkDataObject));\n}\n"],"names":["createSdkData","checkoutAttemptId","clientData","sdkDataObject","schemaVersion","createdAt","Date","now","analytics","riskData","base64","encode","JSON","stringify"],"mappings":"2BAmBO,SAASA,EAAcC,EAA2BC,GACrD,MAAMC,EAA+B,CACjCC,cAAe,EACfC,UAAWC,KAAKC,MAChBC,UAAW,CACPP,wBAEAC,GAAc,CAAEO,SAAU,CAAEP,gBAGpC,OAAOQ,EAAOC,OAAOC,KAAKC,UAAUV,GACxC"}
1
+ {"version":3,"file":"createSdkData.js","sources":["../../../src/utils/createSdkData.ts"],"sourcesContent":["import base64 from './base64';\nimport { LIBRARY_VERSION, CHANNEL, PLATFORM, PAYMENT_METHOD_BEHAVIOR } from '../core/config';\nexport interface SdkDataObject {\n schemaVersion: number;\n createdAt: number;\n channel: CHANNEL;\n platform: string;\n sdkVersion: string;\n paymentMethodBehavior: PAYMENT_METHOD_BEHAVIOR;\n analytics: {\n checkoutAttemptId: string;\n };\n riskData: {\n clientData: string;\n };\n}\n\n/**\n * Creates the sdkData object with analytics and risk information\n * @param checkoutAttemptId - The checkout attempt ID from analytics\n * @param clientData - The client data from risk module\n * @returns Base64 encoded JSON string of the SDK data object\n */\nexport function createSdkData(checkoutAttemptId: string, clientData: string | null, paymentMethodBehavior: PAYMENT_METHOD_BEHAVIOR): string {\n const sdkDataObject: SdkDataObject = {\n schemaVersion: 1,\n createdAt: Date.now(),\n channel: CHANNEL.WEB,\n platform: PLATFORM,\n sdkVersion: LIBRARY_VERSION,\n paymentMethodBehavior,\n analytics: {\n checkoutAttemptId\n },\n ...(clientData && { riskData: { clientData } })\n };\n\n return base64.encode(JSON.stringify(sdkDataObject));\n}\n"],"names":["createSdkData","checkoutAttemptId","clientData","paymentMethodBehavior","sdkDataObject","schemaVersion","createdAt","Date","now","channel","CHANNEL","WEB","platform","PLATFORM","sdkVersion","LIBRARY_VERSION","analytics","riskData","base64","encode","JSON","stringify"],"mappings":"0GAuBO,SAASA,EAAcC,EAA2BC,EAA2BC,GAChF,MAAMC,EAA+B,CACjCC,cAAe,EACfC,UAAWC,KAAKC,MAChBC,QAASC,EAAQC,IACjBC,SAAUC,EACVC,WAAYC,EACZZ,wBACAa,UAAW,CACPf,wBAEAC,GAAc,CAAEe,SAAU,CAAEf,gBAGpC,OAAOgB,EAAOC,OAAOC,KAAKC,UAAUjB,GACxC"}
@@ -14,7 +14,8 @@
14
14
  .adyen-checkout-disclaimer__label{color:var(--adyen-sdk-color-label-secondary,#5c687c);display:inline-block;font-size:var(--adyen-sdk-text-caption-font-size,.75rem);font-weight:400;line-height:var(--adyen-sdk-text-caption-line-height,18px);margin-top:var(--adyen-sdk-spacer-070,16px);padding-left:0}[dir=rtl] .adyen-checkout-disclaimer__label{padding-right:0}
15
15
  .adyen-checkout-link{--text-decoration:none;color:var(--adyen-sdk-color-label-highlight,#0070f5);-webkit-text-decoration:var(--text-decoration);text-decoration:var(--text-decoration)}.adyen-checkout-link:focus-visible{outline:none}.adyen-checkout-link:active,.adyen-checkout-link:hover{--text-decoration:underline}.adyen-checkout-link:focus-visible{border-radius:var(--adyen-sdk-border-radius-xs,2px);box-shadow:0 0 0 1px #fff,0 0 0 3px var(--adyen-sdk-focus-ring-color,rgba(0,112,245,.8));transition:.1s cubic-bezier(.785,.135,.15,.86)}
16
16
  .adyen-checkout-brand-wrapper{align-items:center;border-radius:var(--adyen-sdk-border-radius-s,4px);box-shadow:var(--adyen-sdk-shadow-low,0 2px 4px rgba(0,17,44,.04),0 1px 2px rgba(0,17,44,.02));display:flex;justify-content:center;overflow:hidden;position:relative}.adyen-checkout-brand-wrapper--error{display:none}
17
- .adyen-checkout__field--cardNumber .adyen-checkout__input-wrapper{cursor:text}.adyen-checkout__field--cardNumber .adyen-checkout-brand-wrapper{border-radius:var(--adyen-sdk-border-radius-s,4px);margin-right:var(--adyen-sdk-spacer-060,12px)}.adyen-checkout__field--cardNumber .adyen-checkout-card-input__icon{margin-right:0}.adyen-checkout__card__dual-branding__icons{display:flex}.adyen-checkout__card__dual-branding__icons .adyen-checkout__card__cardNumber__brandIcon{opacity:1}
17
+ .adyen-checkout__field--cardNumber .adyen-checkout__input-wrapper{cursor:text}.adyen-checkout__field--cardNumber .adyen-checkout-brand-wrapper{border-radius:var(--adyen-sdk-border-radius-s,4px);margin-right:var(--adyen-sdk-spacer-060,12px)}.adyen-checkout__field--cardNumber .adyen-checkout-card-input__icon{margin-right:0}.adyen-checkout__card__dual-branding__icons{display:flex}.adyen-checkout__card__dual-branding__icons .adyen-checkout__card__cardNumber__brandIcon{opacity:1}.adyen-checkout__card__dual-branding__sr-only{border:0;clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}
18
+ .DualBrandSelector-module_dualBrandSelector__Fz7UW{background-color:var(--adyen-sdk-color-background-tertiary,#eeeff1);border-radius:var(--adyen-sdk-border-radius-m,8px);display:flex;gap:var(--adyen-sdk-spacer-020,4px);margin-right:var(--adyen-sdk-spacer-060,12px);padding:var(--adyen-sdk-spacer-020,4px)}.DualBrandSelector-module_dualBrandSelectorButton__3Dxem{align-items:center;background-color:transparent;border:1px solid transparent;border-radius:var(--adyen-sdk-border-radius-s,4px);cursor:pointer;display:flex;height:24px;justify-content:center;padding:0;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease;width:34px}.DualBrandSelector-module_dualBrandSelectorButton__3Dxem:hover{background-color:var(--adyen-sdk-color-background-primary,#ffffff);border-color:var(--adyen-sdk-color-outline-primary,#dbdee2);box-shadow:0 2px 4px rgba(0,0,0,.3)}.DualBrandSelector-module_dualBrandSelectorButtonSelected__EswTK{background-color:var(--adyen-sdk-color-background-primary,#ffffff);box-shadow:inset 0 0 0 .5px var(--adyen-sdk-color-outline-primary,#dbdee2),0 2px 4px rgba(0,0,0,.5)}.DualBrandSelector-module_dualBrandSelectorIcon__qeN0L{border-radius:var(--adyen-sdk-border-radius-s,4px);height:16px;width:24px}
18
19
  .adyen-checkout__field.adyen-checkout__card__exp-date__input--hidden{display:none}.adyen-checkout__card__exp-cvc__exp-date__input--hidden{justify-content:flex-end}.adyen-checkout__field__exp-date .adyen-checkout__input-wrapper{cursor:text}.adyen-checkout__input-wrapper .adyen-checkout__field__exp-date_hint_wrapper{border-radius:var(--adyen-sdk-border-radius-s,4px);height:18px;margin-right:var(--adyen-sdk-spacer-060,12px);position:absolute;right:0;transition:opacity .1s linear;width:27px}.adyen-checkout__input-wrapper .adyen-checkout__field__exp-date_hint_wrapper.adyen-checkout__field__exp-date_hint_wrapper--hidden{opacity:0}.adyen-checkout__field__exp-date_hint{height:18px;width:27px}
19
20
  .BrandIcons-module_container__FeCxK{align-items:center;display:flex;flex-basis:auto;flex-wrap:wrap;gap:var(--adyen-sdk-spacer-040,8px);margin:var(--adyen-sdk-spacer-020,4px) var(--adyen-sdk-spacer-000,0)}.BrandIcons-module_grid__wb0DE{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--adyen-sdk-spacer-110,40px),1fr))}.BrandIcons-module_smallImgGrid__iCMqT{grid-template-columns:repeat(auto-fill,minmax(var(--adyen-sdk-spacer-090,24px),1fr))}.BrandIcons-module_remainingBrandsLabel__v0FKS{color:var(--adyen-sdk-color-label-secondary,#5c687c);font-size:var(--adyen-sdk-text-body-font-size,.875rem)}.BrandIcons-module_img__Oe3i-{display:block;height:var(--adyen-sdk-spacer-090,24px);padding:0;width:var(--adyen-sdk-spacer-110,40px)}.BrandIcons-module_smallImg__GwOZ0{height:var(--adyen-sdk-spacer-070,16px);width:var(--adyen-sdk-spacer-090,24px)}
20
21
  .adyen-checkout__card__brands{margin-bottom:var(--adyen-sdk-spacer-060,12px);margin-top:calc(var(--adyen-sdk-spacer-040, 8px)*-1)}.adyen-checkout__card__brands--hidden{margin:-8px 0 8px;max-height:0;min-height:0;opacity:0}
@@ -23,8 +24,6 @@
23
24
  .adyen-checkout__store-details{align-items:center;background:var(--adyen-sdk-color-background-primary,#ffffff);border:var(--adyen-sdk-border-width-s,1px) solid var(--adyen-sdk-color-outline-primary,#dbdee2);border-radius:var(--adyen-sdk-border-radius-m,8px);display:flex;gap:var(--adyen-sdk-spacer-060,12px);margin-top:var(--adyen-sdk-spacer-070,16px);padding:var(--adyen-sdk-spacer-060,12px) var(--adyen-sdk-spacer-070,16px)}
24
25
  .adyen-checkout__address-search{position:relative}.adyen-checkout__address-search .adyen-checkout__dropdown__button:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3E%3Cpath fill='%23687282' d='M6.5 11.9a4.5 4.5 0 0 0 2.6-.83l2.77 2.74c.13.13.3.19.48.19.38 0 .65-.29.65-.66a.63.63 0 0 0-.19-.46l-2.75-2.73a4.4 4.4 0 0 0 .92-2.7 4.48 4.48 0 0 0-8.98 0 4.48 4.48 0 0 0 4.5 4.45m0-.96a3.53 3.53 0 0 1-3.53-3.49 3.52 3.52 0 0 1 7.04 0c0 1.9-1.59 3.49-3.52 3.49Z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;content:"";height:var(--adyen-sdk-spacer-070,16px);left:var(--adyen-sdk-spacer-060,12px);position:absolute;width:var(--adyen-sdk-spacer-070,16px)}.adyen-checkout__address-search .adyen-checkout__dropdown__button--active:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' viewBox='0 0 16 16'%3E%3Cpath fill='%2300112c' d='M6.5 11.9a4.5 4.5 0 0 0 2.6-.83l2.77 2.74c.13.13.3.19.48.19.38 0 .65-.29.65-.66a.63.63 0 0 0-.19-.46l-2.75-2.73a4.4 4.4 0 0 0 .92-2.7 4.48 4.48 0 0 0-8.98 0 4.48 4.48 0 0 0 4.5 4.45m0-.96a3.53 3.53 0 0 1-3.53-3.49 3.52 3.52 0 0 1 7.04 0c0 1.9-1.59 3.49-3.52 3.49Z'/%3E%3C/svg%3E");transform:none}.adyen-checkout__address-search .adyen-checkout__filter-input{padding-left:calc(var(--adyen-sdk-spacer-040, 8px) + var(--adyen-sdk-spacer-070, 16px));position:relative}.adyen-checkout__address-search__manual-add{position:absolute;right:0;top:0}.adyen-checkout__address-search__manual-add .adyen-checkout__address-search__manual-add__button{border:0;padding:0}
25
26
  .adyen-checkout__fieldset--address .adyen-checkout__field-group{display:flex;flex-wrap:wrap;gap:var(--adyen-sdk-spacer-070,16px);width:100%}.adyen-checkout__fieldset--address .adyen-checkout__field-group>.adyen-checkout__field{margin-bottom:0}
26
- .adyen-checkout__input-icon{border-radius:var(--adyen-sdk-border-radius-s,4px);height:18px;margin-right:var(--adyen-sdk-spacer-060,12px);width:27px}.adyen-checkout__input-icon--hidden{display:none}.adyen-checkout__input-icon--no-radio-icon{margin-left:calc(var(--adyen-sdk-spacer-090, 24px)*-1)}
27
- .adyen-checkout__radio_group__label--no-radio{color:inherit;display:block;font-size:var(--adyen-sdk-text-body-font-size,.875rem);font-weight:400;line-height:var(--adyen-sdk-text-body-line-height,20px);margin:0;overflow:visible;padding-bottom:0;padding-left:var(--adyen-sdk-spacer-090,24px);position:relative}.adyen-checkout__input-icon--no-radio-icon{border-radius:var(--adyen-sdk-border-radius-s,4px);box-shadow:var(--adyen-sdk-shadow-low,0 2px 4px rgba(0,17,44,.04),0 1px 2px rgba(0,17,44,.02))}.adyen-checkout__radio_group__label--no-radio:hover{border-color:var(--adyen-sdk-color-label-primary,#00112c);cursor:pointer}.adyen-checkout__label--focused .adyen-checkout__radio_group__label--no-radio{color:inherit}.adyen-checkout__radio_group__label--no-radio.adyen-checkout__radio_group__label--no-radio--invalid{color:var(--adyen-sdk-color-outline-critical,#e22d2d)}.adyen-checkout__radio_group--button .adyen-checkout__radio_group__label--no-radio{background-color:var(--adyen-sdk-color-background-primary,#ffffff);border:var(--adyen-sdk-border-width-s,1px) solid var(--adyen-sdk-color-outline-primary,#dbdee2);border-radius:var(--adyen-sdk-border-radius-m,8px);padding:var(--adyen-sdk-spacer-060,12px) var(--adyen-sdk-spacer-060,12px) var(--adyen-sdk-spacer-060,12px) calc(var(--adyen-sdk-spacer-060, 12px) + var(--adyen-sdk-spacer-090, 24px));width:100%}.adyen-checkout__radio_group--button .adyen-checkout__radio_group__input:checked+.adyen-checkout__radio_group__label--no-radio{border-color:var(--adyen-sdk-color-outline-primary-active,#00112c);box-shadow:0 0 0 .5px var(--adyen-sdk-color-outline-primary-active,#00112c)}.adyen-checkout__radio_group--button .adyen-checkout__radio_group__input+.adyen-checkout__radio_group__label--no-radio:hover{border-color:var(--adyen-sdk-color-outline-primary-active,#00112c)}.adyen-checkout__radio_group--button .adyen-checkout__radio_group__input:checked:active+.adyen-checkout__radio_group__label--no-radio,.adyen-checkout__radio_group--button .adyen-checkout__radio_group__input:checked:focus+.adyen-checkout__radio_group__label--no-radio{border-color:var(--adyen-sdk-color-outline-primary-active,#00112c);box-shadow:0 0 0 .5px var(--adyen-sdk-color-outline-primary-active,#00112c)}.adyen-checkout__radio_group--button .adyen-checkout__radio_group__input:checked:focus+.adyen-checkout__radio_group__label--no-radio{outline:var(--adyen-sdk-border-width-m,2px) solid var(--adyen-sdk-color-outline-primary-active,#00112c)}.adyen-checkout__radio_group--button .adyen-checkout__radio_group-extended__label-wrapper{display:flex}.adyen-checkout__radio_group--button .adyen-checkout__radio_group-extended__label-wrapper .adyen-checkout__radio_group-extended__label{width:100%}.adyen-checkout__radio_group--button .adyen-checkout__radio_group-extended__label-wrapper .adyen-checkout-input__inline-validation{display:none;margin-right:var(--adyen-sdk-spacer-000,0)}.adyen-checkout__radio_group--button .adyen-checkout__radio_group-extended__label-wrapper .adyen-checkout-input__inline-validation.adyen-checkout-input__inline-validation--valid{display:block;margin-left:var(--adyen-sdk-spacer-040,8px);margin-top:1px}@media (max-width:480px){.adyen-checkout__radio_group__input-wrapper.adyen-checkout__field--50{min-width:100%}}
28
27
  .adyen-checkout-form-instruction{color:var(--adyen-sdk-color-label-primary,#00112c);font-size:var(--adyen-sdk-text-caption-font-size,.75rem);font-weight:var(--adyen-sdk-text-body-font-weight,400);line-height:var(--adyen-sdk-text-caption-line-height,18px);margin-bottom:var(--adyen-sdk-spacer-070,16px);margin-top:0}[dir=rtl] .adyen-checkout-form-instruction{padding-right:0}
29
28
  .adyen-checkout-toggle{color:inherit;cursor:pointer;display:flex;width:auto}.adyen-checkout-toggle,.adyen-checkout-toggle *,.adyen-checkout-toggle :after,.adyen-checkout-toggle :before,.adyen-checkout-toggle:after,.adyen-checkout-toggle:before{box-sizing:border-box}.adyen-checkout-toggle--disabled{cursor:not-allowed;display:flex}.adyen-checkout-toggle--readonly{pointer-events:none}.adyen-checkout-toggle--label-first{align-items:flex-start;flex-direction:row-reverse;justify-content:flex-end}.adyen-checkout-toggle__input{cursor:inherit;opacity:0;position:absolute}.adyen-checkout-toggle__track{align-items:center;background-color:var(--adyen-sdk-toggle-track-background-color,#ffffff);border:var(--adyen-sdk-toggle-track-border,1px solid #8d95a3);border-radius:var(--adyen-sdk-toggle-track-border-radius,12px);display:flex;height:var(--adyen-sdk-toggle-track-height,20px);min-width:var(--adyen-sdk-toggle-track-width,36px);padding:var(--adyen-sdk-toggle-track-padding,2px 4px);position:relative}.adyen-checkout-toggle__input:focus-visible+.adyen-checkout-toggle__track{box-shadow:0 0 0 1px #fff,0 0 0 3px var(--adyen-sdk-focus-ring-color,rgba(0,112,245,.8));transition:.1s cubic-bezier(.785,.135,.15,.86)}.adyen-checkout-toggle__input:hover:enabled+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-hover-background-color,#f7f7f8);border-color:var(--adyen-sdk-toggle-track-hover-border-color,#6d7789)}.adyen-checkout-toggle__input:active:enabled+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-active-background-color,#eeeff1);border-color:var(--adyen-sdk-toggle-track-active-border-color,#00112c)}.adyen-checkout-toggle__input:disabled+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-disabled-background-color,#f7f7f8);border-color:var(--adyen-sdk-toggle-track-disabled-border-color,#dbdee2);cursor:not-allowed}.adyen-checkout-toggle__input:disabled+.adyen-checkout-toggle__track path{fill:#8d95a3}.adyen-checkout-toggle--readonly .adyen-checkout-toggle__input+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-readonly-background-color,#f7f7f8);border-color:var(--adyen-sdk-toggle-track-readonly-border-color,#dbdee2)}.adyen-checkout-toggle__input:checked+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-toggled-background-color,#00112c);border:var(--adyen-sdk-toggle-track-toggled-border,0);padding:var(--adyen-sdk-toggle-track-toggled-padding,2px)}.adyen-checkout-toggle__input:checked:hover:enabled+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-toggled-hover-background-color,#5c687c)}.adyen-checkout-toggle__input:checked:active:enabled+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-toggled-active-background-color,#8d95a3)}.adyen-checkout-toggle__input:checked:disabled+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-toggled-disabled-background-color,#c0c5cc)}.adyen-checkout-toggle--readonly .adyen-checkout-toggle__input:checked+.adyen-checkout-toggle__track{background-color:var(--adyen-sdk-toggle-track-toggled-readonly-background-color,#c0c5cc)}.adyen-checkout-toggle__handle{align-content:center;background-color:var(--adyen-sdk-toggle-handle-background-color,#00112c);border-radius:var(--adyen-sdk-toggle-handle-border-radius,12px);color:var(--adyen-sdk-toggle-handle-toggled-color,#00112c);display:inline-flex;height:var(--adyen-sdk-toggle-handle-height,12px);justify-content:center;transition:var(--adyen-sdk-toggle-handle-transition,transform .15s cubic-bezier(.2,0,.4,.9));width:var(--adyen-sdk-toggle-handle-width,12px)}.adyen-checkout-toggle__input:disabled+* .adyen-checkout-toggle__handle{background-color:var(--adyen-sdk-toggle-handle-disabled-background-color,#8d95a3);cursor:not-allowed}.adyen-checkout-toggle__input:checked+* .adyen-checkout-toggle__handle{background-color:var(--adyen-sdk-toggle-handle-toggled-background-color,#ffffff);height:var(--adyen-sdk-toggle-handle-toggled-height,16px);transform:translateX(100%);width:var(--adyen-sdk-toggle-handle-toggled-width,16px)}.adyen-checkout-toggle__input:checked:disabled+* .adyen-checkout-toggle__handle{background-color:var(--adyen-sdk-toggle-handle-toggled-disabled-background-color,#eeeff1);color:var(--adyen-sdk-toggle-handle-toggled-disabled-color,#8d95a3);cursor:not-allowed}.adyen-checkout-toggle--readonly .adyen-checkout-toggle__input:checked+* .adyen-checkout-toggle__handle{background-color:var(--adyen-sdk-toggle-handle-toggled-readonly-background-color,#eeeff1)}.adyen-checkout-toggle__label-container{display:flex;flex-direction:column;font-size:var(--adyen-sdk-text-body-font-size,.875rem);font-weight:var(--adyen-sdk-text-body-font-weight,400);line-height:var(--adyen-sdk-text-body-line-height,20px);padding-left:var(--adyen-sdk-toggle-label-padding,16px)}.adyen-checkout-toggle--label-first>.adyen-checkout-toggle__label-container{padding-left:0;padding-right:var(--adyen-sdk-toggle-label-padding,16px)}.adyen-checkout-toggle__label{vertical-align:baseline}.adyen-checkout-toggle__description,.adyen-checkout-toggle__label{font-size:var(--adyen-sdk-text-body-font-size,.875rem);font-weight:var(--adyen-sdk-text-body-font-weight,400);line-height:var(--adyen-sdk-text-body-line-height,20px)}.adyen-checkout-toggle__description{color:var(--adyen-sdk-toggle-description-color,#5c687c);padding-top:var(--adyen-sdk-toggle-description-padding,4px)}
30
29
  .adyen-checkout__modal-wrapper{align-items:center;display:flex;height:100%;left:0;overflow-y:auto;overscroll-behavior-y:contain;padding:var(--adyen-sdk-spacer-090,24px);position:fixed;top:0;visibility:hidden;width:100%;z-index:10}.adyen-checkout__modal-wrapper:before{background:rgba(0,17,44,.5);content:"";height:100%;left:0;opacity:0;position:fixed;top:0;transition:opacity .3s linear;width:100%;z-index:10}.adyen-checkout__modal-wrapper--open{visibility:visible}.adyen-checkout__modal-wrapper--open .adyen-checkout__modal,.adyen-checkout__modal-wrapper--open:before{opacity:1}.adyen-checkout__modal{background-color:var(--adyen-sdk-color-background-primary,#ffffff);border-radius:var(--adyen-sdk-border-radius-m,8px);box-shadow:0 var(--adyen-sdk-spacer-040,8px) var(--adyen-sdk-spacer-090,24px) rgba(0,17,44,.15);margin:auto;opacity:0;padding:var(--adyen-sdk-spacer-070,16px);position:relative;transition:opacity .2s ease,visibility .2s ease;z-index:11}