@adyen/adyen-web 6.29.0 → 6.30.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 (118) hide show
  1. package/dist/cjs/adyen.css +7 -8
  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 +31 -40
  6. package/dist/es/adyen.css +7 -8
  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/types.js.map +1 -1
  11. package/dist/es/components/CustomCard/CustomCard.js +1 -1
  12. package/dist/es/components/CustomCard/CustomCard.js.map +1 -1
  13. package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js +1 -1
  14. package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  15. package/dist/es/components/Giftcard/Giftcard.js +1 -1
  16. package/dist/es/components/Giftcard/Giftcard.js.map +1 -1
  17. package/dist/es/components/Giftcard/components/GiftcardComponent.js +1 -1
  18. package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  19. package/dist/es/components/Iris/components/IrisGenerateQRCode.js +1 -1
  20. package/dist/es/components/Iris/components/IrisGenerateQRCode.js.map +1 -1
  21. package/dist/es/components/Pix/components/PixQRDetails.js +1 -1
  22. package/dist/es/components/Pix/components/PixQRDetails.js.map +1 -1
  23. package/dist/es/components/UPI/UPI.js +1 -1
  24. package/dist/es/components/UPI/UPI.js.map +1 -1
  25. package/dist/es/components/UPI/components/UPIComponent/UPIComponent.js +1 -1
  26. package/dist/es/components/UPI/components/UPIComponent/UPIComponent.js.map +1 -1
  27. package/dist/es/components/UPI/constants.js +1 -1
  28. package/dist/es/components/UPI/constants.js.map +1 -1
  29. package/dist/es/components/components-name-map.js +1 -1
  30. package/dist/es/components/components-name-map.js.map +1 -1
  31. package/dist/es/components/internal/BaseElement/BaseElement.js +1 -1
  32. package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
  33. package/dist/es/components/internal/Countdown/index.js +1 -1
  34. package/dist/es/components/internal/Countdown/index.js.map +1 -1
  35. package/dist/es/components/internal/QRLoader/QRLoader.js +1 -1
  36. package/dist/es/components/internal/QRLoader/QRLoader.js.map +1 -1
  37. package/dist/es/components/internal/QRLoader/QRLoaderDetailsProvider.js.map +1 -1
  38. package/dist/es/components/internal/QRLoader/components/QRDetails.js +1 -1
  39. package/dist/es/components/internal/QRLoader/components/QRDetails.js.map +1 -1
  40. package/dist/es/components/internal/QRLoader/components/QRImage.js +1 -1
  41. package/dist/es/components/internal/QRLoader/components/QRImage.js.map +1 -1
  42. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js +1 -1
  43. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  44. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js +1 -1
  45. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js.map +1 -1
  46. package/dist/es/components/internal/SecuredFields/lib/securedField/AbstractSecuredField.js +1 -1
  47. package/dist/es/components/internal/SecuredFields/lib/securedField/AbstractSecuredField.js.map +1 -1
  48. package/dist/es/components/internal/SecuredFields/lib/securedField/SecuredField.js +1 -1
  49. package/dist/es/components/internal/SecuredFields/lib/securedField/SecuredField.js.map +1 -1
  50. package/dist/es/components/tx-variants.js +1 -1
  51. package/dist/es/components/tx-variants.js.map +1 -1
  52. package/dist/es/core/Analytics/Analytics.js +1 -1
  53. package/dist/es/core/Analytics/Analytics.js.map +1 -1
  54. package/dist/es/core/Analytics/events/AnalyticsErrorEvent.js +1 -1
  55. package/dist/es/core/Analytics/events/AnalyticsErrorEvent.js.map +1 -1
  56. package/dist/es/core/config.js +1 -1
  57. package/dist/es/index.d.ts +31 -40
  58. package/dist/es-legacy/adyen.css +7 -8
  59. package/dist/es-legacy/adyen.css.map +1 -1
  60. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js +1 -1
  61. package/dist/es-legacy/components/Card/components/CardInput/CardInput.js.map +1 -1
  62. package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
  63. package/dist/es-legacy/components/CustomCard/CustomCard.js +1 -1
  64. package/dist/es-legacy/components/CustomCard/CustomCard.js.map +1 -1
  65. package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js +1 -1
  66. package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  67. package/dist/es-legacy/components/Giftcard/Giftcard.js +1 -1
  68. package/dist/es-legacy/components/Giftcard/Giftcard.js.map +1 -1
  69. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js +1 -1
  70. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  71. package/dist/es-legacy/components/Iris/components/IrisGenerateQRCode.js +1 -1
  72. package/dist/es-legacy/components/Iris/components/IrisGenerateQRCode.js.map +1 -1
  73. package/dist/es-legacy/components/Pix/components/PixQRDetails.js +1 -1
  74. package/dist/es-legacy/components/Pix/components/PixQRDetails.js.map +1 -1
  75. package/dist/es-legacy/components/UPI/UPI.js +1 -1
  76. package/dist/es-legacy/components/UPI/UPI.js.map +1 -1
  77. package/dist/es-legacy/components/UPI/components/UPIComponent/UPIComponent.js +1 -1
  78. package/dist/es-legacy/components/UPI/components/UPIComponent/UPIComponent.js.map +1 -1
  79. package/dist/es-legacy/components/UPI/constants.js +1 -1
  80. package/dist/es-legacy/components/UPI/constants.js.map +1 -1
  81. package/dist/es-legacy/components/components-name-map.js +1 -1
  82. package/dist/es-legacy/components/components-name-map.js.map +1 -1
  83. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js +1 -1
  84. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  85. package/dist/es-legacy/components/internal/Countdown/index.js +1 -1
  86. package/dist/es-legacy/components/internal/Countdown/index.js.map +1 -1
  87. package/dist/es-legacy/components/internal/QRLoader/QRLoader.js +1 -1
  88. package/dist/es-legacy/components/internal/QRLoader/QRLoader.js.map +1 -1
  89. package/dist/es-legacy/components/internal/QRLoader/QRLoaderDetailsProvider.js.map +1 -1
  90. package/dist/es-legacy/components/internal/QRLoader/components/QRDetails.js +1 -1
  91. package/dist/es-legacy/components/internal/QRLoader/components/QRDetails.js.map +1 -1
  92. package/dist/es-legacy/components/internal/QRLoader/components/QRImage.js +1 -1
  93. package/dist/es-legacy/components/internal/QRLoader/components/QRImage.js.map +1 -1
  94. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js +1 -1
  95. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  96. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js +1 -1
  97. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/createSecuredFields.js.map +1 -1
  98. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/AbstractSecuredField.js +1 -1
  99. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/AbstractSecuredField.js.map +1 -1
  100. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/SecuredField.js +1 -1
  101. package/dist/es-legacy/components/internal/SecuredFields/lib/securedField/SecuredField.js.map +1 -1
  102. package/dist/es-legacy/components/tx-variants.js +1 -1
  103. package/dist/es-legacy/components/tx-variants.js.map +1 -1
  104. package/dist/es-legacy/core/Analytics/Analytics.js +1 -1
  105. package/dist/es-legacy/core/Analytics/Analytics.js.map +1 -1
  106. package/dist/es-legacy/core/Analytics/events/AnalyticsErrorEvent.js +1 -1
  107. package/dist/es-legacy/core/Analytics/events/AnalyticsErrorEvent.js.map +1 -1
  108. package/dist/es-legacy/core/config.js +1 -1
  109. package/package.json +1 -1
  110. package/styles/adyen.css +7 -8
  111. package/dist/es/components/UPI/components/VpaInput/VpaInput.js +0 -2
  112. package/dist/es/components/UPI/components/VpaInput/VpaInput.js.map +0 -1
  113. package/dist/es/components/UPI/components/VpaInput/validate.js +0 -2
  114. package/dist/es/components/UPI/components/VpaInput/validate.js.map +0 -1
  115. package/dist/es-legacy/components/UPI/components/VpaInput/VpaInput.js +0 -2
  116. package/dist/es-legacy/components/UPI/components/VpaInput/VpaInput.js.map +0 -1
  117. package/dist/es-legacy/components/UPI/components/VpaInput/validate.js +0 -2
  118. package/dist/es-legacy/components/UPI/components/VpaInput/validate.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SecuredField.js","sources":["../../../../../../../src/components/internal/SecuredFields/lib/securedField/SecuredField.ts"],"sourcesContent":["import * as logger from '../utilities/logger';\nimport createIframe from './utils/createIframe';\nimport { removeAllChildren, selectOne } from '../utilities/dom';\nimport { off, on } from '../../../../../utils/listenerUtils';\nimport postMessageToIframe from '../CSF/utils/iframes/postMessageToIframe';\nimport { isChromeVoxPostMsg, isWebpackPostMsg, originCheckPassed } from '../CSF/utils/iframes/postMessageValidation';\nimport {\n CVC_POLICY_HIDDEN,\n CVC_POLICY_OPTIONAL,\n DATE_POLICY_HIDDEN,\n DATE_POLICY_OPTIONAL,\n ENCRYPTED_EXPIRY_DATE,\n ENCRYPTED_EXPIRY_MONTH,\n ENCRYPTED_EXPIRY_YEAR,\n ENCRYPTED_SECURITY_CODE\n} from '../constants';\nimport { generateRandomNumber } from '../utilities/commonUtils';\nimport { CVCPolicyType, DatePolicyType, RtnType_callbackFn, RtnType_noParamVoidFn, RtnType_postMessageListener, SFFeedbackObj } from '../types';\nimport AbstractSecuredField from './AbstractSecuredField';\nimport { AriaConfig, IframeConfigObject, SecuredFieldSetupObject, SecuredFieldCommonProps } from '../types';\nimport { reject } from '../../../../../utils/commonUtils';\nimport { processAriaConfig } from './utils/processAriaConfig';\nimport { processPlaceholders } from './utils/processPlaceholders';\nimport Language from '../../../../../language/Language';\nimport { hasOwnProperty } from '../../../../../utils/hasOwnProperty';\nimport { Placeholders } from '../../SFP/types';\nimport './SecuredField.scss';\n\nconst logPostMsg = false;\nconst doLog = false;\n\nclass SecuredField extends AbstractSecuredField {\n constructor(pSetupObj: SecuredFieldSetupObject, i18n: Language) {\n super();\n\n /**\n * List of props to exclude from being set on this.sfConfig.\n * These props are only required for internal purposes. They do not get sent to the iframe\n */\n const deltaPropsArr: string[] = ['loadingContext', 'holderEl', 'iframeSrc', 'showContextualElement', 'placeholders'];\n\n /**\n * List of props from setup object that will be set on this.sfConfig\n * These props will all end up being sent to the iframe\n */\n const configVarsFromSetUpObj = reject(deltaPropsArr).from(pSetupObj);\n\n // Copy passed setup object values to this.sfConfig\n this.sfConfig = {\n // ...this.sfConfig, // Do we need to do this? Pretty sure we don't\n ...configVarsFromSetUpObj,\n // Break references on iframeUIConfig object so we can overwrite its properties in each securedField instance\n iframeUIConfig: { ...configVarsFromSetUpObj.iframeUIConfig }\n } as SecuredFieldCommonProps;\n\n /**\n * Extract values only needed for init\n */\n const { iframeSrc, placeholders, showContextualElement } = pSetupObj;\n\n /**\n * Store those passed setup object values that are needed in multiple functions\n */\n this.loadingContext = pSetupObj.loadingContext;\n this.holderEl = pSetupObj.holderEl;\n\n /**\n * Initiate other values on 'this' through setters\n */\n this.isValid = false;\n this.iframeContentWindow = null;\n this.numKey = generateRandomNumber();\n this.isEncrypted = false;\n this.hasError = false;\n this.errorType = '';\n this.cvcPolicy = pSetupObj.cvcPolicy;\n this.expiryDatePolicy = pSetupObj.expiryDatePolicy;\n\n if (process.env.NODE_ENV === 'development' && doLog) {\n logger.log(\n '### SecuredField::constructor:: this.sfConfig.fieldType=',\n this.sfConfig.fieldType,\n 'isValid=',\n this._isValid,\n 'numKey=',\n this.numKey\n );\n logger.log('\\n');\n }\n\n return this.init(i18n, iframeSrc, placeholders, showContextualElement);\n }\n\n init(i18n: Language, iframeSrc: string, placeholders: Placeholders, showContextualElement: boolean): SecuredField {\n /**\n * Ensure all fields have a related ariaConfig object containing, at minimum, an iframeTitle property and a (translated) errors object\n */\n const processedAriaConfig: AriaConfig = processAriaConfig(this.sfConfig.txVariant, this.sfConfig.fieldType, i18n, showContextualElement);\n // Set result back onto config object\n this.sfConfig.iframeUIConfig.ariaConfig = processedAriaConfig;\n\n // Set result back onto config object\n this.sfConfig.iframeUIConfig.placeholders = processPlaceholders(this.sfConfig.txVariant, this.sfConfig.fieldType, placeholders);\n\n /**\n * Configure, create & reference iframe and add load listener\n */\n const iframeConfig = {\n src: iframeSrc,\n title: processedAriaConfig[this.sfConfig.fieldType].iframeTitle,\n policy: 'origin'\n };\n\n const iframeEl: HTMLIFrameElement = createIframe(iframeConfig);\n\n // Place the iframe into the holder\n this.holderEl.appendChild(iframeEl);\n\n // Now examine the holder to get an actual DOM node\n const iframe: HTMLIFrameElement = selectOne(this.holderEl, '.js-iframe');\n\n if (iframe) {\n this.iframeContentWindow = iframe.contentWindow;\n\n // Create reference to bound fn (see getters/setters for binding)\n this.iframeOnLoadListener = this.iframeOnLoadListenerFn;\n\n on(iframe, 'load', this.iframeOnLoadListener, false);\n }\n\n this.iframeRef = iframe;\n\n return this;\n }\n\n iframeOnLoadListenerFn(): void {\n // Create reference to bound fn (see getters/setters for binding)\n this.postMessageListener = this.postMessageListenerFn;\n\n // Add general listener for 'message' EVENT - the event that 'powers' postMessage\n on(window, 'message', this.postMessageListener, false);\n\n // Create and send config object to iframe\n const configObj: IframeConfigObject = {\n ...this.sfConfig,\n numKey: this.numKey\n };\n\n if (window._b$dl) console.log('### SecuredField:::: onIframeLoaded:: created configObj=', configObj);\n\n postMessageToIframe(configObj, this.iframeContentWindow, this.loadingContext);\n //--\n\n // Callback to say iframe loaded\n this.onIframeLoadedCallback();\n }\n\n postMessageListenerFn(event: MessageEvent): void {\n // Check message is from expected domain\n if (!originCheckPassed(event, this.loadingContext, this.sfConfig.showWarnings)) {\n return;\n }\n\n // TODO - for debugging purposes this would always be useful to see\n // logger.log('\\n',this.sfConfig.fieldType,'### CSF SecuredField::postMessageListener:: event.data=',event.data);\n\n if (process.env.NODE_ENV === 'development' && logPostMsg) {\n logger.log(\n '\\n###CSF SecuredField::postMessageListener:: DOMAIN & ORIGIN MATCH, NO WEBPACK WEIRDNESS fieldType=',\n this.sfConfig.fieldType,\n 'txVariant=',\n this.sfConfig.txVariant,\n 'this.numKey=',\n this.numKey\n );\n }\n\n // PARSE DATA OBJECT (thus testing if it is a JSON string) - OR TRY & WORK OUT WHY THE PARSING FAILED\n let feedbackObj: SFFeedbackObj;\n\n try {\n feedbackObj = JSON.parse(event.data);\n } catch (e) {\n // Was the message generated by webpack?\n if (isWebpackPostMsg(event)) {\n if (this.sfConfig.showWarnings) logger.log('### SecuredField::postMessageListenerFn:: PARSE FAIL - WEBPACK');\n return;\n }\n\n // Was the message generated by ChromeVox?\n if (isChromeVoxPostMsg(event)) {\n if (this.sfConfig.showWarnings) logger.log('### SecuredField::postMessageListenerFn:: PARSE FAIL - CHROMEVOX');\n return;\n }\n\n if (this.sfConfig.showWarnings)\n logger.log('### SecuredField::postMessageListenerFn:: PARSE FAIL - UNKNOWN REASON: event.data=', event.data);\n return;\n }\n\n // CHECK FOR EXPECTED PROPS\n const hasMainProps: boolean = hasOwnProperty(feedbackObj, 'action') && hasOwnProperty(feedbackObj, 'numKey');\n\n if (!hasMainProps) {\n if (this.sfConfig.showWarnings) logger.warn('WARNING SecuredField :: postMessage listener for iframe :: data mismatch!');\n return;\n }\n\n if (process.env.NODE_ENV === 'development' && logPostMsg) {\n logger.log('### SecuredField::postMessageListener:: feedbackObj.numKey=', feedbackObj.numKey);\n }\n\n if (this.numKey !== feedbackObj.numKey) {\n if (this.sfConfig.showWarnings) {\n logger.warn(\n 'WARNING SecuredField :: postMessage listener for iframe :: data mismatch! (Probably a message from an unrelated securedField)'\n );\n }\n return;\n }\n\n // VALIDATION CHECKS PASSED - DECIDE ON COURSE OF ACTION\n if (process.env.NODE_ENV === 'development' && logPostMsg) {\n logger.log(\n '### SecuredField::postMessageListener:: numkeys match PROCEED WITH POST MESSAGE PROCESSING fieldType=',\n this.sfConfig.fieldType,\n 'txVariant=',\n this.sfConfig.txVariant\n );\n }\n\n switch (feedbackObj.action) {\n case 'encryption':\n this.isValid = true;\n this.onEncryptionCallback(feedbackObj);\n break;\n\n case 'config':\n if (window._b$dl)\n console.log('### SecuredField::postMessageListenerFn:: configured - calling onConfigCallback', feedbackObj.fieldType);\n this.onConfigCallback(feedbackObj);\n break;\n\n case 'focus':\n this.onFocusCallback(feedbackObj);\n break;\n\n case 'binValue':\n this.onBinValueCallback(feedbackObj);\n break;\n\n // iOS ONLY - RE. iOS BUGS AROUND BLUR AND FOCUS EVENTS\n case 'touch':\n this.onTouchstartCallback(feedbackObj);\n break;\n\n // Only happens for Firefox & IE <= 11\n case 'shifttab':\n this.onShiftTabCallback(feedbackObj);\n break;\n\n case 'autoComplete':\n this.onAutoCompleteCallback(feedbackObj);\n break;\n\n case 'enterKeyPressed':\n this.onKeyPressedCallback(feedbackObj);\n break;\n\n /**\n * Validate, because action =\n *\n * 'brand'\n * 'delete'\n * 'luhnCheck'\n * //'incomplete field' (an error that follows from a focus (blur) event)\n * 'incorrectly filled field' (an error that follows from a focus (blur) event) // NEW\n * 'numberKeyPressed' (or date-, month-, year-, cvc-, pin-, or iban- KeyPressed)\n * - since we have no \"error\" action \"...KeyPressed\" is the action type on most error events (other than \"incomplete field\" or \"luhnCheck\")\n * and often these error events representing the clearing of an existing error\n */\n default:\n // If we're validation handling (& not encryption handling) field must be invalid\n this.isValid = false;\n this.onValidationCallback(feedbackObj);\n }\n }\n\n destroy(): void {\n off(window, 'message', this.postMessageListener, false);\n off(this.iframeRef, 'load', this.iframeOnLoadListener, false);\n this.iframeContentWindow = null;\n removeAllChildren(this.holderEl);\n }\n\n /**\n * Returns whether the securedField is hidden OR whether it is optional and not in error\n */\n isOptionalOrHidden(): boolean {\n if (\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_DATE ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_MONTH ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_YEAR\n ) {\n switch (this.expiryDatePolicy) {\n case DATE_POLICY_HIDDEN:\n return true;\n case DATE_POLICY_OPTIONAL:\n return !this.hasError;\n default:\n return false;\n }\n }\n\n if (this.sfConfig.fieldType === ENCRYPTED_SECURITY_CODE) {\n switch (this.cvcPolicy) {\n case CVC_POLICY_HIDDEN:\n return true;\n case CVC_POLICY_OPTIONAL:\n return !this.hasError;\n default:\n return false;\n }\n }\n\n // Any other type of securedField is not optional & can't be hidden\n return false;\n }\n\n // /////// ALLOCATE CALLBACKS /////////\n onIframeLoaded(callbackFn: RtnType_noParamVoidFn): SecuredField {\n this.onIframeLoadedCallback = callbackFn;\n return this;\n }\n\n onEncryption(callbackFn: RtnType_callbackFn): SecuredField {\n this.onEncryptionCallback = callbackFn;\n return this;\n }\n\n onValidation(callbackFn: RtnType_callbackFn): SecuredField {\n this.onValidationCallback = callbackFn;\n return this;\n }\n\n onConfig(callbackFn: RtnType_callbackFn): SecuredField {\n this.onConfigCallback = callbackFn;\n return this;\n }\n\n onFocus(callbackFn: RtnType_callbackFn): SecuredField {\n this.onFocusCallback = callbackFn;\n return this;\n }\n\n onBinValue(callbackFn: RtnType_callbackFn): SecuredField {\n this.onBinValueCallback = callbackFn;\n return this;\n }\n\n onTouchstart(callbackFn: RtnType_callbackFn): SecuredField {\n this.onTouchstartCallback = callbackFn;\n return this;\n }\n\n onShiftTab(callbackFn: RtnType_callbackFn): SecuredField {\n this.onShiftTabCallback = callbackFn;\n return this;\n }\n\n onAutoComplete(callbackFn: RtnType_callbackFn): SecuredField {\n this.onAutoCompleteCallback = callbackFn;\n return this;\n }\n\n onKeyPressed(callbackFn: RtnType_callbackFn): SecuredField {\n this.onKeyPressedCallback = callbackFn;\n return this;\n }\n //------------------------------------\n\n // ///////////// GETTERS/SETTERS //////////////\n\n get errorType(): string {\n return this._errorType;\n }\n set errorType(value: string) {\n this._errorType = value;\n }\n\n get hasError(): boolean {\n return this._hasError;\n }\n set hasError(value: boolean) {\n this._hasError = value;\n }\n\n get isValid(): boolean {\n if (this.sfConfig.fieldType === ENCRYPTED_SECURITY_CODE) {\n switch (this.cvcPolicy) {\n case CVC_POLICY_HIDDEN:\n // If cvc is hidden then the field is always valid\n return true;\n case CVC_POLICY_OPTIONAL:\n // If cvc is optional then the field is always valid UNLESS it has an error\n return !this.hasError;\n default:\n return this._isValid;\n }\n }\n\n if (\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_DATE ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_MONTH ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_YEAR\n ) {\n switch (this.expiryDatePolicy) {\n case DATE_POLICY_HIDDEN:\n // If date is hidden then the field is always valid\n return true;\n case DATE_POLICY_OPTIONAL:\n // If date is optional then the field is always valid UNLESS it has an error\n return !this.hasError;\n default:\n return this._isValid;\n }\n }\n\n return this._isValid;\n }\n set isValid(value: boolean) {\n this._isValid = value;\n }\n\n get cvcPolicy(): CVCPolicyType {\n return this._cvcPolicy;\n }\n\n set cvcPolicy(value: CVCPolicyType) {\n // Only set if this is a CVC field\n if (this.sfConfig.fieldType !== ENCRYPTED_SECURITY_CODE) return;\n\n // Only set if value has changed\n if (value === this.cvcPolicy) return;\n\n if (process.env.NODE_ENV === 'development' && doLog) logger.log(this.sfConfig.fieldType, '### SecuredField::cvcPolicy:: value=', value);\n\n this._cvcPolicy = value;\n\n // If the field has changed status (required <--> not required) AND it's error state was due to an isValidated call\n // NOTE: fixes issue in Components where you first validate and then start typing a maestro number\n // - w/o this and the fix in CSF the maestro PM will never register as valid\n if (this.hasError && this.errorType === 'isValidated') {\n this.hasError = false;\n }\n }\n\n get expiryDatePolicy(): DatePolicyType {\n return this._expiryDatePolicy;\n }\n\n set expiryDatePolicy(value: DatePolicyType) {\n // Only set if this is a date field type of securedField\n if (\n this.sfConfig.fieldType !== ENCRYPTED_EXPIRY_DATE &&\n this.sfConfig.fieldType !== ENCRYPTED_EXPIRY_MONTH &&\n this.sfConfig.fieldType !== ENCRYPTED_EXPIRY_YEAR\n )\n return;\n\n // Only set if value has changed\n if (value === this.expiryDatePolicy) return;\n\n if (process.env.NODE_ENV === 'development' && doLog) logger.log(this.sfConfig.fieldType, '### SecuredField:expiryDatePolicy:: value=', value);\n\n this._expiryDatePolicy = value;\n\n // If the field has changed status (required <--> not required) AND it's error state was due to an isValidated call\n if (this.hasError && this.errorType === 'isValidated') {\n this.hasError = false;\n }\n }\n\n get iframeContentWindow(): Window {\n return this._iframeContentWindow;\n }\n set iframeContentWindow(value: Window) {\n this._iframeContentWindow = value;\n }\n\n get isEncrypted(): boolean {\n return this._isEncrypted;\n }\n set isEncrypted(value: boolean) {\n this._isEncrypted = value;\n }\n\n get numKey(): number {\n return this._numKey;\n }\n set numKey(value: number) {\n this._numKey = value;\n }\n\n // Internal use - way to create listener refs that we can add/remove\n get iframeOnLoadListener(): RtnType_noParamVoidFn {\n return this._iframeOnLoadListener;\n }\n set iframeOnLoadListener(value: RtnType_noParamVoidFn) {\n this._iframeOnLoadListener = value.bind(this);\n }\n\n get postMessageListener(): RtnType_postMessageListener {\n return this._postMessageListener;\n }\n set postMessageListener(value: RtnType_postMessageListener) {\n this._postMessageListener = value.bind(this);\n }\n}\n\nexport default SecuredField;\n"],"names":["SecuredField","AbstractSecuredField","init","i18n","iframeSrc","placeholders","showContextualElement","processedAriaConfig","processAriaConfig","this","sfConfig","txVariant","fieldType","iframeUIConfig","ariaConfig","processPlaceholders","iframeConfig","src","title","iframeTitle","policy","iframeEl","createIframe","holderEl","appendChild","iframe","selectOne","iframeContentWindow","contentWindow","iframeOnLoadListener","iframeOnLoadListenerFn","on","iframeRef","postMessageListener","postMessageListenerFn","window","configObj","numKey","_b$dl","console","log","postMessageToIframe","loadingContext","onIframeLoadedCallback","event","originCheckPassed","showWarnings","feedbackObj","JSON","parse","data","e","isWebpackPostMsg","logger","isChromeVoxPostMsg","hasOwnProperty","action","isValid","onEncryptionCallback","onConfigCallback","onFocusCallback","onBinValueCallback","onTouchstartCallback","onShiftTabCallback","onAutoCompleteCallback","onKeyPressedCallback","onValidationCallback","destroy","off","removeAllChildren","isOptionalOrHidden","ENCRYPTED_EXPIRY_DATE","ENCRYPTED_EXPIRY_MONTH","ENCRYPTED_EXPIRY_YEAR","expiryDatePolicy","DATE_POLICY_HIDDEN","DATE_POLICY_OPTIONAL","hasError","ENCRYPTED_SECURITY_CODE","cvcPolicy","CVC_POLICY_HIDDEN","CVC_POLICY_OPTIONAL","onIframeLoaded","callbackFn","onEncryption","onValidation","onConfig","onFocus","onBinValue","onTouchstart","onShiftTab","onAutoComplete","onKeyPressed","errorType","_errorType","value","_hasError","_isValid","_cvcPolicy","_expiryDatePolicy","_iframeContentWindow","isEncrypted","_isEncrypted","_numKey","_iframeOnLoadListener","bind","_postMessageListener","constructor","pSetupObj","super","configVarsFromSetUpObj","reject","from","generateRandomNumber"],"mappings":"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"}
1
+ {"version":3,"file":"SecuredField.js","sources":["../../../../../../../src/components/internal/SecuredFields/lib/securedField/SecuredField.ts"],"sourcesContent":["import * as logger from '../utilities/logger';\nimport createIframe from './utils/createIframe';\nimport { removeAllChildren, selectOne } from '../utilities/dom';\nimport { off, on } from '../../../../../utils/listenerUtils';\nimport postMessageToIframe from '../CSF/utils/iframes/postMessageToIframe';\nimport { isChromeVoxPostMsg, isWebpackPostMsg, originCheckPassed } from '../CSF/utils/iframes/postMessageValidation';\nimport {\n CVC_POLICY_HIDDEN,\n CVC_POLICY_OPTIONAL,\n DATE_POLICY_HIDDEN,\n DATE_POLICY_OPTIONAL,\n ENCRYPTED_EXPIRY_DATE,\n ENCRYPTED_EXPIRY_MONTH,\n ENCRYPTED_EXPIRY_YEAR,\n ENCRYPTED_SECURITY_CODE\n} from '../constants';\nimport { generateRandomNumber } from '../utilities/commonUtils';\nimport { CVCPolicyType, DatePolicyType, RtnType_callbackFn, RtnType_noParamVoidFn, RtnType_postMessageListener, SFFeedbackObj } from '../types';\nimport AbstractSecuredField from './AbstractSecuredField';\nimport { AriaConfig, IframeConfigObject, SecuredFieldSetupObject, SecuredFieldCommonProps } from '../types';\nimport { reject } from '../../../../../utils/commonUtils';\nimport { processAriaConfig } from './utils/processAriaConfig';\nimport { processPlaceholders } from './utils/processPlaceholders';\nimport Language from '../../../../../language/Language';\nimport { hasOwnProperty } from '../../../../../utils/hasOwnProperty';\nimport { Placeholders } from '../../SFP/types';\nimport './SecuredField.scss';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../../../../core/Analytics/events/AnalyticsErrorEvent';\n\nconst logPostMsg = false;\nconst doLog = false;\n\nclass SecuredField extends AbstractSecuredField {\n constructor(pSetupObj: SecuredFieldSetupObject, i18n: Language) {\n super();\n\n /**\n * List of props to exclude from being set on this.sfConfig.\n * These props are only required for internal purposes. They do not get sent to the iframe\n */\n const deltaPropsArr: string[] = ['loadingContext', 'holderEl', 'iframeSrc', 'showContextualElement', 'placeholders'];\n\n /**\n * List of props from setup object that will be set on this.sfConfig\n * These props will all end up being sent to the iframe\n */\n const configVarsFromSetUpObj = reject(deltaPropsArr).from(pSetupObj);\n\n // Copy passed setup object values to this.sfConfig\n this.sfConfig = {\n // ...this.sfConfig, // Do we need to do this? Pretty sure we don't\n ...configVarsFromSetUpObj,\n // Break references on iframeUIConfig object so we can overwrite its properties in each securedField instance\n iframeUIConfig: { ...configVarsFromSetUpObj.iframeUIConfig }\n } as SecuredFieldCommonProps;\n\n /**\n * Extract values only needed for init\n */\n const { iframeSrc, placeholders, showContextualElement } = pSetupObj;\n\n /**\n * Store those passed setup object values that are needed in multiple functions\n */\n this.loadingContext = pSetupObj.loadingContext;\n this.holderEl = pSetupObj.holderEl;\n this.submitAnalytics = pSetupObj.submitAnalytics;\n this.componentType = pSetupObj.componentType;\n\n /**\n * Initiate other values on 'this' through setters\n */\n this.isValid = false;\n this.iframeContentWindow = null;\n this.numKey = generateRandomNumber();\n this.isEncrypted = false;\n this.hasError = false;\n this.errorType = '';\n this.cvcPolicy = pSetupObj.cvcPolicy;\n this.expiryDatePolicy = pSetupObj.expiryDatePolicy;\n\n if (process.env.NODE_ENV === 'development' && doLog) {\n logger.log(\n '### SecuredField::constructor:: this.sfConfig.fieldType=',\n this.sfConfig.fieldType,\n 'isValid=',\n this._isValid,\n 'numKey=',\n this.numKey\n );\n logger.log('\\n');\n }\n\n return this.init(i18n, iframeSrc, placeholders, showContextualElement);\n }\n\n init(i18n: Language, iframeSrc: string, placeholders: Placeholders, showContextualElement: boolean): SecuredField {\n /**\n * Ensure all fields have a related ariaConfig object containing, at minimum, an iframeTitle property and a (translated) errors object\n */\n const processedAriaConfig: AriaConfig = processAriaConfig(this.sfConfig.txVariant, this.sfConfig.fieldType, i18n, showContextualElement);\n // Set result back onto config object\n this.sfConfig.iframeUIConfig.ariaConfig = processedAriaConfig;\n\n // Set result back onto config object\n this.sfConfig.iframeUIConfig.placeholders = processPlaceholders(this.sfConfig.txVariant, this.sfConfig.fieldType, placeholders);\n\n /**\n * Configure, create & reference iframe and add load listener\n */\n const iframeConfig = {\n src: iframeSrc,\n title: processedAriaConfig[this.sfConfig.fieldType].iframeTitle,\n policy: 'origin'\n };\n\n const iframeEl: HTMLIFrameElement = createIframe(iframeConfig);\n\n // Place the iframe into the holder\n this.holderEl.appendChild(iframeEl);\n\n // Now examine the holder to get an actual DOM node\n const iframe: HTMLIFrameElement = selectOne(this.holderEl, '.js-iframe');\n\n if (iframe) {\n if (!iframe.contentWindow) {\n // Warn the dev\n console.error(\n 'ERROR: Trying to initialise a securedField iframe, but the iframe.contentWindow is undefined. Are you sure the element into which the Card component is being mounted already exists in the DOM *before* the Card component is mounted?'\n );\n // Log the error\n const event = new AnalyticsErrorEvent({\n component: this.componentType,\n code: ErrorEventCode.SECURED_FIELDS_IFRAME_CONTENT_WINDOW_NOT_FOUND,\n errorType: ErrorEventType.implementation,\n message: `Trying to initialise an iframe for ${this.sfConfig.fieldType}, but the iframe.contentWindow is undefined`\n });\n\n this.submitAnalytics?.(event);\n }\n\n this.iframeContentWindow = iframe.contentWindow;\n\n // Create reference to bound fn (see getters/setters for binding)\n this.iframeOnLoadListener = this.iframeOnLoadListenerFn;\n\n on(iframe, 'load', this.iframeOnLoadListener, false);\n }\n\n this.iframeRef = iframe;\n\n return this;\n }\n\n iframeOnLoadListenerFn(): void {\n // Create reference to bound fn (see getters/setters for binding)\n this.postMessageListener = this.postMessageListenerFn;\n\n // Add general listener for 'message' EVENT - the event that 'powers' postMessage\n on(window, 'message', this.postMessageListener, false);\n\n // Create and send config object to iframe\n const configObj: IframeConfigObject = {\n ...this.sfConfig,\n numKey: this.numKey\n };\n\n if (window._b$dl) console.log('### SecuredField:::: onIframeLoaded:: created configObj=', configObj);\n\n postMessageToIframe(configObj, this.iframeContentWindow, this.loadingContext);\n //--\n\n // Callback to say iframe loaded\n this.onIframeLoadedCallback();\n }\n\n postMessageListenerFn(event: MessageEvent): void {\n // Check message is from expected domain\n if (!originCheckPassed(event, this.loadingContext, this.sfConfig.showWarnings)) {\n return;\n }\n\n // TODO - for debugging purposes this would always be useful to see\n // logger.log('\\n',this.sfConfig.fieldType,'### CSF SecuredField::postMessageListener:: event.data=',event.data);\n\n if (process.env.NODE_ENV === 'development' && logPostMsg) {\n logger.log(\n '\\n###CSF SecuredField::postMessageListener:: DOMAIN & ORIGIN MATCH, NO WEBPACK WEIRDNESS fieldType=',\n this.sfConfig.fieldType,\n 'txVariant=',\n this.sfConfig.txVariant,\n 'this.numKey=',\n this.numKey\n );\n }\n\n // PARSE DATA OBJECT (thus testing if it is a JSON string) - OR TRY & WORK OUT WHY THE PARSING FAILED\n let feedbackObj: SFFeedbackObj;\n\n try {\n feedbackObj = JSON.parse(event.data);\n } catch (e) {\n // Was the message generated by webpack?\n if (isWebpackPostMsg(event)) {\n if (this.sfConfig.showWarnings) logger.log('### SecuredField::postMessageListenerFn:: PARSE FAIL - WEBPACK');\n return;\n }\n\n // Was the message generated by ChromeVox?\n if (isChromeVoxPostMsg(event)) {\n if (this.sfConfig.showWarnings) logger.log('### SecuredField::postMessageListenerFn:: PARSE FAIL - CHROMEVOX');\n return;\n }\n\n if (this.sfConfig.showWarnings)\n logger.log('### SecuredField::postMessageListenerFn:: PARSE FAIL - UNKNOWN REASON: event.data=', event.data);\n return;\n }\n\n // CHECK FOR EXPECTED PROPS\n const hasMainProps: boolean = hasOwnProperty(feedbackObj, 'action') && hasOwnProperty(feedbackObj, 'numKey');\n\n if (!hasMainProps) {\n if (this.sfConfig.showWarnings) logger.warn('WARNING SecuredField :: postMessage listener for iframe :: data mismatch!');\n return;\n }\n\n if (process.env.NODE_ENV === 'development' && logPostMsg) {\n logger.log('### SecuredField::postMessageListener:: feedbackObj.numKey=', feedbackObj.numKey);\n }\n\n if (this.numKey !== feedbackObj.numKey) {\n if (this.sfConfig.showWarnings) {\n logger.warn(\n 'WARNING SecuredField :: postMessage listener for iframe :: data mismatch! (Probably a message from an unrelated securedField)'\n );\n }\n return;\n }\n\n // VALIDATION CHECKS PASSED - DECIDE ON COURSE OF ACTION\n if (process.env.NODE_ENV === 'development' && logPostMsg) {\n logger.log(\n '### SecuredField::postMessageListener:: numkeys match PROCEED WITH POST MESSAGE PROCESSING fieldType=',\n this.sfConfig.fieldType,\n 'txVariant=',\n this.sfConfig.txVariant\n );\n }\n\n switch (feedbackObj.action) {\n case 'encryption':\n this.isValid = true;\n this.onEncryptionCallback(feedbackObj);\n break;\n\n case 'config':\n if (window._b$dl)\n console.log('### SecuredField::postMessageListenerFn:: configured - calling onConfigCallback', feedbackObj.fieldType);\n this.onConfigCallback(feedbackObj);\n break;\n\n case 'focus':\n this.onFocusCallback(feedbackObj);\n break;\n\n case 'binValue':\n this.onBinValueCallback(feedbackObj);\n break;\n\n // iOS ONLY - RE. iOS BUGS AROUND BLUR AND FOCUS EVENTS\n case 'touch':\n this.onTouchstartCallback(feedbackObj);\n break;\n\n // Only happens for Firefox & IE <= 11\n case 'shifttab':\n this.onShiftTabCallback(feedbackObj);\n break;\n\n case 'autoComplete':\n this.onAutoCompleteCallback(feedbackObj);\n break;\n\n case 'enterKeyPressed':\n this.onKeyPressedCallback(feedbackObj);\n break;\n\n /**\n * Validate, because action =\n *\n * 'brand'\n * 'delete'\n * 'luhnCheck'\n * //'incomplete field' (an error that follows from a focus (blur) event)\n * 'incorrectly filled field' (an error that follows from a focus (blur) event) // NEW\n * 'numberKeyPressed' (or date-, month-, year-, cvc-, pin-, or iban- KeyPressed)\n * - since we have no \"error\" action \"...KeyPressed\" is the action type on most error events (other than \"incomplete field\" or \"luhnCheck\")\n * and often these error events representing the clearing of an existing error\n */\n default:\n // If we're validation handling (& not encryption handling) field must be invalid\n this.isValid = false;\n this.onValidationCallback(feedbackObj);\n }\n }\n\n destroy(): void {\n off(window, 'message', this.postMessageListener, false);\n off(this.iframeRef, 'load', this.iframeOnLoadListener, false);\n this.iframeContentWindow = null;\n removeAllChildren(this.holderEl);\n }\n\n /**\n * Returns whether the securedField is hidden OR whether it is optional and not in error\n */\n isOptionalOrHidden(): boolean {\n if (\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_DATE ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_MONTH ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_YEAR\n ) {\n switch (this.expiryDatePolicy) {\n case DATE_POLICY_HIDDEN:\n return true;\n case DATE_POLICY_OPTIONAL:\n return !this.hasError;\n default:\n return false;\n }\n }\n\n if (this.sfConfig.fieldType === ENCRYPTED_SECURITY_CODE) {\n switch (this.cvcPolicy) {\n case CVC_POLICY_HIDDEN:\n return true;\n case CVC_POLICY_OPTIONAL:\n return !this.hasError;\n default:\n return false;\n }\n }\n\n // Any other type of securedField is not optional & can't be hidden\n return false;\n }\n\n // /////// ALLOCATE CALLBACKS /////////\n onIframeLoaded(callbackFn: RtnType_noParamVoidFn): SecuredField {\n this.onIframeLoadedCallback = callbackFn;\n return this;\n }\n\n onEncryption(callbackFn: RtnType_callbackFn): SecuredField {\n this.onEncryptionCallback = callbackFn;\n return this;\n }\n\n onValidation(callbackFn: RtnType_callbackFn): SecuredField {\n this.onValidationCallback = callbackFn;\n return this;\n }\n\n onConfig(callbackFn: RtnType_callbackFn): SecuredField {\n this.onConfigCallback = callbackFn;\n return this;\n }\n\n onFocus(callbackFn: RtnType_callbackFn): SecuredField {\n this.onFocusCallback = callbackFn;\n return this;\n }\n\n onBinValue(callbackFn: RtnType_callbackFn): SecuredField {\n this.onBinValueCallback = callbackFn;\n return this;\n }\n\n onTouchstart(callbackFn: RtnType_callbackFn): SecuredField {\n this.onTouchstartCallback = callbackFn;\n return this;\n }\n\n onShiftTab(callbackFn: RtnType_callbackFn): SecuredField {\n this.onShiftTabCallback = callbackFn;\n return this;\n }\n\n onAutoComplete(callbackFn: RtnType_callbackFn): SecuredField {\n this.onAutoCompleteCallback = callbackFn;\n return this;\n }\n\n onKeyPressed(callbackFn: RtnType_callbackFn): SecuredField {\n this.onKeyPressedCallback = callbackFn;\n return this;\n }\n //------------------------------------\n\n // ///////////// GETTERS/SETTERS //////////////\n\n get errorType(): string {\n return this._errorType;\n }\n set errorType(value: string) {\n this._errorType = value;\n }\n\n get hasError(): boolean {\n return this._hasError;\n }\n set hasError(value: boolean) {\n this._hasError = value;\n }\n\n get isValid(): boolean {\n if (this.sfConfig.fieldType === ENCRYPTED_SECURITY_CODE) {\n switch (this.cvcPolicy) {\n case CVC_POLICY_HIDDEN:\n // If cvc is hidden then the field is always valid\n return true;\n case CVC_POLICY_OPTIONAL:\n // If cvc is optional then the field is always valid UNLESS it has an error\n return !this.hasError;\n default:\n return this._isValid;\n }\n }\n\n if (\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_DATE ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_MONTH ||\n this.sfConfig.fieldType === ENCRYPTED_EXPIRY_YEAR\n ) {\n switch (this.expiryDatePolicy) {\n case DATE_POLICY_HIDDEN:\n // If date is hidden then the field is always valid\n return true;\n case DATE_POLICY_OPTIONAL:\n // If date is optional then the field is always valid UNLESS it has an error\n return !this.hasError;\n default:\n return this._isValid;\n }\n }\n\n return this._isValid;\n }\n set isValid(value: boolean) {\n this._isValid = value;\n }\n\n get cvcPolicy(): CVCPolicyType {\n return this._cvcPolicy;\n }\n\n set cvcPolicy(value: CVCPolicyType) {\n // Only set if this is a CVC field\n if (this.sfConfig.fieldType !== ENCRYPTED_SECURITY_CODE) return;\n\n // Only set if value has changed\n if (value === this.cvcPolicy) return;\n\n if (process.env.NODE_ENV === 'development' && doLog) logger.log(this.sfConfig.fieldType, '### SecuredField::cvcPolicy:: value=', value);\n\n this._cvcPolicy = value;\n\n // If the field has changed status (required <--> not required) AND it's error state was due to an isValidated call\n // NOTE: fixes issue in Components where you first validate and then start typing a maestro number\n // - w/o this and the fix in CSF the maestro PM will never register as valid\n if (this.hasError && this.errorType === 'isValidated') {\n this.hasError = false;\n }\n }\n\n get expiryDatePolicy(): DatePolicyType {\n return this._expiryDatePolicy;\n }\n\n set expiryDatePolicy(value: DatePolicyType) {\n // Only set if this is a date field type of securedField\n if (\n this.sfConfig.fieldType !== ENCRYPTED_EXPIRY_DATE &&\n this.sfConfig.fieldType !== ENCRYPTED_EXPIRY_MONTH &&\n this.sfConfig.fieldType !== ENCRYPTED_EXPIRY_YEAR\n )\n return;\n\n // Only set if value has changed\n if (value === this.expiryDatePolicy) return;\n\n if (process.env.NODE_ENV === 'development' && doLog) logger.log(this.sfConfig.fieldType, '### SecuredField:expiryDatePolicy:: value=', value);\n\n this._expiryDatePolicy = value;\n\n // If the field has changed status (required <--> not required) AND it's error state was due to an isValidated call\n if (this.hasError && this.errorType === 'isValidated') {\n this.hasError = false;\n }\n }\n\n get iframeContentWindow(): Window {\n return this._iframeContentWindow;\n }\n set iframeContentWindow(value: Window) {\n this._iframeContentWindow = value;\n }\n\n get isEncrypted(): boolean {\n return this._isEncrypted;\n }\n set isEncrypted(value: boolean) {\n this._isEncrypted = value;\n }\n\n get numKey(): number {\n return this._numKey;\n }\n set numKey(value: number) {\n this._numKey = value;\n }\n\n // Internal use - way to create listener refs that we can add/remove\n get iframeOnLoadListener(): RtnType_noParamVoidFn {\n return this._iframeOnLoadListener;\n }\n set iframeOnLoadListener(value: RtnType_noParamVoidFn) {\n this._iframeOnLoadListener = value.bind(this);\n }\n\n get postMessageListener(): RtnType_postMessageListener {\n return this._postMessageListener;\n }\n set postMessageListener(value: RtnType_postMessageListener) {\n this._postMessageListener = value.bind(this);\n }\n}\n\nexport default SecuredField;\n"],"names":["SecuredField","AbstractSecuredField","init","i18n","iframeSrc","placeholders","showContextualElement","processedAriaConfig","processAriaConfig","this","sfConfig","txVariant","fieldType","iframeUIConfig","ariaConfig","processPlaceholders","iframeConfig","src","title","iframeTitle","policy","iframeEl","createIframe","holderEl","appendChild","iframe","selectOne","contentWindow","console","error","event","AnalyticsErrorEvent","component","componentType","code","ErrorEventCode","SECURED_FIELDS_IFRAME_CONTENT_WINDOW_NOT_FOUND","errorType","ErrorEventType","implementation","message","submitAnalytics","iframeContentWindow","iframeOnLoadListener","iframeOnLoadListenerFn","on","iframeRef","postMessageListener","postMessageListenerFn","window","configObj","numKey","_b$dl","log","postMessageToIframe","loadingContext","onIframeLoadedCallback","originCheckPassed","showWarnings","feedbackObj","JSON","parse","data","e","isWebpackPostMsg","logger","isChromeVoxPostMsg","hasOwnProperty","action","isValid","onEncryptionCallback","onConfigCallback","onFocusCallback","onBinValueCallback","onTouchstartCallback","onShiftTabCallback","onAutoCompleteCallback","onKeyPressedCallback","onValidationCallback","destroy","off","removeAllChildren","isOptionalOrHidden","ENCRYPTED_EXPIRY_DATE","ENCRYPTED_EXPIRY_MONTH","ENCRYPTED_EXPIRY_YEAR","expiryDatePolicy","DATE_POLICY_HIDDEN","DATE_POLICY_OPTIONAL","hasError","ENCRYPTED_SECURITY_CODE","cvcPolicy","CVC_POLICY_HIDDEN","CVC_POLICY_OPTIONAL","onIframeLoaded","callbackFn","onEncryption","onValidation","onConfig","onFocus","onBinValue","onTouchstart","onShiftTab","onAutoComplete","onKeyPressed","_errorType","value","_hasError","_isValid","_cvcPolicy","_expiryDatePolicy","_iframeContentWindow","isEncrypted","_isEncrypted","_numKey","_iframeOnLoadListener","bind","_postMessageListener","constructor","pSetupObj","super","configVarsFromSetUpObj","reject","from","generateRandomNumber"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var a=function(a){return a.address="address",a.bankTransfer_IBAN="bankTransfer_IBAN",a.bankTransfer_BE="bankTransfer_BE",a.bankTransfer_NL="bankTransfer_NL",a.bankTransfer_PL="bankTransfer_PL",a.bankTransfer_FR="bankTransfer_FR",a.bankTransfer_CH="bankTransfer_CH",a.bankTransfer_IE="bankTransfer_IE",a.bankTransfer_GB="bankTransfer_GB",a.bankTransfer_DE="bankTransfer_DE",a.bankTransfer_AE="bankTransfer_AE",a.bankTransfer_AT="bankTransfer_AT",a.bankTransfer_AU="bankTransfer_AU",a.bankTransfer_BG="bankTransfer_BG",a.bankTransfer_CA="bankTransfer_CA",a.bankTransfer_EE="bankTransfer_EE",a.bankTransfer_ES="bankTransfer_ES",a.bankTransfer_FI="bankTransfer_FI",a.bankTransfer_HK="bankTransfer_HK",a.bankTransfer_HU="bankTransfer_HU",a.bankTransfer_IT="bankTransfer_IT",a.bankTransfer_JP="bankTransfer_JP",a.bankTransfer_LU="bankTransfer_LU",a.bankTransfer_NZ="bankTransfer_NZ",a.bankTransfer_PT="bankTransfer_PT",a.bankTransfer_SG="bankTransfer_SG",a.bankTransfer_SK="bankTransfer_SK",a.bankTransfer_US="bankTransfer_US",a.donation="donation",a.personal_details="personal_details",a.dropin="dropin",a.bcmc="bcmc",a.card="card",a.scheme="scheme",a.storedCard="storedCard",a.customCard="customcard",a.threeDS2Challenge="threeDS2Challenge",a.threeDS2Fingerprint="threeDS2Fingerprint",a.threeDS2DeviceFingerprint="threeDS2DeviceFingerprint",a.ach="ach",a.directdebit_GB="directdebit_GB",a.sepadirectdebit="sepadirectdebit",a.eft_directdebit_CA="eft_directdebit_CA",a.affirm="affirm",a.afterpay="afterpay",a.afterpay_default="afterpay_default",a.afterpay_b2b="afterpay_b2b",a.atome="atome",a.facilypay_3x="facilypay_3x",a.facilypay_4x="facilypay_4x",a.facilypay_6x="facilypay_6x",a.facilypay_10x="facilypay_10x",a.facilypay_12x="facilypay_12x",a.ratepay="ratepay",a.ratepay_directdebit="ratepay_directdebit",a.amazonpay="amazonpay",a.applepay="applepay",a.cashapp="cashapp",a.clicktopay="clicktopay",a.googlepay="googlepay",a.paypal="paypal",a.fastlane="fastlane",a.paywithgoogle="paywithgoogle",a.boletobancario="boletobancario",a.boletobancario_itau="boletobancario_itau",a.boletobancario_santander="boletobancario_santander",a.primeiropay_boleto="primeiropay_boleto",a.doku="doku",a.doku_alfamart="doku_alfamart",a.doku_permata_lite_atm="doku_permata_lite_atm",a.doku_indomaret="doku_indomaret",a.doku_atm_mandiri_va="doku_atm_mandiri_va",a.doku_sinarmas_va="doku_sinarmas_va",a.doku_mandiri_va="doku_mandiri_va",a.doku_cimb_va="doku_cimb_va",a.doku_danamon_va="doku_danamon_va",a.doku_bri_va="doku_bri_va",a.doku_bni_va="doku_bni_va",a.doku_bca_va="doku_bca_va",a.doku_wallet="doku_wallet",a.oxxo="oxxo",a.billdesk_online="billdesk_online",a.billdesk_wallet="billdesk_wallet",a.dotpay="dotpay",a.eps="eps",a.iris="iris",a.molpay_ebanking_fpx_MY="molpay_ebanking_fpx_MY",a.molpay_ebanking_TH="molpay_ebanking_TH",a.molpay_ebanking_VN="molpay_ebanking_VN",a.onlineBanking_CZ="onlineBanking_CZ",a.onlinebanking_IN="onlinebanking_IN",a.onlineBanking_PL="onlineBanking_PL",a.onlineBanking_SK="onlineBanking_SK",a.paybybank="paybybank",a.payu_IN_cashcard="payu_IN_cashcard",a.payu_IN_nb="payu_IN_nb",a.wallet_IN="wallet_IN",a.dragonpay="dragonpay",a.dragonpay_ebanking="dragonpay_ebanking",a.dragonpay_otc_banking="dragonpay_otc_banking",a.dragonpay_otc_non_banking="dragonpay_otc_non_banking",a.dragonpay_otc_philippines="dragonpay_otc_philippines",a.econtext="econtext",a.econtext_atm="econtext_atm",a.econtext_online="econtext_online",a.econtext_seven_eleven="econtext_seven_eleven",a.econtext_stores="econtext_stores",a.giropay="giropay",a.multibanco="multibanco",a.redirect="redirect",a.twint="twint",a.vipps="vipps",a.trustly="trustly",a.paybybank_AIS_DD="paybybank_AIS_DD",a.riverty="riverty",a.paybybank_pix="paybybank_pix",a.klarna="klarna",a.klarna_account="klarna_account",a.klarna_paynow="klarna_paynow",a.klarna_b2b="klarna_b2b",a.bcmc_mobile="bcmc_mobile",a.bcmc_mobile_QR="bcmc_mobile_QR",a.pix="pix",a.swish="swish",a.wechatpay="wechatpay",a.wechatpayQR="wechatpayQR",a.promptpay="promptpay",a.paynow="paynow",a.duitnow="duitnow",a.blik="blik",a.mbway="mbway",a.ancv="ancv",a.payto="payto",a.upi="upi",a.upi_qr="upi_qr",a.upi_collect="upi_collect",a.upi_intent="upi_intent",a.giftcard="giftcard",a.mealVoucher_FR="mealVoucher_FR",a.mealVoucher_FR_natixis="mealVoucher_FR_natixis",a.mealVoucher_FR_sodexo="mealVoucher_FR_sodexo",a.mealVoucher_FR_groupeup="mealVoucher_FR_groupeup",a}({});export{a as TxVariants};
1
+ var a=function(a){return a.address="address",a.bankTransfer_IBAN="bankTransfer_IBAN",a.bankTransfer_BE="bankTransfer_BE",a.bankTransfer_NL="bankTransfer_NL",a.bankTransfer_PL="bankTransfer_PL",a.bankTransfer_FR="bankTransfer_FR",a.bankTransfer_CH="bankTransfer_CH",a.bankTransfer_IE="bankTransfer_IE",a.bankTransfer_GB="bankTransfer_GB",a.bankTransfer_DE="bankTransfer_DE",a.bankTransfer_AE="bankTransfer_AE",a.bankTransfer_AT="bankTransfer_AT",a.bankTransfer_AU="bankTransfer_AU",a.bankTransfer_BG="bankTransfer_BG",a.bankTransfer_CA="bankTransfer_CA",a.bankTransfer_EE="bankTransfer_EE",a.bankTransfer_ES="bankTransfer_ES",a.bankTransfer_FI="bankTransfer_FI",a.bankTransfer_HK="bankTransfer_HK",a.bankTransfer_HU="bankTransfer_HU",a.bankTransfer_IT="bankTransfer_IT",a.bankTransfer_JP="bankTransfer_JP",a.bankTransfer_LU="bankTransfer_LU",a.bankTransfer_NZ="bankTransfer_NZ",a.bankTransfer_PT="bankTransfer_PT",a.bankTransfer_SG="bankTransfer_SG",a.bankTransfer_SK="bankTransfer_SK",a.bankTransfer_US="bankTransfer_US",a.donation="donation",a.personal_details="personal_details",a.dropin="dropin",a.bcmc="bcmc",a.card="card",a.scheme="scheme",a.storedCard="storedCard",a.customCard="customcard",a.threeDS2Challenge="threeDS2Challenge",a.threeDS2Fingerprint="threeDS2Fingerprint",a.threeDS2DeviceFingerprint="threeDS2DeviceFingerprint",a.ach="ach",a.directdebit_GB="directdebit_GB",a.sepadirectdebit="sepadirectdebit",a.eft_directdebit_CA="eft_directdebit_CA",a.affirm="affirm",a.afterpay="afterpay",a.afterpay_default="afterpay_default",a.afterpay_b2b="afterpay_b2b",a.atome="atome",a.facilypay_3x="facilypay_3x",a.facilypay_4x="facilypay_4x",a.facilypay_6x="facilypay_6x",a.facilypay_10x="facilypay_10x",a.facilypay_12x="facilypay_12x",a.ratepay="ratepay",a.ratepay_directdebit="ratepay_directdebit",a.amazonpay="amazonpay",a.applepay="applepay",a.cashapp="cashapp",a.clicktopay="clicktopay",a.googlepay="googlepay",a.paypal="paypal",a.fastlane="fastlane",a.paywithgoogle="paywithgoogle",a.boletobancario="boletobancario",a.boletobancario_itau="boletobancario_itau",a.boletobancario_santander="boletobancario_santander",a.primeiropay_boleto="primeiropay_boleto",a.doku="doku",a.doku_alfamart="doku_alfamart",a.doku_permata_lite_atm="doku_permata_lite_atm",a.doku_indomaret="doku_indomaret",a.doku_atm_mandiri_va="doku_atm_mandiri_va",a.doku_sinarmas_va="doku_sinarmas_va",a.doku_mandiri_va="doku_mandiri_va",a.doku_cimb_va="doku_cimb_va",a.doku_danamon_va="doku_danamon_va",a.doku_bri_va="doku_bri_va",a.doku_bni_va="doku_bni_va",a.doku_bca_va="doku_bca_va",a.doku_wallet="doku_wallet",a.oxxo="oxxo",a.billdesk_online="billdesk_online",a.billdesk_wallet="billdesk_wallet",a.dotpay="dotpay",a.eps="eps",a.iris="iris",a.molpay_ebanking_fpx_MY="molpay_ebanking_fpx_MY",a.molpay_ebanking_TH="molpay_ebanking_TH",a.molpay_ebanking_VN="molpay_ebanking_VN",a.onlineBanking_CZ="onlineBanking_CZ",a.onlinebanking_IN="onlinebanking_IN",a.onlineBanking_PL="onlineBanking_PL",a.onlineBanking_SK="onlineBanking_SK",a.paybybank="paybybank",a.payu_IN_cashcard="payu_IN_cashcard",a.payu_IN_nb="payu_IN_nb",a.wallet_IN="wallet_IN",a.dragonpay="dragonpay",a.dragonpay_ebanking="dragonpay_ebanking",a.dragonpay_otc_banking="dragonpay_otc_banking",a.dragonpay_otc_non_banking="dragonpay_otc_non_banking",a.dragonpay_otc_philippines="dragonpay_otc_philippines",a.econtext="econtext",a.econtext_atm="econtext_atm",a.econtext_online="econtext_online",a.econtext_seven_eleven="econtext_seven_eleven",a.econtext_stores="econtext_stores",a.giropay="giropay",a.multibanco="multibanco",a.redirect="redirect",a.twint="twint",a.vipps="vipps",a.trustly="trustly",a.paybybank_AIS_DD="paybybank_AIS_DD",a.riverty="riverty",a.paybybank_pix="paybybank_pix",a.klarna="klarna",a.klarna_account="klarna_account",a.klarna_paynow="klarna_paynow",a.klarna_b2b="klarna_b2b",a.bcmc_mobile="bcmc_mobile",a.bcmc_mobile_QR="bcmc_mobile_QR",a.pix="pix",a.swish="swish",a.wechatpay="wechatpay",a.wechatpayQR="wechatpayQR",a.promptpay="promptpay",a.paynow="paynow",a.duitnow="duitnow",a.blik="blik",a.mbway="mbway",a.ancv="ancv",a.payto="payto",a.upi="upi",a.upi_qr="upi_qr",a.upi_intent="upi_intent",a.giftcard="giftcard",a.mealVoucher_FR="mealVoucher_FR",a.mealVoucher_FR_natixis="mealVoucher_FR_natixis",a.mealVoucher_FR_sodexo="mealVoucher_FR_sodexo",a.mealVoucher_FR_groupeup="mealVoucher_FR_groupeup",a}({});export{a as TxVariants};
2
2
  //# sourceMappingURL=tx-variants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tx-variants.js","sources":["../../../src/components/tx-variants.ts"],"sourcesContent":["export enum TxVariants {\n /** internal */\n address = 'address',\n bankTransfer_IBAN = 'bankTransfer_IBAN',\n bankTransfer_BE = 'bankTransfer_BE',\n bankTransfer_NL = 'bankTransfer_NL',\n bankTransfer_PL = 'bankTransfer_PL',\n bankTransfer_FR = 'bankTransfer_FR',\n bankTransfer_CH = 'bankTransfer_CH',\n bankTransfer_IE = 'bankTransfer_IE',\n bankTransfer_GB = 'bankTransfer_GB',\n bankTransfer_DE = 'bankTransfer_DE',\n bankTransfer_AE = 'bankTransfer_AE',\n bankTransfer_AT = 'bankTransfer_AT',\n bankTransfer_AU = 'bankTransfer_AU',\n bankTransfer_BG = 'bankTransfer_BG',\n bankTransfer_CA = 'bankTransfer_CA',\n bankTransfer_EE = 'bankTransfer_EE',\n bankTransfer_ES = 'bankTransfer_ES',\n bankTransfer_FI = 'bankTransfer_FI',\n bankTransfer_HK = 'bankTransfer_HK',\n bankTransfer_HU = 'bankTransfer_HU',\n bankTransfer_IT = 'bankTransfer_IT',\n bankTransfer_JP = 'bankTransfer_JP',\n bankTransfer_LU = 'bankTransfer_LU',\n bankTransfer_NZ = 'bankTransfer_NZ',\n bankTransfer_PT = 'bankTransfer_PT',\n bankTransfer_SG = 'bankTransfer_SG',\n bankTransfer_SK = 'bankTransfer_SK',\n bankTransfer_US = 'bankTransfer_US',\n donation = 'donation',\n personal_details = 'personal_details',\n dropin = 'dropin',\n /** internal */\n\n /** Card */\n bcmc = 'bcmc',\n card = 'card',\n scheme = 'scheme',\n storedCard = 'storedCard',\n customCard = 'customcard',\n /** Card */\n\n /** ThreeDS */\n threeDS2Challenge = 'threeDS2Challenge',\n threeDS2Fingerprint = 'threeDS2Fingerprint',\n threeDS2DeviceFingerprint = 'threeDS2DeviceFingerprint',\n /** ThreeDS */\n\n /** Direct debit */\n ach = 'ach',\n directdebit_GB = 'directdebit_GB',\n sepadirectdebit = 'sepadirectdebit',\n eft_directdebit_CA = 'eft_directdebit_CA',\n /** Direct debit */\n\n /** Open Invoice */\n affirm = 'affirm',\n afterpay = 'afterpay',\n afterpay_default = 'afterpay_default',\n afterpay_b2b = 'afterpay_b2b',\n atome = 'atome',\n facilypay_3x = 'facilypay_3x',\n facilypay_4x = 'facilypay_4x',\n facilypay_6x = 'facilypay_6x',\n facilypay_10x = 'facilypay_10x',\n facilypay_12x = 'facilypay_12x',\n ratepay = 'ratepay',\n ratepay_directdebit = 'ratepay_directdebit',\n /** Open Invoice */\n\n /** Wallets */\n amazonpay = 'amazonpay',\n applepay = 'applepay',\n cashapp = 'cashapp',\n clicktopay = 'clicktopay',\n googlepay = 'googlepay',\n paypal = 'paypal',\n fastlane = 'fastlane',\n paywithgoogle = 'paywithgoogle',\n /** Wallets */\n\n /** Voucher */\n boletobancario = 'boletobancario',\n boletobancario_itau = 'boletobancario_itau',\n boletobancario_santander = 'boletobancario_santander',\n primeiropay_boleto = 'primeiropay_boleto',\n doku = 'doku',\n doku_alfamart = 'doku_alfamart',\n doku_permata_lite_atm = 'doku_permata_lite_atm',\n doku_indomaret = 'doku_indomaret',\n doku_atm_mandiri_va = 'doku_atm_mandiri_va',\n doku_sinarmas_va = 'doku_sinarmas_va',\n doku_mandiri_va = 'doku_mandiri_va',\n doku_cimb_va = 'doku_cimb_va',\n doku_danamon_va = 'doku_danamon_va',\n doku_bri_va = 'doku_bri_va',\n doku_bni_va = 'doku_bni_va',\n doku_bca_va = 'doku_bca_va',\n doku_wallet = 'doku_wallet',\n oxxo = 'oxxo',\n /** Voucher */\n\n /** issuerList */\n billdesk_online = 'billdesk_online',\n billdesk_wallet = 'billdesk_wallet',\n dotpay = 'dotpay',\n eps = 'eps',\n iris = 'iris',\n molpay_ebanking_fpx_MY = 'molpay_ebanking_fpx_MY',\n molpay_ebanking_TH = 'molpay_ebanking_TH',\n molpay_ebanking_VN = 'molpay_ebanking_VN',\n onlineBanking_CZ = 'onlineBanking_CZ',\n onlinebanking_IN = 'onlinebanking_IN',\n onlineBanking_PL = 'onlineBanking_PL',\n onlineBanking_SK = 'onlineBanking_SK',\n paybybank = 'paybybank',\n payu_IN_cashcard = 'payu_IN_cashcard',\n payu_IN_nb = 'payu_IN_nb',\n wallet_IN = 'wallet_IN',\n /** issuerList */\n\n /** Dragonpay */\n dragonpay = 'dragonpay',\n dragonpay_ebanking = 'dragonpay_ebanking',\n dragonpay_otc_banking = 'dragonpay_otc_banking',\n dragonpay_otc_non_banking = 'dragonpay_otc_non_banking',\n dragonpay_otc_philippines = 'dragonpay_otc_philippines',\n /** Dragonpay */\n\n /** Econtext */\n econtext = 'econtext',\n econtext_atm = 'econtext_atm',\n econtext_online = 'econtext_online',\n econtext_seven_eleven = 'econtext_seven_eleven',\n econtext_stores = 'econtext_stores',\n /** Econtext */\n\n /** Redirect */\n giropay = 'giropay',\n multibanco = 'multibanco',\n redirect = 'redirect',\n twint = 'twint',\n vipps = 'vipps',\n trustly = 'trustly',\n paybybank_AIS_DD = 'paybybank_AIS_DD',\n riverty = 'riverty',\n paybybank_pix = 'paybybank_pix',\n /** Redirect */\n\n /** Klarna */\n klarna = 'klarna',\n klarna_account = 'klarna_account',\n klarna_paynow = 'klarna_paynow',\n klarna_b2b = 'klarna_b2b',\n /** Klarna */\n\n /** QRLoader */\n bcmc_mobile = 'bcmc_mobile',\n bcmc_mobile_QR = 'bcmc_mobile_QR',\n pix = 'pix',\n swish = 'swish',\n wechatpay = 'wechatpay',\n wechatpayQR = 'wechatpayQR',\n promptpay = 'promptpay',\n paynow = 'paynow',\n duitnow = 'duitnow',\n /** QRLoader */\n\n /** Await */\n blik = 'blik',\n mbway = 'mbway',\n ancv = 'ancv',\n payto = 'payto',\n upi = 'upi', // also QR\n upi_qr = 'upi_qr', // also QR\n upi_collect = 'upi_collect', // also QR\n upi_intent = 'upi_intent', // also QR\n /** Await */\n\n /** Giftcard */\n giftcard = 'giftcard',\n mealVoucher_FR = 'mealVoucher_FR',\n mealVoucher_FR_natixis = 'mealVoucher_FR_natixis',\n mealVoucher_FR_sodexo = 'mealVoucher_FR_sodexo',\n mealVoucher_FR_groupeup = 'mealVoucher_FR_groupeup'\n /** Giftcard */\n}\n"],"names":["TxVariants"],"mappings":"AAAO,IAAAA,EAAKA,SAAAA,GAAAA,OACKA,EAAA,QAAA,wiCAkCJA,EAAA,KAAA,2FAQGA,EAAA,kBAAA,wHAMKA,EAAA,IAAA,sHAOAA,EAAA,OAAA,6UAeLA,EAAA,UAAA,gLAWAA,EAAA,eAAA,mlBAqBGA,EAAA,gBAAA,gfAmBDA,EAAA,UAAA,sNAQDA,EAAA,SAAA,iKAQAA,EAAA,QAAA,wMAYFA,EAAA,OAAA,qGAOEA,EAAA,YAAA,8LAYHA,EAAA,KAAA,yIAWGA,EAAA,SAAA,mMApLLA,CA2LX,CA3LWA,CA2LX,CAAA"}
1
+ {"version":3,"file":"tx-variants.js","sources":["../../../src/components/tx-variants.ts"],"sourcesContent":["export enum TxVariants {\n /** internal */\n address = 'address',\n bankTransfer_IBAN = 'bankTransfer_IBAN',\n bankTransfer_BE = 'bankTransfer_BE',\n bankTransfer_NL = 'bankTransfer_NL',\n bankTransfer_PL = 'bankTransfer_PL',\n bankTransfer_FR = 'bankTransfer_FR',\n bankTransfer_CH = 'bankTransfer_CH',\n bankTransfer_IE = 'bankTransfer_IE',\n bankTransfer_GB = 'bankTransfer_GB',\n bankTransfer_DE = 'bankTransfer_DE',\n bankTransfer_AE = 'bankTransfer_AE',\n bankTransfer_AT = 'bankTransfer_AT',\n bankTransfer_AU = 'bankTransfer_AU',\n bankTransfer_BG = 'bankTransfer_BG',\n bankTransfer_CA = 'bankTransfer_CA',\n bankTransfer_EE = 'bankTransfer_EE',\n bankTransfer_ES = 'bankTransfer_ES',\n bankTransfer_FI = 'bankTransfer_FI',\n bankTransfer_HK = 'bankTransfer_HK',\n bankTransfer_HU = 'bankTransfer_HU',\n bankTransfer_IT = 'bankTransfer_IT',\n bankTransfer_JP = 'bankTransfer_JP',\n bankTransfer_LU = 'bankTransfer_LU',\n bankTransfer_NZ = 'bankTransfer_NZ',\n bankTransfer_PT = 'bankTransfer_PT',\n bankTransfer_SG = 'bankTransfer_SG',\n bankTransfer_SK = 'bankTransfer_SK',\n bankTransfer_US = 'bankTransfer_US',\n donation = 'donation',\n personal_details = 'personal_details',\n dropin = 'dropin',\n /** internal */\n\n /** Card */\n bcmc = 'bcmc',\n card = 'card',\n scheme = 'scheme',\n storedCard = 'storedCard',\n customCard = 'customcard',\n /** Card */\n\n /** ThreeDS */\n threeDS2Challenge = 'threeDS2Challenge',\n threeDS2Fingerprint = 'threeDS2Fingerprint',\n threeDS2DeviceFingerprint = 'threeDS2DeviceFingerprint',\n /** ThreeDS */\n\n /** Direct debit */\n ach = 'ach',\n directdebit_GB = 'directdebit_GB',\n sepadirectdebit = 'sepadirectdebit',\n eft_directdebit_CA = 'eft_directdebit_CA',\n /** Direct debit */\n\n /** Open Invoice */\n affirm = 'affirm',\n afterpay = 'afterpay',\n afterpay_default = 'afterpay_default',\n afterpay_b2b = 'afterpay_b2b',\n atome = 'atome',\n facilypay_3x = 'facilypay_3x',\n facilypay_4x = 'facilypay_4x',\n facilypay_6x = 'facilypay_6x',\n facilypay_10x = 'facilypay_10x',\n facilypay_12x = 'facilypay_12x',\n ratepay = 'ratepay',\n ratepay_directdebit = 'ratepay_directdebit',\n /** Open Invoice */\n\n /** Wallets */\n amazonpay = 'amazonpay',\n applepay = 'applepay',\n cashapp = 'cashapp',\n clicktopay = 'clicktopay',\n googlepay = 'googlepay',\n paypal = 'paypal',\n fastlane = 'fastlane',\n paywithgoogle = 'paywithgoogle',\n /** Wallets */\n\n /** Voucher */\n boletobancario = 'boletobancario',\n boletobancario_itau = 'boletobancario_itau',\n boletobancario_santander = 'boletobancario_santander',\n primeiropay_boleto = 'primeiropay_boleto',\n doku = 'doku',\n doku_alfamart = 'doku_alfamart',\n doku_permata_lite_atm = 'doku_permata_lite_atm',\n doku_indomaret = 'doku_indomaret',\n doku_atm_mandiri_va = 'doku_atm_mandiri_va',\n doku_sinarmas_va = 'doku_sinarmas_va',\n doku_mandiri_va = 'doku_mandiri_va',\n doku_cimb_va = 'doku_cimb_va',\n doku_danamon_va = 'doku_danamon_va',\n doku_bri_va = 'doku_bri_va',\n doku_bni_va = 'doku_bni_va',\n doku_bca_va = 'doku_bca_va',\n doku_wallet = 'doku_wallet',\n oxxo = 'oxxo',\n /** Voucher */\n\n /** issuerList */\n billdesk_online = 'billdesk_online',\n billdesk_wallet = 'billdesk_wallet',\n dotpay = 'dotpay',\n eps = 'eps',\n iris = 'iris',\n molpay_ebanking_fpx_MY = 'molpay_ebanking_fpx_MY',\n molpay_ebanking_TH = 'molpay_ebanking_TH',\n molpay_ebanking_VN = 'molpay_ebanking_VN',\n onlineBanking_CZ = 'onlineBanking_CZ',\n onlinebanking_IN = 'onlinebanking_IN',\n onlineBanking_PL = 'onlineBanking_PL',\n onlineBanking_SK = 'onlineBanking_SK',\n paybybank = 'paybybank',\n payu_IN_cashcard = 'payu_IN_cashcard',\n payu_IN_nb = 'payu_IN_nb',\n wallet_IN = 'wallet_IN',\n /** issuerList */\n\n /** Dragonpay */\n dragonpay = 'dragonpay',\n dragonpay_ebanking = 'dragonpay_ebanking',\n dragonpay_otc_banking = 'dragonpay_otc_banking',\n dragonpay_otc_non_banking = 'dragonpay_otc_non_banking',\n dragonpay_otc_philippines = 'dragonpay_otc_philippines',\n /** Dragonpay */\n\n /** Econtext */\n econtext = 'econtext',\n econtext_atm = 'econtext_atm',\n econtext_online = 'econtext_online',\n econtext_seven_eleven = 'econtext_seven_eleven',\n econtext_stores = 'econtext_stores',\n /** Econtext */\n\n /** Redirect */\n giropay = 'giropay',\n multibanco = 'multibanco',\n redirect = 'redirect',\n twint = 'twint',\n vipps = 'vipps',\n trustly = 'trustly',\n paybybank_AIS_DD = 'paybybank_AIS_DD',\n riverty = 'riverty',\n paybybank_pix = 'paybybank_pix',\n /** Redirect */\n\n /** Klarna */\n klarna = 'klarna',\n klarna_account = 'klarna_account',\n klarna_paynow = 'klarna_paynow',\n klarna_b2b = 'klarna_b2b',\n /** Klarna */\n\n /** QRLoader */\n bcmc_mobile = 'bcmc_mobile',\n bcmc_mobile_QR = 'bcmc_mobile_QR',\n pix = 'pix',\n swish = 'swish',\n wechatpay = 'wechatpay',\n wechatpayQR = 'wechatpayQR',\n promptpay = 'promptpay',\n paynow = 'paynow',\n duitnow = 'duitnow',\n /** QRLoader */\n\n /** Await */\n blik = 'blik',\n mbway = 'mbway',\n ancv = 'ancv',\n payto = 'payto',\n upi = 'upi', // also QR\n upi_qr = 'upi_qr', // also QR\n upi_intent = 'upi_intent', // also QR\n /** Await */\n\n /** Giftcard */\n giftcard = 'giftcard',\n mealVoucher_FR = 'mealVoucher_FR',\n mealVoucher_FR_natixis = 'mealVoucher_FR_natixis',\n mealVoucher_FR_sodexo = 'mealVoucher_FR_sodexo',\n mealVoucher_FR_groupeup = 'mealVoucher_FR_groupeup'\n /** Giftcard */\n}\n"],"names":["TxVariants"],"mappings":"AAAO,IAAAA,EAAKA,SAAAA,GAAAA,OACKA,EAAA,QAAA,wiCAkCJA,EAAA,KAAA,2FAQGA,EAAA,kBAAA,wHAMKA,EAAA,IAAA,sHAOAA,EAAA,OAAA,6UAeLA,EAAA,UAAA,gLAWAA,EAAA,eAAA,mlBAqBGA,EAAA,gBAAA,gfAmBDA,EAAA,UAAA,sNAQDA,EAAA,SAAA,iKAQAA,EAAA,QAAA,wMAYFA,EAAA,OAAA,qGAOEA,EAAA,YAAA,8LAYHA,EAAA,KAAA,6GAUGA,EAAA,SAAA,mMAnLLA,CA0LX,CA1LWA,CA0LX,CAAA"}
@@ -1,2 +1,2 @@
1
- import{debounce as e}from"../../utils/debounce.js";import{processAnalyticsData as t}from"./utils.js";import{AnalyticsEventCategory as s}from"./events/AbstractAnalyticsEvent.js";import n from"../../utils/Storage.js";import{LIBRARY_BUNDLE_TYPE as i,LIBRARY_VERSION as o}from"../config.js";function a(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}class r{async setUp({sessionId:e,checkoutStage:s,locale:n}={}){try{const a=this.storage.get(),r=function(e){if(!e?.timestamp)return!1;const t=Date.now()-9e5;return e.timestamp>t}(a),{applicationInfo:c,checkoutAttemptId:d}=t(this.analyticsData),h=r?a.id:d,u={version:o,buildType:i,channel:"Web",platform:"Web",locale:n,referrer:window.location.href,screenWidth:window.screen.width,checkoutStage:s||"checkout",level:this.enabled?"all":"initial",...c&&{applicationInfo:c},...e&&{sessionId:e},...h&&{checkoutAttemptId:h}};this.capturedCheckoutAttemptId=await this.service.requestCheckoutAttemptId(u),this.storage.set({id:this.capturedCheckoutAttemptId,timestamp:r?a.timestamp:Date.now()})}catch(e){this.enabled=!1,console.warn("Analytics: Error setting up",e)}}sendAnalytics(e){if(this.enabled)try{this.addEventToQueue(e)}catch(e){console.warn("Analytics: Error adding event to queue",e)}}async sendFlavor(e){if(this.capturedCheckoutAttemptId&&!this.isFlavorReported){this.isFlavorReported=!0;try{await this.service.reportIntegrationFlavor(e,this.capturedCheckoutAttemptId)}catch(e){console.warn("Analytics: Error reporting flavor",e)}}}flush(){this.sendEvents()}addEventToQueue(e){this.eventsQueue.add(e),e.getEventCategory()===s.info?this.debouncedSendInfoEvents():this.debouncedSendEvents()}async sendEvents(){if(!this.capturedCheckoutAttemptId||!this.enabled)return;const e={channel:"Web",platform:"Web",info:this.eventsQueue.infoEvents,errors:this.eventsQueue.errorEvents,logs:this.eventsQueue.logEvents};this.eventsQueue.clear();try{await this.service.sendEvents(e,this.capturedCheckoutAttemptId)}catch(e){console.warn("Analytics: Error sending events",e)}}constructor({service:t,eventQueue:s,enabled:i,analyticsData:o}){a(this,"analyticsData",void 0),a(this,"service",void 0),a(this,"eventsQueue",void 0),a(this,"storage",new n("checkout-attempt-id","sessionStorage")),a(this,"debouncedSendInfoEvents",void 0),a(this,"debouncedSendEvents",void 0),a(this,"enabled",!0),a(this,"capturedCheckoutAttemptId",void 0),a(this,"isFlavorReported",!1),this.service=t,this.eventsQueue=s,this.debouncedSendInfoEvents=e(this.sendEvents.bind(this),1e4),this.debouncedSendEvents=e(this.sendEvents.bind(this),5e3),void 0!==i&&(this.enabled=i),o&&(this.analyticsData=o)}}export{r as default};
1
+ import{debounce as e}from"../../utils/debounce.js";import{processAnalyticsData as t}from"./utils.js";import{AnalyticsEventCategory as s}from"./events/AbstractAnalyticsEvent.js";import n from"../../utils/Storage.js";import{LIBRARY_BUNDLE_TYPE as i,LIBRARY_VERSION as o}from"../config.js";function a(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}class r{get checkoutAttemptId(){return this.capturedCheckoutAttemptId}async setUp({sessionId:e,checkoutStage:s,locale:n}={}){try{const a=this.storage.get(),r=function(e){if(!e?.timestamp)return!1;const t=Date.now()-9e5;return e.timestamp>t}(a),{applicationInfo:c,checkoutAttemptId:d}=t(this.analyticsData),h=r?a.id:d,u={version:o,buildType:i,channel:"Web",platform:"Web",locale:n,referrer:window.location.href,screenWidth:window.screen.width,checkoutStage:s||"checkout",level:this.enabled?"all":"initial",...c&&{applicationInfo:c},...e&&{sessionId:e},...h&&{checkoutAttemptId:h}};this.capturedCheckoutAttemptId=await this.service.requestCheckoutAttemptId(u),this.storage.set({id:this.capturedCheckoutAttemptId,timestamp:r?a.timestamp:Date.now()})}catch(e){this.enabled=!1,console.warn("Analytics: Error setting up",e)}}sendAnalytics(e){if(this.enabled)try{this.addEventToQueue(e)}catch(e){console.warn("Analytics: Error adding event to queue",e)}}async sendFlavor(e){if(this.capturedCheckoutAttemptId&&!this.isFlavorReported){this.isFlavorReported=!0;try{await this.service.reportIntegrationFlavor(e,this.capturedCheckoutAttemptId)}catch(e){console.warn("Analytics: Error reporting flavor",e)}}}flush(){this.sendEvents()}addEventToQueue(e){this.eventsQueue.add(e),e.getEventCategory()===s.info?this.debouncedSendInfoEvents():this.debouncedSendEvents()}async sendEvents(){if(!this.capturedCheckoutAttemptId||!this.enabled)return;const e={channel:"Web",platform:"Web",info:this.eventsQueue.infoEvents,errors:this.eventsQueue.errorEvents,logs:this.eventsQueue.logEvents};this.eventsQueue.clear();try{await this.service.sendEvents(e,this.capturedCheckoutAttemptId)}catch(e){console.warn("Analytics: Error sending events",e)}}constructor({service:t,eventQueue:s,enabled:i,analyticsData:o}){a(this,"analyticsData",void 0),a(this,"service",void 0),a(this,"eventsQueue",void 0),a(this,"storage",new n("checkout-attempt-id","sessionStorage")),a(this,"debouncedSendInfoEvents",void 0),a(this,"debouncedSendEvents",void 0),a(this,"enabled",!0),a(this,"capturedCheckoutAttemptId",void 0),a(this,"isFlavorReported",!1),this.service=t,this.eventsQueue=s,this.debouncedSendInfoEvents=e(this.sendEvents.bind(this),1e4),this.debouncedSendEvents=e(this.sendEvents.bind(this),5e3),void 0!==i&&(this.enabled=i),o&&(this.analyticsData=o)}}export{r as default};
2
2
  //# sourceMappingURL=Analytics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Analytics.js","sources":["../../../../src/core/Analytics/Analytics.ts"],"sourcesContent":["import { debounce } 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 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): 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 = 5_000;\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 enabled: boolean = true;\n private capturedCheckoutAttemptId?: string;\n private isFlavorReported = false;\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 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.capturedCheckoutAttemptId = await this.service.requestCheckoutAttemptId(payload);\n\n this.storage.set({\n id: this.capturedCheckoutAttemptId,\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 public async sendFlavor(flavor: 'dropin' | 'components'): Promise<void> {\n if (!this.capturedCheckoutAttemptId) return;\n if (this.isFlavorReported) return;\n\n this.isFlavorReported = true;\n\n try {\n await this.service.reportIntegrationFlavor(flavor, this.capturedCheckoutAttemptId);\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.capturedCheckoutAttemptId || !this.enabled) {\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.capturedCheckoutAttemptId);\n } catch (error) {\n console.warn('Analytics: Error sending events', error);\n }\n }\n}\n\nexport default Analytics;\n"],"names":["Analytics","setUp","sessionId","checkoutStage","locale","checkoutAttemptIdSession","this","storage","get","isSessionReusable","session","timestamp","fifteenMinutesAgo","Date","now","isSessionCreatedUnderFifteenMinutes","applicationInfo","checkoutAttemptId","checkoutAttemptIdFromPayByLink","processAnalyticsData","analyticsData","availableCheckoutAttemptId","id","payload","version","LIBRARY_VERSION","buildType","LIBRARY_BUNDLE_TYPE","channel","platform","referrer","window","location","href","screenWidth","screen","width","level","enabled","capturedCheckoutAttemptId","service","requestCheckoutAttemptId","set","error","console","warn","sendAnalytics","event","addEventToQueue","sendFlavor","flavor","isFlavorReported","reportIntegrationFlavor","flush","sendEvents","eventsQueue","add","getEventCategory","AnalyticsEventCategory","info","debouncedSendInfoEvents","debouncedSendEvents","infoEvents","errors","errorEvents","logs","logEvents","clear","constructor","eventQueue","_define_property","Storage","debounce","bind","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"Analytics.js","sources":["../../../../src/core/Analytics/Analytics.ts"],"sourcesContent":["import { debounce } 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): 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 = 5_000;\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 enabled: boolean = true;\n private capturedCheckoutAttemptId?: string;\n private isFlavorReported = false;\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 {\n return this.capturedCheckoutAttemptId;\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.capturedCheckoutAttemptId = await this.service.requestCheckoutAttemptId(payload);\n\n this.storage.set({\n id: this.capturedCheckoutAttemptId,\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 public async sendFlavor(flavor: 'dropin' | 'components'): Promise<void> {\n if (!this.capturedCheckoutAttemptId) return;\n if (this.isFlavorReported) return;\n\n this.isFlavorReported = true;\n\n try {\n await this.service.reportIntegrationFlavor(flavor, this.capturedCheckoutAttemptId);\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.capturedCheckoutAttemptId || !this.enabled) {\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.capturedCheckoutAttemptId);\n } catch (error) {\n console.warn('Analytics: Error sending events', error);\n }\n }\n}\n\nexport default Analytics;\n"],"names":["Analytics","checkoutAttemptId","this","capturedCheckoutAttemptId","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","set","error","console","warn","sendAnalytics","event","addEventToQueue","sendFlavor","flavor","isFlavorReported","reportIntegrationFlavor","flush","sendEvents","eventsQueue","add","getEventCategory","AnalyticsEventCategory","info","debouncedSendInfoEvents","debouncedSendEvents","infoEvents","errors","errorEvents","logs","logEvents","clear","constructor","eventQueue","_define_property","Storage","debounce","bind","undefined"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{AbstractAnalyticsEvent as r,AnalyticsEventCategory as e}from"./AbstractAnalyticsEvent.js";function E(r,e,E){return e in r?Object.defineProperty(r,e,{value:E,enumerable:!0,configurable:!0,writable:!0}):r[e]=E,r}var _=function(r){return r.network="Network",r.implementation="ImplementationError",r.internal="Internal",r.apiError="ApiError",r.sdkError="SdkError",r.thirdParty="ThirdParty",r.generic="Generic",r.redirect="Redirect",r.threeDS2="ThreeDS2",r}({}),t=function(r){return r.REDIRECT="600",r.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA="700",r.THREEDS2_ACTION_IS_MISSING_TOKEN="701",r.THREEDS2_TOKEN_IS_MISSING_THREEDSMETHODURL="702",r.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS="703",r.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED="704",r.THREEDS2_TIMEOUT="705",r.THREEDS2_TOKEN_IS_MISSING_ACSURL="800",r.THREEDS2_NO_TRANSSTATUS="801",r.THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED="802",r.THREEDS2_NO_COMPONENT_FOR_ACTION="803",r.THREEDS2_NO_ACTION_FOR_CHALLENGE="804",r.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP="805",r}({});class S extends r{getEventCategory(){return e.error}constructor(r){super(r.component),E(this,"errorType",void 0),E(this,"code",void 0),E(this,"message",void 0),this.errorType=r.errorType,this.code=r.code,r.message&&(this.message=r.message)}}export{S as AnalyticsErrorEvent,t as ErrorEventCode,_ as ErrorEventType};
1
+ import{AbstractAnalyticsEvent as E,AnalyticsEventCategory as e}from"./AbstractAnalyticsEvent.js";function r(E,e,r){return e in E?Object.defineProperty(E,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):E[e]=r,E}var _=function(E){return E.network="Network",E.implementation="Implementation",E.internal="Internal",E.apiError="ApiError",E.sdkError="SdkError",E.thirdParty="ThirdParty",E.generic="Generic",E.redirect="Redirect",E.threeDS2="ThreeDS2",E}({}),T=function(E){return E.SECURED_FIELDS_IFRAME_CONTENT_WINDOW_NOT_FOUND="500",E.REDIRECT="600",E.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA="700",E.THREEDS2_ACTION_IS_MISSING_TOKEN="701",E.THREEDS2_TOKEN_IS_MISSING_THREEDSMETHODURL="702",E.THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS="703",E.THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED="704",E.THREEDS2_TIMEOUT="705",E.THREEDS2_TOKEN_IS_MISSING_ACSURL="800",E.THREEDS2_NO_TRANSSTATUS="801",E.THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED="802",E.THREEDS2_NO_COMPONENT_FOR_ACTION="803",E.THREEDS2_NO_ACTION_FOR_CHALLENGE="804",E.THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP="805",E}({});class S extends E{getEventCategory(){return e.error}constructor(E){super(E.component),r(this,"errorType",void 0),r(this,"code",void 0),r(this,"message",void 0),this.errorType=E.errorType,this.code=E.code,E.message&&(this.message=E.message)}}export{S as AnalyticsErrorEvent,T as ErrorEventCode,_ as ErrorEventType};
2
2
  //# sourceMappingURL=AnalyticsErrorEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsErrorEvent.js","sources":["../../../../../src/core/Analytics/events/AnalyticsErrorEvent.ts"],"sourcesContent":["import { AbstractAnalyticsEvent, AnalyticsEventCategory } from './AbstractAnalyticsEvent';\n\ntype AnalyticsErrorEventProps = {\n component: string;\n errorType: ErrorEventType;\n code: string;\n message?: string;\n};\n\nexport enum ErrorEventType {\n network = 'Network',\n implementation = 'ImplementationError',\n internal = 'Internal',\n apiError = 'ApiError',\n sdkError = 'SdkError',\n thirdParty = 'ThirdParty',\n generic = 'Generic',\n redirect = 'Redirect',\n threeDS2 = 'ThreeDS2'\n}\n\nexport enum ErrorEventCode {\n REDIRECT = '600',\n /** Missing 'paymentData' property from threeDS2 action */\n THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA = '700',\n /** Missing 'token' property from threeDS2 action */\n THREEDS2_ACTION_IS_MISSING_TOKEN = '701',\n /** Decoded token is missing a valid threeDSMethodURL property */\n THREEDS2_TOKEN_IS_MISSING_THREEDSMETHODURL = '702',\n /**\n * Decoded token is missing one or more of the following properties:\n * fingerprint: (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)\n * challenge: (acsTransID | messageVersion | threeDSServerTransID)\n */\n THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS = '703',\n /** Token decoding or parsing has failed. ('not base64', 'malformed URI sequence' or 'Could not JSON parse token') */\n THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED = '704',\n /** 3DS2 process has timed out */\n THREEDS2_TIMEOUT = '705',\n /** Decoded token is missing a valid acsURL property */\n THREEDS2_TOKEN_IS_MISSING_ACSURL = '800',\n /** Challenge has resulted in an error (no transStatus could be retrieved by the backend) */\n THREEDS2_NO_TRANSSTATUS = '801',\n /** callSubmit3DS2Fingerprint has received a response indicating either a \"frictionless\" flow, or a \"refused\" response, but without a details object */\n THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED = '802',\n /** callSubmit3DS2Fingerprint cannot find a component to handle the action response */\n THREEDS2_NO_COMPONENT_FOR_ACTION = '803',\n /** callSubmit3DS2Fingerprint has received a response indicating a \"challenge\" but without an action object */\n THREEDS2_NO_ACTION_FOR_CHALLENGE = '804',\n /** The challenge process has happened, an object has been returned, parsed & accepted as legit, but the result prop on that object is either missing or doesn't have a transStatus prop */\n THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP = '805'\n}\n\nexport class AnalyticsErrorEvent extends AbstractAnalyticsEvent {\n private readonly errorType: ErrorEventType;\n private readonly code: string;\n\n private readonly message?: string;\n\n constructor(props: AnalyticsErrorEventProps) {\n super(props.component);\n\n this.errorType = props.errorType;\n this.code = props.code;\n\n if (props.message) this.message = props.message;\n }\n\n public getEventCategory(): AnalyticsEventCategory {\n return AnalyticsEventCategory.error;\n }\n}\n"],"names":["ErrorEventType","ErrorEventCode","AnalyticsErrorEvent","AbstractAnalyticsEvent","getEventCategory","AnalyticsEventCategory","error","constructor","props","super","component","_define_property","errorType","this","code","message"],"mappings":"yNASO,IAAAA,EAAKA,SAAAA,GAAAA,8NAAAA,CAUX,CAVWA,CAUX,CAAA,GAEMC,EAAKA,SAAAA,GAAAA,wBAEiDA,EAAA,wCAAA,MAEPA,EAAA,iCAAA,MAEaA,EAAA,2CAAA,MAM9DA,EAAA,sCAAA,MAEkHA,EAAA,wCAAA,MAEpFA,EAAA,iBAAA,MAEsBA,EAAA,iCAAA,MAEqCA,EAAA,wBAAA,MAE2DA,EAAA,gDAAA,MAEjEA,EAAA,iCAAA,MAEwBA,EAAA,iCAAA,MAE6EA,EAAA,gDAAA,MA5BjLA,CA8BX,CA9BWA,CA8BX,CAAA,GAEM,MAAMC,UAA4BC,EAe9BC,gBAAAA,GACH,OAAOC,EAAuBC,KAClC,CAXA,WAAAC,CAAYC,GACRC,MAAMD,EAAME,WANhBC,OAAiBC,iBAAjB,GACAD,EAAAE,KAAiBC,YAAjB,GAEAH,EAAAE,KAAiBE,eAAjB,GAKIF,KAAKD,UAAYJ,EAAMI,UACvBC,KAAKC,KAAON,EAAMM,KAEdN,EAAMO,UAASF,KAAKE,QAAUP,EAAMO,QAC5C"}
1
+ {"version":3,"file":"AnalyticsErrorEvent.js","sources":["../../../../../src/core/Analytics/events/AnalyticsErrorEvent.ts"],"sourcesContent":["import { AbstractAnalyticsEvent, AnalyticsEventCategory } from './AbstractAnalyticsEvent';\n\ntype AnalyticsErrorEventProps = {\n component: string;\n errorType: ErrorEventType;\n code: string;\n message?: string;\n};\n\nexport enum ErrorEventType {\n network = 'Network',\n implementation = 'Implementation',\n internal = 'Internal',\n apiError = 'ApiError',\n sdkError = 'SdkError',\n thirdParty = 'ThirdParty',\n generic = 'Generic',\n redirect = 'Redirect',\n threeDS2 = 'ThreeDS2'\n}\n\nexport enum ErrorEventCode {\n /** Trying to initialise a securedField iframe, but the iframe.contentWindow is undefined (meaning the containing element is not in the DOM */\n SECURED_FIELDS_IFRAME_CONTENT_WINDOW_NOT_FOUND = '500',\n REDIRECT = '600',\n /** Missing 'paymentData' property from threeDS2 action */\n THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA = '700',\n /** Missing 'token' property from threeDS2 action */\n THREEDS2_ACTION_IS_MISSING_TOKEN = '701',\n /** Decoded token is missing a valid threeDSMethodURL property */\n THREEDS2_TOKEN_IS_MISSING_THREEDSMETHODURL = '702',\n /**\n * Decoded token is missing one or more of the following properties:\n * fingerprint: (threeDSMethodNotificationURL | postMessageDomain | threeDSServerTransID)\n * challenge: (acsTransID | messageVersion | threeDSServerTransID)\n */\n THREEDS2_TOKEN_IS_MISSING_OTHER_PROPS = '703',\n /** Token decoding or parsing has failed. ('not base64', 'malformed URI sequence' or 'Could not JSON parse token') */\n THREEDS2_TOKEN_DECODE_OR_PARSING_FAILED = '704',\n /** 3DS2 process has timed out */\n THREEDS2_TIMEOUT = '705',\n /** Decoded token is missing a valid acsURL property */\n THREEDS2_TOKEN_IS_MISSING_ACSURL = '800',\n /** Challenge has resulted in an error (no transStatus could be retrieved by the backend) */\n THREEDS2_NO_TRANSSTATUS = '801',\n /** callSubmit3DS2Fingerprint has received a response indicating either a \"frictionless\" flow, or a \"refused\" response, but without a details object */\n THREEDS2_NO_DETAILS_FOR_FRICTIONLESS_OR_REFUSED = '802',\n /** callSubmit3DS2Fingerprint cannot find a component to handle the action response */\n THREEDS2_NO_COMPONENT_FOR_ACTION = '803',\n /** callSubmit3DS2Fingerprint has received a response indicating a \"challenge\" but without an action object */\n THREEDS2_NO_ACTION_FOR_CHALLENGE = '804',\n /** The challenge process has happened, an object has been returned, parsed & accepted as legit, but the result prop on that object is either missing or doesn't have a transStatus prop */\n THREEDS2_CHALLENGE_RESOLVED_WITHOUT_RESULT_PROP = '805'\n}\n\nexport class AnalyticsErrorEvent extends AbstractAnalyticsEvent {\n private readonly errorType: ErrorEventType;\n private readonly code: string;\n\n private readonly message?: string;\n\n constructor(props: AnalyticsErrorEventProps) {\n super(props.component);\n\n this.errorType = props.errorType;\n this.code = props.code;\n\n if (props.message) this.message = props.message;\n }\n\n public getEventCategory(): AnalyticsEventCategory {\n return AnalyticsEventCategory.error;\n }\n}\n"],"names":["ErrorEventType","ErrorEventCode","AnalyticsErrorEvent","AbstractAnalyticsEvent","getEventCategory","AnalyticsEventCategory","error","constructor","props","super","component","_define_property","errorType","this","code","message"],"mappings":"yNASO,IAAAA,EAAKA,SAAAA,GAAAA,yNAAAA,CAUX,CAVWA,CAUX,CAAA,GAEMC,EAAKA,SAAAA,GAAAA,OACoIA,EAAA,+CAAA,uBAGnFA,EAAA,wCAAA,MAEPA,EAAA,iCAAA,MAEaA,EAAA,2CAAA,MAM9DA,EAAA,sCAAA,MAEkHA,EAAA,wCAAA,MAEpFA,EAAA,iBAAA,MAEsBA,EAAA,iCAAA,MAEqCA,EAAA,wBAAA,MAE2DA,EAAA,gDAAA,MAEjEA,EAAA,iCAAA,MAEwBA,EAAA,iCAAA,MAE6EA,EAAA,gDAAA,MA9BjLA,CAgCX,CAhCWA,CAgCX,CAAA,GAEM,MAAMC,UAA4BC,EAe9BC,gBAAAA,GACH,OAAOC,EAAuBC,KAClC,CAXA,WAAAC,CAAYC,GACRC,MAAMD,EAAME,WANhBC,OAAiBC,iBAAjB,GACAD,EAAAE,KAAiBC,YAAjB,GAEAH,EAAAE,KAAiBE,eAAjB,GAKIF,KAAKD,UAAYJ,EAAMI,UACvBC,KAAKC,KAAON,EAAMM,KAEdN,EAAMO,UAASF,KAAKE,QAAUP,EAAMO,QAC5C"}
@@ -1,2 +1,2 @@
1
- const e="https://checkoutshopper-live.adyen.com/checkoutshopper/",n="6.29.0",o="esm",t=["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"],r=6e4;export{r as DEFAULT_HTTP_TIMEOUT,e as FALLBACK_CONTEXT,t as GENERIC_OPTIONS,o as LIBRARY_BUNDLE_TYPE,n as LIBRARY_VERSION};
1
+ const e="https://checkoutshopper-live.adyen.com/checkoutshopper/",n="6.30.0",o="esm",t=["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"],r=6e4;export{r as DEFAULT_HTTP_TIMEOUT,e as FALLBACK_CONTEXT,t as GENERIC_OPTIONS,o as LIBRARY_BUNDLE_TYPE,n as LIBRARY_VERSION};
2
2
  //# sourceMappingURL=config.js.map
@@ -223,15 +223,33 @@ type GiftcardFieldsProps = {
223
223
  label?: string;
224
224
  };
225
225
 
226
+ declare enum AnalyticsEventCategory {
227
+ info = "info",
228
+ error = "error",
229
+ log = "log"
230
+ }
231
+ declare abstract class AbstractAnalyticsEvent {
232
+ private readonly timestamp;
233
+ private readonly id;
234
+ /**
235
+ * Component tx variant or identifier
236
+ * @private
237
+ */
238
+ private readonly component;
239
+ abstract getEventCategory(): AnalyticsEventCategory;
240
+ protected constructor(component: string);
241
+ }
242
+
226
243
  type Placeholders = CardPlaceholders | Placeholders$1;
227
244
  /**
228
- * Should be the only props that can be sent to SFP (from CardInput, SecuredFieldsInput, AchInput, GiftcardComponent)
245
+ * Should be the only props that can be sent to SFP (from CardInput, SecuredFieldsInput, GiftcardComponent)
229
246
  */
230
247
  interface SFPProps {
231
248
  autoFocus?: boolean;
232
249
  brands?: string[];
233
250
  brandsConfiguration?: CardBrandsConfiguration;
234
251
  clientKey: string;
252
+ componentType: string;
235
253
  countryCode?: string;
236
254
  forceCompat?: boolean;
237
255
  hasKoreanFields?: boolean;
@@ -255,6 +273,7 @@ interface SFPProps {
255
273
  onFocus?: () => {};
256
274
  onLoad?: () => {};
257
275
  onStateUpdate: (obj: SFPState) => void;
276
+ onSubmitAnalytics: (event: AbstractAnalyticsEvent) => void;
258
277
  handleKeyPress?: (obj: KeyboardEvent) => void;
259
278
  rootNode: HTMLElement;
260
279
  showWarnings?: boolean;
@@ -753,7 +772,6 @@ declare enum TxVariants {
753
772
  payto = "payto",
754
773
  upi = "upi",// also QR
755
774
  upi_qr = "upi_qr",// also QR
756
- upi_collect = "upi_collect",// also QR
757
775
  upi_intent = "upi_intent",// also QR
758
776
  /** Await */
759
777
  /** Giftcard */
@@ -1527,23 +1545,6 @@ declare global {
1527
1545
  }
1528
1546
  }
1529
1547
 
1530
- declare enum AnalyticsEventCategory {
1531
- info = "info",
1532
- error = "error",
1533
- log = "log"
1534
- }
1535
- declare abstract class AbstractAnalyticsEvent {
1536
- private readonly timestamp;
1537
- private readonly id;
1538
- /**
1539
- * Component tx variant or identifier
1540
- * @private
1541
- */
1542
- private readonly component;
1543
- abstract getEventCategory(): AnalyticsEventCategory;
1544
- protected constructor(component: string);
1545
- }
1546
-
1547
1548
  interface AnalyticsOptions {
1548
1549
  /**
1549
1550
  * Enable/Disable all analytics
@@ -1582,6 +1583,7 @@ interface ApplicationInfo {
1582
1583
  }
1583
1584
 
1584
1585
  interface IAnalytics {
1586
+ checkoutAttemptId?: string;
1585
1587
  setUp({ sessionId, checkoutStage, locale }: {
1586
1588
  sessionId?: string;
1587
1589
  checkoutStage?: 'precheckout' | 'checkout';
@@ -1625,6 +1627,8 @@ type ClickToPayPaymentData = {
1625
1627
  };
1626
1628
 
1627
1629
  declare enum ErrorEventCode {
1630
+ /** Trying to initialise a securedField iframe, but the iframe.contentWindow is undefined (meaning the containing element is not in the DOM */
1631
+ SECURED_FIELDS_IFRAME_CONTENT_WINDOW_NOT_FOUND = "500",
1628
1632
  REDIRECT = "600",
1629
1633
  /** Missing 'paymentData' property from threeDS2 action */
1630
1634
  THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA = "700",
@@ -2996,22 +3000,14 @@ interface SepaElementData {
2996
3000
  interface SepaConfiguration extends UIElementProps {
2997
3001
  }
2998
3002
 
2999
- interface SegmentedControlOption<T> {
3000
- label: string;
3001
- value: T;
3002
- id: string;
3003
- controls: string;
3004
- htmlProps?: {};
3005
- }
3006
-
3007
3003
  type Mandate = {
3008
3004
  amount: string;
3009
3005
  frequency: 'monthly' | 'weekly' | 'adhoc';
3010
3006
  amountRule: 'max' | 'exact';
3011
3007
  };
3012
3008
 
3013
- type UpiType = TxVariants.upi_qr | TxVariants.upi_intent | TxVariants.upi_collect;
3014
- type UpiMode = 'vpa' | 'qrCode' | 'intent';
3009
+ type UpiType = TxVariants.upi_qr | TxVariants.upi_intent;
3010
+ type UpiMode = 'qrCode' | 'intent';
3015
3011
  type App = {
3016
3012
  id: string;
3017
3013
  name: string;
@@ -3020,11 +3016,11 @@ type App = {
3020
3016
  type UpiPaymentData = {
3021
3017
  paymentMethod: {
3022
3018
  type: UpiType;
3023
- virtualPaymentAddress?: string;
3024
3019
  appId?: string;
3025
3020
  };
3026
3021
  };
3027
3022
  interface UPIConfiguration extends UIElementProps {
3023
+ /** @deprecated UPI configuration property "defaultMode" is deprecated and will be removed in a future version. */
3028
3024
  defaultMode?: UpiMode;
3029
3025
  mandate?: Mandate;
3030
3026
  apps?: Array<App>;
@@ -3036,7 +3032,6 @@ interface UPIConfiguration extends UIElementProps {
3036
3032
  /**
3037
3033
  * @internal
3038
3034
  */
3039
- segmentedControlOptions?: Array<SegmentedControlOption<UpiMode>>;
3040
3035
  paymentData?: string;
3041
3036
  qrCodeData?: string;
3042
3037
  brandLogo?: string;
@@ -4627,6 +4622,7 @@ interface GiftcardComponentProps {
4627
4622
  fieldsLayoutComponent: FunctionComponent<GiftcardFieldsProps>;
4628
4623
  placeholders?: Placeholders$1;
4629
4624
  handleKeyPress?: (o: KeyboardEvent) => void;
4625
+ onSubmitAnalytics?: (event: AbstractAnalyticsEvent) => void;
4630
4626
  }
4631
4627
  declare class Giftcard extends Component<GiftcardComponentProps> {
4632
4628
  state: {
@@ -5060,25 +5056,21 @@ declare class RatePayDirectDebit extends OpenInvoiceContainer {
5060
5056
 
5061
5057
  /**
5062
5058
  * For mobile:
5063
- * We should show upi_collect and upi_intent depending on if `apps` are returned in /paymentMethods response.
5064
- * If there is no apps, hide segmented controls.
5065
- * The upi_collect should always be on the second tab.
5066
- * Never show QR code.
5059
+ * We should show upi_intent depending on if `apps` are returned in /paymentMethods response.
5067
5060
  *
5068
5061
  * For non-mobile:
5069
5062
  * We should never show the upi_intent (ignore `apps` in /paymentMethods response)
5070
- * The upi_qr should be on the first tab and the upi_collect should be on second tab
5063
+ * Show upi_qr as default
5071
5064
  */
5072
5065
  declare class UPI extends UIElement<UPIConfiguration> {
5073
5066
  static type: TxVariants;
5074
- static txVariants: TxVariants[];
5075
- private selectedMode;
5067
+ static readonly txVariants: TxVariants[];
5068
+ private mode;
5076
5069
  constructor(checkout: ICore, props: UPIConfiguration);
5077
5070
  formatProps(props: UPIConfiguration): UPIConfiguration;
5078
5071
  get isValid(): boolean;
5079
5072
  formatData(): UpiPaymentData;
5080
5073
  get paymentType(): UpiType;
5081
- private onUpdateMode;
5082
5074
  protected componentToRender(): h.JSX.Element;
5083
5075
  }
5084
5076
 
@@ -5781,7 +5773,6 @@ declare const ComponentsMap: {
5781
5773
  payto: typeof PayToElement;
5782
5774
  upi: typeof UPI;
5783
5775
  upi_qr: typeof UPI;
5784
- upi_collect: typeof UPI;
5785
5776
  upi_intent: typeof UPI;
5786
5777
  /** Await */
5787
5778
  /** Giftcard */