{"version":3,"file":"host.js","mappings":"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","sources":["webpack://ps-neon/./node_modules/ts-enum-util/dist/es/index.js","webpack://ps-neon/./libs/core/common/src/lib/non-ng/enum-helpers.ts","webpack://ps-neon/./apps/pmt/src/shared/frame-message-type.ts","webpack://ps-neon/./apps/pmt/src/shared/default-message-queue.ts","webpack://ps-neon/./apps/pmt/src/shared/init-options/init-options.ts","webpack://ps-neon/./apps/pmt/src/shared/localization-by-field.ts","webpack://ps-neon/./apps/pmt/src/shared/localization-validation.ts","webpack://ps-neon/./apps/pmt/src/shared/init-options/localization-parser.ts","webpack://ps-neon/./apps/pmt/src/shared/style-dictionary.ts","webpack://ps-neon/./apps/pmt/src/shared/style-dictionary-by-pseudo-name.ts","webpack://ps-neon/./apps/pmt/src/shared/style-dictionary-by-pseudo-name-by-field.ts","webpack://ps-neon/./apps/pmt/src/shared/style-options.ts","webpack://ps-neon/./apps/pmt/src/shared/init-options/style-options-parser.ts","webpack://ps-neon/./apps/pmt/src/shared/localization-options.ts","webpack://ps-neon/./apps/pmt/src/shared/localization-defaults.ts","webpack://ps-neon/./apps/pmt/src/shared/settings.ts","webpack://ps-neon/./apps/pmt/src/host/default-host-listener-registry.ts","webpack://ps-neon/./apps/pmt/src/shared/message.ts","webpack://ps-neon/./apps/pmt/src/shared/host-message-type.ts","webpack://ps-neon/./apps/pmt/src/shared/mode.ts","webpack://ps-neon/./apps/pmt/src/shared/host-message.ts","webpack://ps-neon/./apps/pmt/src/shared/swipe-key-helper.service.ts","webpack://ps-neon/./apps/pmt/src/host/built-in-listeners.ts","webpack://ps-neon/./apps/pmt/src/shared/host-messages/init-message.ts","webpack://ps-neon/./apps/pmt/src/host/messenger.ts","webpack://ps-neon/./apps/pmt/src/host/host.ts","webpack://ps-neon/./apps/pmt/src/shared/frame-message.ts","webpack://ps-neon/./apps/pmt/src/host/message-parser.ts","webpack://ps-neon/./apps/pmt/src/shared/klarna-options.ts","webpack://ps-neon/./apps/pmt/src/shared/init-options/klarna-options-parser.ts","webpack://ps-neon/./apps/pmt/src/shared/wallet-options.ts","webpack://ps-neon/./apps/pmt/src/shared/init-options/wallet-options-parser.ts","webpack://ps-neon/./apps/pmt/src/host/main.ts"],"sourcesContent":["/**\r\n * A generic wrapper for any enum-like object (see {@link EnumLike}).\r\n * Provides utilities for runtime processing of an enum's values and keys, with strict compile-time\r\n * type safety.\r\n *\r\n * EnumWrapper cannot be directly instantiated. Use one of the following to get/create an EnumWrapper\r\n * instance:\r\n * - {@link $enum}\r\n * - {@link EnumWrapper.getCachedInstance}\r\n *\r\n * @template V - Type of the enum value.\r\n * @template T - Type of the enum-like object that is being wrapped.\r\n */\r\nvar EnumWrapper = /** @class */ (function () {\r\n /**\r\n * Create a new EnumWrapper instance.\r\n * This is for internal use only.\r\n * Use one of the following to publicly get/create an EnumWrapper\r\n * instance:\r\n * - {@link $enum}\r\n * - {@link EnumWrapper.getCachedInstance}\r\n *\r\n * @param enumObj - An enum-like object. See the {@link EnumLike} type for more explanation.\r\n */\r\n function EnumWrapper(enumObj) {\r\n this.enumObj = enumObj;\r\n this.keysList = Object.freeze(Object.keys(enumObj)\r\n // Include only keys that are not index keys.\r\n // This is necessary to ignore the reverse-lookup entries that are automatically added\r\n // by TypeScript to numeric enums.\r\n .filter(isNonIndexKey)\r\n // Order of Object.keys() is implementation-dependent, so sort the keys to guarantee\r\n // a consistent order for iteration.\r\n .sort());\r\n var length = this.keysList.length;\r\n var valuesList = new Array(length);\r\n var keysByValueMap = new Map();\r\n // According to multiple tests found on jsperf.com, a plain for loop is faster than using\r\n // Array.prototype.forEach\r\n for (var index = 0; index < length; ++index) {\r\n var key = this.keysList[index];\r\n var value = enumObj[key];\r\n valuesList[index] = value;\r\n keysByValueMap.set(value, key);\r\n // Type casting of \"this\" necessary to bypass readonly index signature for initialization.\r\n this[index] = Object.freeze([key, value]);\r\n }\r\n this.valuesList = Object.freeze(valuesList);\r\n this.keysByValueMap = keysByValueMap;\r\n this.size = this.length = length;\r\n // Make the EnumWrapper instance immutable\r\n Object.freeze(this);\r\n }\r\n /**\r\n * Gets a cached EnumWrapper for an enum-like object.\r\n * Creates and caches a new EnumWrapper if one is not already cached.\r\n * @param enumObj - An enum-like object.\r\n * @return An instance of EnumWrapper for the provided enumObj.\r\n */\r\n EnumWrapper.getCachedInstance = function (enumObj) {\r\n var result = EnumWrapper.instancesCache.get(enumObj);\r\n if (!result) {\r\n result = new EnumWrapper(enumObj);\r\n EnumWrapper.instancesCache.set(enumObj, result);\r\n }\r\n return result;\r\n };\r\n Object.defineProperty(EnumWrapper.prototype, Symbol.toStringTag, {\r\n get: function () {\r\n return \"EnumWrapper\";\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @return \"[object EnumWrapper]\"\r\n */\r\n EnumWrapper.prototype.toString = function () {\r\n // NOTE: overriding toString in addition to Symbol.toStringTag\r\n // for maximum compatibility with older runtime environments\r\n // that do not implement Object.prototype.toString in terms\r\n // of Symbol.toStringTag\r\n return \"[object EnumWrapper]\";\r\n };\r\n /**\r\n * Get an iterator for this enum's keys.\r\n * Iteration order is based on sorted order of keys.\r\n * Part of the Map-like interface.\r\n * @return An iterator that iterates over this enum's keys.\r\n */\r\n EnumWrapper.prototype.keys = function () {\r\n var _a;\r\n var _this = this;\r\n var index = 0;\r\n return _a = {\r\n next: function () {\r\n var isDone = index >= _this.length;\r\n var result = {\r\n done: isDone,\r\n value: _this.keysList[index]\r\n };\r\n ++index;\r\n return result;\r\n }\r\n },\r\n _a[Symbol.iterator] = function () {\r\n return this;\r\n },\r\n _a;\r\n };\r\n /**\r\n * Get an iterator for this enum's values.\r\n * Iteration order is based on sorted order of keys.\r\n * Part of the Map-like interface.\r\n * NOTE: If there are duplicate values in the enum, then there will also be duplicate values\r\n * in the result.\r\n * @return An iterator that iterates over this enum's values.\r\n */\r\n EnumWrapper.prototype.values = function () {\r\n var _a;\r\n var _this = this;\r\n var index = 0;\r\n return _a = {\r\n next: function () {\r\n var isDone = index >= _this.length;\r\n var result = {\r\n done: isDone,\r\n value: _this.valuesList[index]\r\n };\r\n ++index;\r\n return result;\r\n }\r\n },\r\n _a[Symbol.iterator] = function () {\r\n return this;\r\n },\r\n _a;\r\n };\r\n /**\r\n * Get an iterator for this enum's entries as [key, value] tuples.\r\n * Iteration order is based on sorted order of keys.\r\n * @return An iterator that iterates over this enum's entries as [key, value] tuples.\r\n */\r\n EnumWrapper.prototype.entries = function () {\r\n var _a;\r\n var _this = this;\r\n var index = 0;\r\n return _a = {\r\n next: function () {\r\n var isDone = index >= _this.length;\r\n var result = {\r\n done: isDone,\r\n // NOTE: defensive copy not necessary because entries are \"frozen\"\r\n value: _this[index]\r\n };\r\n ++index;\r\n return result;\r\n }\r\n },\r\n _a[Symbol.iterator] = function () {\r\n return this;\r\n },\r\n _a;\r\n };\r\n /**\r\n * Get an iterator for this enum's entries as [key, value] tuples.\r\n * Iteration order is based on sorted order of keys.\r\n * @return An iterator that iterates over this enum's entries as [key, value] tuples.\r\n */\r\n EnumWrapper.prototype[Symbol.iterator] = function () {\r\n return this.entries();\r\n };\r\n /**\r\n * Calls the provided iteratee on each item in this enum.\r\n * Iteration order is based on sorted order of keys.\r\n * See {@link EnumWrapper.Iteratee} for the signature of the iteratee.\r\n * The return value of the iteratee is ignored.\r\n * @param iteratee - The iteratee.\r\n * @param context - If provided, then the iteratee will be called with the context as its \"this\" value.\r\n */\r\n EnumWrapper.prototype.forEach = function (iteratee, context) {\r\n var length = this.length;\r\n // According to multiple tests found on jsperf.com, a plain for loop is faster than using\r\n // Array.prototype.forEach\r\n for (var index = 0; index < length; ++index) {\r\n var entry = this[index];\r\n iteratee.call(context, entry[1], entry[0], this, index);\r\n }\r\n };\r\n /**\r\n * Maps this enum's entries to a new list of values.\r\n * Iteration order is based on sorted order of keys.\r\n * Builds a new array containing the results of calling the provided iteratee on each item in this enum.\r\n * See {@link EnumWrapper.Iteratee} for the signature of the iteratee.\r\n * @param iteratee - The iteratee.\r\n * @param context - If provided, then the iteratee will be called with the context as its \"this\" value.\r\n * @return A new array containg the results of the iteratee.\r\n *\r\n * @template R - The of the mapped result for each entry.\r\n */\r\n EnumWrapper.prototype.map = function (iteratee, context) {\r\n var length = this.length;\r\n var result = new Array(length);\r\n // According to multiple tests found on jsperf.com, a plain for loop is faster than using Array.prototype.map\r\n for (var index = 0; index < length; ++index) {\r\n var entry = this[index];\r\n result[index] = iteratee.call(context, entry[1], entry[0], this, index);\r\n }\r\n return result;\r\n };\r\n /**\r\n * Get a list of this enum's keys.\r\n * Order of items in the list is based on sorted order of keys.\r\n * @return A list of this enum's keys.\r\n */\r\n EnumWrapper.prototype.getKeys = function () {\r\n // need to return a copy of this.keysList so it can be returned as Array instead of ReadonlyArray.\r\n return this.keysList.slice();\r\n };\r\n /**\r\n * Get a list of this enum's values.\r\n * Order of items in the list is based on sorted order of keys.\r\n * NOTE: If there are duplicate values in the enum, then there will also be duplicate values\r\n * in the result.\r\n * @return A list of this enum's values.\r\n */\r\n EnumWrapper.prototype.getValues = function () {\r\n // need to return a copy of this.valuesList so it can be returned as Array instead of ReadonlyArray.\r\n return this.valuesList.slice();\r\n };\r\n /**\r\n * Get a list of this enum's entries as [key, value] tuples.\r\n * Order of items in the list is based on sorted order of keys.\r\n * @return A list of this enum's entries as [key, value] tuples.\r\n */\r\n EnumWrapper.prototype.getEntries = function () {\r\n // Create an array from the indexed entries of \"this\".\r\n // NOTE: no need for defensive copy of each entry because all entries are \"frozen\".\r\n return Array.prototype.slice.call(this);\r\n };\r\n /**\r\n * Tests if the provided string is actually a valid key for this enum\r\n * Acts as a type guard to confirm that the provided value is actually the enum key type.\r\n * @param key - A potential key value for this enum.\r\n * @return True if the provided key is a valid key for this enum.\r\n */\r\n EnumWrapper.prototype.isKey = function (key) {\r\n return (key != null &&\r\n isNonIndexKey(key) &&\r\n this.enumObj.hasOwnProperty(key));\r\n };\r\n /**\r\n * Casts a string to a properly-typed key for this enum.\r\n * Throws an error if the key is invalid.\r\n * @param key - A potential key value for this enum.\r\n * @return The provided key value, cast to the type of this enum's keys.\r\n * @throws {Error} if the provided string is not a valid key for this enum.\r\n */\r\n EnumWrapper.prototype.asKeyOrThrow = function (key) {\r\n if (this.isKey(key)) {\r\n return key;\r\n }\r\n else {\r\n throw new Error(\"Unexpected key: \" + key + \". Expected one of: \" + this.getValues());\r\n }\r\n };\r\n /**\r\n * Casts a string to a properly-typed key for this enum.\r\n * Returns a default key if the provided key is invalid.\r\n * @param key - A potential key value for this enum.\r\n * @param defaultKey - The key to be returned if the provided key is invalid.\r\n * @return The provided key value, cast to the type of this enum's keys.\r\n * Returns `defaultKey` if the provided key is invalid.\r\n */\r\n EnumWrapper.prototype.asKeyOrDefault = function (key, defaultKey) {\r\n if (this.isKey(key)) {\r\n // type cast required to work around TypeScript bug:\r\n // https://github.com/Microsoft/TypeScript/issues/21950\r\n return key;\r\n }\r\n else {\r\n return defaultKey;\r\n }\r\n };\r\n /**\r\n * Tests if the provided value is a valid value for this enum.\r\n * Acts as a type guard to confirm that the provided value is actually the enum value type.\r\n * @param value - A potential value for this enum.\r\n * @return True if the provided value is valid for this enum.\r\n */\r\n EnumWrapper.prototype.isValue = function (value) {\r\n return value != null && this.keysByValueMap.has(value);\r\n };\r\n /**\r\n * Casts a value to a properly-typed value for this enum.\r\n * Throws an error if the value is invalid.\r\n * @param value - A potential value for this enum.\r\n * @return The provided value, cast to the type of this enum's values.\r\n * @throws {Error} if the provided value is not a valid value for this enum.\r\n */\r\n EnumWrapper.prototype.asValueOrThrow = function (value) {\r\n if (this.isValue(value)) {\r\n return value;\r\n }\r\n else {\r\n throw new Error(\"Unexpected value: \" + value + \". Expected one of: \" + this.getValues());\r\n }\r\n };\r\n /**\r\n * Casts a value to a properly-typed value for this enum.\r\n * Returns a default value if the provided value is invalid.\r\n * @param value - A potential value for this enum.\r\n * @param defaultValue - The value to be returned if the provided value is invalid.\r\n * @return The provided value, cast to the type of this enum's values.\r\n * Returns `defaultValue` if the provided value is invalid.\r\n */\r\n EnumWrapper.prototype.asValueOrDefault = function (value, defaultValue) {\r\n if (this.isValue(value)) {\r\n return value;\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n };\r\n /**\r\n * Performs a reverse lookup from enum value to corresponding enum key.\r\n * Throws an error if the value is invalid.\r\n * NOTE: If this enum has any duplicate values, then one of the keys for the duplicated value is\r\n * arbitrarily returned.\r\n * @param value - A potential value for this enum.\r\n * @return The key for the provided value.\r\n * @throws {Error} if the provided value is not a valid value for this enum.\r\n */\r\n EnumWrapper.prototype.getKeyOrThrow = function (value) {\r\n // NOTE: Intentionally not using isValue() or asValueOrThrow() to avoid making two key lookups into the map\r\n // for successful lookups.\r\n var result = value != null ? this.keysByValueMap.get(value) : undefined;\r\n if (result != null) {\r\n return result;\r\n }\r\n else {\r\n throw new Error(\"Unexpected value: \" + value + \". Expected one of: \" + this.getValues());\r\n }\r\n };\r\n /**\r\n * Performs a reverse lookup from enum value to corresponding enum key.\r\n * Returns a default key if the provided value is invalid.\r\n * NOTE: If this enum has any duplicate values, then one of the keys for the duplicated value is\r\n * arbitrarily returned.\r\n * @param value - A potential value for this enum.\r\n * @param defaultKey - The key to be returned if the provided value is invalid.\r\n * @return The key for the provided value.\r\n * Returns `defaultKey` if the provided value is invalid.\r\n */\r\n EnumWrapper.prototype.getKeyOrDefault = function (value, defaultKey) {\r\n // NOTE: Intentionally not using isValue() to avoid making two key lookups into the map for successful lookups.\r\n var result = value != null ? this.keysByValueMap.get(value) : undefined;\r\n if (result != null) {\r\n return result;\r\n }\r\n else {\r\n return defaultKey;\r\n }\r\n };\r\n /**\r\n * Gets the enum value for the provided key.\r\n * Throws an error if the provided key is invalid.\r\n * @param key - A potential key value for this enum.\r\n * @return The enum value for the provided key.\r\n * @throws {Error} if the provided string is not a valid key for this enum.\r\n */\r\n EnumWrapper.prototype.getValueOrThrow = function (key) {\r\n // NOTE: The key MUST be separately validated before looking up the entry in enumObj to avoid false positive\r\n // lookups for keys that match properties on Object.prototype, or keys that match the index keys of\r\n // reverse lookups on numeric enums.\r\n return this.enumObj[this.asKeyOrThrow(key)];\r\n };\r\n /**\r\n * Gets the enum value for the provided key.\r\n * Returns a default value if the provided key is invalid.\r\n * @param key - A potential key value for this enum.\r\n * @param defaultValue - The value to be returned if the provided key is invalid.\r\n * @return The enum value for the provided key.\r\n * Returns `defaultValue` if the provided key is invalid.\r\n */\r\n EnumWrapper.prototype.getValueOrDefault = function (key, defaultValue) {\r\n // NOTE: The key MUST be separately validated before looking up the entry in enumObj to avoid false positive\r\n // lookups for keys that match properties on Object.prototype, or keys that match the index keys of\r\n // reverse lookups on numeric enums.\r\n if (this.isKey(key)) {\r\n // type cast required to work around TypeScript bug:\r\n // https://github.com/Microsoft/TypeScript/issues/21950\r\n return this.enumObj[key];\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n };\r\n /**\r\n * Map of enum object -> EnumWrapper instance.\r\n * Used as a cache for {@link EnumWrapper.getCachedInstance} (and {@link $enum}).\r\n * NOTE: WeakMap has very fast lookups and avoids memory leaks if used on a temporary\r\n * enum-like object. Even if a WeakMap implementation is very naiive (like a Map polyfill),\r\n * lookups are plenty fast for this use case of a relatively small number of enums within\r\n * a project. Just don't perform cached lookups inside tight loops when\r\n * you could cache the result in a local variable, and you'll be fine :)\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap}\r\n * {@link https://www.measurethat.net/Benchmarks/Show/2513/5/map-keyed-by-object}\r\n */\r\n EnumWrapper.instancesCache = new WeakMap();\r\n return EnumWrapper;\r\n}());\r\nexport { EnumWrapper };\r\n/**\r\n * Alias of {@link EnumWrapper.getCachedInstance} for convenience.\r\n * Gets a cached EnumWrapper for an enum-like object.\r\n * Creates and caches a new EnumWrapper if one is not already cached.\r\n * @param enumObj - An enum-like object.\r\n * @return An instance of EnumWrapper for the provided enumObj.\r\n */\r\nexport var $enum = EnumWrapper.getCachedInstance;\r\n/**\r\n * Return true if the specified object key value is NOT an integer index key.\r\n * @param key - An object key.\r\n * @return true if the specified object key value is NOT an integer index key.\r\n */\r\nfunction isNonIndexKey(key) {\r\n // If after converting the key to an integer, then back to a string, the result is different\r\n // than the original key, then the key is NOT an integer index.\r\n // See ECMAScript spec section 15.4: http://www.ecma-international.org/ecma-262/5.1/#sec-15.4\r\n return key !== String(parseInt(key, 10));\r\n}\r\n//# sourceMappingURL=index.js.map","import { $enum } from 'ts-enum-util';\r\n\r\nexport class NonNgEnumHelpers {\r\n /**\r\n * Gets an array of all values assigned in a TypeScript enumeration\r\n * @param enumObject Enumeration Object to get values from\r\n */\r\n values(enumObj: T): any[] {\r\n return $enum(enumObj as any).getValues();\r\n }\r\n\r\n /**\r\n * Finds the value from a TypeScript enumeration\r\n * @param enumObject Enumeration Object to get key from\r\n * @param value Value to find in the enumeration\r\n */\r\n getValueFromEnum(enumObj: T, value: any): T[keyof T] | undefined {\r\n const keys = Object.keys(enumObj);\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n const keyValue = (enumObj as any)[key];\r\n\r\n if (keyValue === value) {\r\n return (keyValue as any) as T[keyof T];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds the key of a given value from a TypeScript enumeration\r\n * @param enumObject Enumeration Object to get key from\r\n * @param value Value to find in the enumeration\r\n */\r\n getKeyFromValue(enumObj: T, value: any): T[keyof T] | undefined {\r\n const keys = Object.keys(enumObj);\r\n\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n const keyValue = (enumObj as any)[key];\r\n\r\n if (keyValue === value) {\r\n return (key as any) as T[keyof T];\r\n }\r\n }\r\n }\r\n}\r\n","export enum FrameMessageType {\r\n AddPaymentMethodFailed = 'add-payment-method-failed',\r\n AddPaymentMethodSucceeded = 'add-payment-method-succeeded',\r\n HeightChanged = 'height-changed',\r\n InitAck = 'init-ack',\r\n SwiperLostFocus = 'swiper-lost-focus',\r\n ValidityChanged = 'validity-changed',\r\n ModeChanged = 'mode-changed',\r\n KlarnaSaleSucceeded = 'klarna-sale-succeeded',\r\n KlarnaSaleFailed = 'klarna-sale-failed',\r\n MerchantInit = 'merchant-init',\r\n MerchantInitFailed = 'merchant-init-failed'\r\n}\r\n","import { Message } from './message';\r\nimport { MessageQueue } from './message-queue';\r\nimport { SendMessageFn } from './send-message-fn';\r\n\r\nexport class DefaultMessageQueue implements MessageQueue {\r\n private _sendMessageFn: SendMessageFn | null;\r\n private readonly _queue: any[];\r\n\r\n constructor() {\r\n this._sendMessageFn = null;\r\n this._queue = [];\r\n }\r\n\r\n setSendMessageFn(sendMessageFn: SendMessageFn) {\r\n this._sendMessageFn = sendMessageFn;\r\n this._processQueue();\r\n }\r\n\r\n add(message: Message) {\r\n this._queue.push(message);\r\n this._processQueue();\r\n }\r\n\r\n private _processQueue() {\r\n if (!this._sendMessageFn || !this._queue.length) {\r\n return;\r\n }\r\n\r\n const message = this._queue.splice(0, 1)[0];\r\n\r\n this._sendMessageFn(message);\r\n\r\n this._processQueue();\r\n }\r\n}\r\n","import { LocalizationOptions } from '../localization-options';\r\nimport { Parser } from '../parser';\r\nimport { StyleOptions } from '../style-options';\r\nimport { LocalizationParserOptions } from './localization-parser-options';\r\nimport { RawInitOptions } from './raw-init-options';\r\nimport { RawInitOptionsLocalization } from './raw-init-options-localization';\r\nimport { RawInitOptionsStyles } from './raw-init-options-styles';\r\nimport { KlarnaOptions } from '../klarna-options';\r\nimport { RawInitOptionsKlarna } from './raw-init-options-klarna';\r\nimport { RawInitOptionsWallet } from \"./raw-init-options-wallet\";\r\nimport { WalletOptions } from '../wallet-options';\r\nimport { EndUserInfo } from '../end-user-info';\r\n\r\nexport class InitOptions {\r\n readonly container: HTMLElement;\r\n readonly debug: boolean;\r\n readonly merchantKey: string;\r\n readonly singleColumnLayoutBreakpoint: number;\r\n readonly acceptInternationalPostalCodes: boolean;\r\n readonly requireCardholderName: boolean;\r\n readonly showPlaceholders: boolean;\r\n readonly styles: StyleOptions;\r\n readonly localization: LocalizationOptions;\r\n readonly autoFocusOnFirstField: boolean;\r\n readonly klarna: KlarnaOptions;\r\n readonly wallet: WalletOptions;\r\n\r\n constructor(\r\n styleOptionsParser: Parser,\r\n localizationParser: Parser,\r\n klarnaOptionsParser: Parser,\r\n walletOptionsParser: Parser,\r\n rawInitOptions: RawInitOptions | undefined,\r\n readonly endUserInfo: EndUserInfo,\r\n ) {\r\n if (!rawInitOptions) {\r\n throw new Error('No options were passed in.');\r\n }\r\n\r\n InitOptions._ensureValidity(rawInitOptions);\r\n\r\n this.container = rawInitOptions.container;\r\n this.debug = rawInitOptions.debug || false;\r\n this.merchantKey = rawInitOptions.merchantKey;\r\n this.singleColumnLayoutBreakpoint = rawInitOptions.singleColumnLayoutBreakpoint || 768;\r\n this.acceptInternationalPostalCodes = rawInitOptions.acceptInternationalPostalCodes || false;\r\n this.autoFocusOnFirstField = rawInitOptions.autoFocusOnFirstField === null || rawInitOptions.autoFocusOnFirstField === undefined\r\n ? false : rawInitOptions.autoFocusOnFirstField;\r\n this.requireCardholderName =\r\n rawInitOptions.requireCardholderName === null || rawInitOptions.requireCardholderName === undefined\r\n ? true\r\n : rawInitOptions.requireCardholderName;\r\n this.showPlaceholders =\r\n rawInitOptions.showPlaceholders === null || rawInitOptions.showPlaceholders === undefined\r\n ? true\r\n : rawInitOptions.showPlaceholders;\r\n this.styles = styleOptionsParser.parse(rawInitOptions.styles);\r\n this.localization = localizationParser.parse(rawInitOptions.localization, {\r\n showPlaceholders: this.showPlaceholders,\r\n });\r\n this.klarna = klarnaOptionsParser.parse(rawInitOptions.klarna);\r\n this.wallet = walletOptionsParser.parse(rawInitOptions.wallet);\r\n }\r\n\r\n private static _ensureValidity(rawInitOptions: RawInitOptions) {\r\n if (!rawInitOptions.container) {\r\n throw new Error('Property \"container\" is required.');\r\n }\r\n\r\n if (!rawInitOptions.merchantKey) {\r\n throw new Error('Property \"merchantKey\" is required.');\r\n }\r\n }\r\n}\r\n","export class LocalizationByField {\r\n cardholderName: string;\r\n cardNumber: string;\r\n expiration: string;\r\n cvv: string;\r\n postalCode: string;\r\n routingNumber: string;\r\n accountNumber: string;\r\n accountHolder: string;\r\n accountType: string;\r\n companyName: string;\r\n emailAddress: string;\r\n countryCode: string;\r\n fullName: string;\r\n\r\n constructor() {\r\n this.cardholderName = '';\r\n this.cardNumber = '';\r\n this.expiration = '';\r\n this.cvv = '';\r\n this.postalCode = '';\r\n this.routingNumber = '';\r\n this.accountNumber = '';\r\n this.accountHolder = '';\r\n this.accountType = '';\r\n this.companyName = '';\r\n this.emailAddress = '';\r\n this.countryCode = '';\r\n this.fullName = '';\r\n }\r\n}\r\n","import { LocalizationByField } from './localization-by-field';\r\n\r\nexport class LocalizationValidation {\r\n invalidCardholderName: string;\r\n invalidCardNumber: string;\r\n invalidCardType: string;\r\n invalidExpiration: string;\r\n invalidCvv: string;\r\n invalidPostalCode: string;\r\n invalidRoutingNumber: string;\r\n invalidAccountNumber: string;\r\n invalidAccountHolder: string;\r\n invalidAccountType: string;\r\n invalidCompanyName: string;\r\n invalidEmailAddress: string;\r\n invalidCountryCode: string;\r\n invalidFullName: string;\r\n required: LocalizationByField;\r\n\r\n constructor() {\r\n this.invalidCardholderName = '';\r\n this.invalidCardNumber = '';\r\n this.invalidCardType = '';\r\n this.invalidExpiration = '';\r\n this.invalidCvv = '';\r\n this.invalidPostalCode = '';\r\n this.invalidRoutingNumber = '';\r\n this.invalidAccountNumber = '';\r\n this.invalidAccountHolder = '';\r\n this.invalidAccountType = '';\r\n this.invalidCompanyName = '';\r\n this.invalidEmailAddress = '';\r\n this.invalidCountryCode = '';\r\n this.invalidFullName = '';\r\n this.required = new LocalizationByField();\r\n }\r\n}\r\n","import { LocalizationByField } from '../localization-by-field';\r\nimport { LocalizationDefaults } from '../localization-defaults';\r\nimport { LocalizationOptions } from '../localization-options';\r\nimport { LocalizationValidation } from '../localization-validation';\r\nimport { Parser } from '../parser';\r\nimport { Settings } from '../settings';\r\nimport { LocalizationParserOptions } from './localization-parser-options';\r\nimport { RawInitOptionsLocalization } from './raw-init-options-localization';\r\nimport { RawInitOptionsLocalizationByField } from './raw-init-options-localization-by-field';\r\nimport { RawInitOptionsLocalizationValidation } from './raw-init-options-localization-validation';\r\n\r\nexport class LocalizationParser\r\n implements Parser {\r\n constructor(private readonly _settings: Settings, private readonly _localizationDefaults: LocalizationDefaults) {}\r\n\r\n parse(\r\n rawInitOptionsLocalization: RawInitOptionsLocalization | undefined,\r\n options: LocalizationParserOptions,\r\n ): LocalizationOptions {\r\n const result = this._localizationDefaults.get(options.showPlaceholders);\r\n\r\n if (!rawInitOptionsLocalization) {\r\n return result;\r\n }\r\n\r\n result.label = this._parseLocalizationByField(rawInitOptionsLocalization.label, result.label);\r\n\r\n if (options.showPlaceholders) {\r\n result.placeholder = this._parseLocalizationByField(rawInitOptionsLocalization.placeholder, result.placeholder);\r\n }\r\n\r\n result.validation = this._parseLocalizationValidation(rawInitOptionsLocalization.validation, result.validation);\r\n\r\n return result;\r\n }\r\n\r\n private _parseLocalizationByField(\r\n rawInitOptionsLocalizationByField: RawInitOptionsLocalizationByField | undefined,\r\n defaults: LocalizationByField,\r\n ): LocalizationByField {\r\n if (!rawInitOptionsLocalizationByField) {\r\n return defaults;\r\n }\r\n\r\n const result = new LocalizationByField();\r\n\r\n this._settings.fieldNames.forEach(field => {\r\n const localizedText = (rawInitOptionsLocalizationByField as any)[field] as string | undefined;\r\n (result as any)[field] = localizedText || (defaults as any)[field];\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private _parseLocalizationValidation(\r\n rawInitOptionsLocalizationValidation: RawInitOptionsLocalizationValidation | undefined,\r\n defaults: LocalizationValidation,\r\n ): LocalizationValidation {\r\n if (!rawInitOptionsLocalizationValidation) {\r\n return defaults;\r\n }\r\n\r\n const result = new LocalizationValidation();\r\n\r\n this._settings.validationNames.forEach(validation => {\r\n const localizedText = (rawInitOptionsLocalizationValidation as any)[validation] as string | undefined;\r\n (result as any)[validation] = localizedText || (defaults as any)[validation];\r\n });\r\n\r\n if (rawInitOptionsLocalizationValidation.required) {\r\n const resultRequired = result.required;\r\n const customDefaultRequiredText = rawInitOptionsLocalizationValidation.required.default;\r\n const defaultRequired = defaults.required;\r\n\r\n this._settings.fieldNames.forEach(field => {\r\n const localizedText = (rawInitOptionsLocalizationValidation.required as any)[field] as string | undefined;\r\n (resultRequired as any)[field] = localizedText || customDefaultRequiredText || (defaultRequired as any)[field];\r\n });\r\n } else {\r\n result.required = defaults.required;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","export class StyleDictionary {\r\n readonly styles: { [style: string]: string };\r\n\r\n constructor(styles?: { [style: string]: string }) {\r\n this.styles = styles || {};\r\n }\r\n\r\n add(key: string, value: string) {\r\n this.styles[key] = value;\r\n }\r\n}\r\n","import { StyleDictionary } from './style-dictionary';\r\n\r\nexport class StyleDictionaryByPseudoName {\r\n base: StyleDictionary;\r\n focus: StyleDictionary;\r\n hover: StyleDictionary;\r\n placeholder: StyleDictionary;\r\n\r\n constructor() {\r\n this.base = new StyleDictionary();\r\n this.focus = new StyleDictionary();\r\n this.hover = new StyleDictionary();\r\n this.placeholder = new StyleDictionary();\r\n }\r\n}\r\n","import { StyleDictionaryByPseudoName } from './style-dictionary-by-pseudo-name';\r\n\r\nexport class StyleDictionaryByPseudoNameByField {\r\n cardholderName: StyleDictionaryByPseudoName;\r\n cardNumber: StyleDictionaryByPseudoName;\r\n expiration: StyleDictionaryByPseudoName;\r\n cvv: StyleDictionaryByPseudoName;\r\n postalCode: StyleDictionaryByPseudoName;\r\n routingNumber: StyleDictionaryByPseudoName;\r\n accountNumber: StyleDictionaryByPseudoName;\r\n accountHolder: StyleDictionaryByPseudoName;\r\n accountType: StyleDictionaryByPseudoName;\r\n companyName: StyleDictionaryByPseudoName;\r\n\r\n constructor() {\r\n this.cardholderName = new StyleDictionaryByPseudoName();\r\n this.cardNumber = new StyleDictionaryByPseudoName();\r\n this.expiration = new StyleDictionaryByPseudoName();\r\n this.cvv = new StyleDictionaryByPseudoName();\r\n this.postalCode = new StyleDictionaryByPseudoName();\r\n this.routingNumber = new StyleDictionaryByPseudoName();\r\n this.accountNumber = new StyleDictionaryByPseudoName();\r\n this.accountHolder = new StyleDictionaryByPseudoName();\r\n this.accountType = new StyleDictionaryByPseudoName();\r\n this.companyName = new StyleDictionaryByPseudoName();\r\n }\r\n}\r\n","import { StyleDictionaryByPseudoName } from './style-dictionary-by-pseudo-name';\r\nimport { StyleDictionaryByPseudoNameByField } from './style-dictionary-by-pseudo-name-by-field';\r\n\r\nexport class StyleOptions {\r\n readonly $className = 'StyleOptions';\r\n body: StyleDictionaryByPseudoName;\r\n cardType: StyleDictionaryByPseudoName;\r\n container: StyleDictionaryByPseudoNameByField;\r\n label: StyleDictionaryByPseudoNameByField;\r\n input: StyleDictionaryByPseudoNameByField;\r\n select:StyleDictionaryByPseudoNameByField;\r\n validation: StyleDictionaryByPseudoNameByField;\r\n errorLabel: StyleDictionaryByPseudoNameByField;\r\n errorInput: StyleDictionaryByPseudoNameByField;\r\n\r\n constructor() {\r\n this.body = new StyleDictionaryByPseudoName();\r\n this.cardType = new StyleDictionaryByPseudoName();\r\n this.container = new StyleDictionaryByPseudoNameByField();\r\n this.label = new StyleDictionaryByPseudoNameByField();\r\n this.input = new StyleDictionaryByPseudoNameByField();\r\n this.select = new StyleDictionaryByPseudoNameByField();\r\n this.validation = new StyleDictionaryByPseudoNameByField();\r\n this.errorLabel = new StyleDictionaryByPseudoNameByField();\r\n this.errorInput = new StyleDictionaryByPseudoNameByField();\r\n }\r\n}\r\n","import { Parser } from '../parser';\r\nimport { Settings } from '../settings';\r\nimport { StyleDictionary } from '../style-dictionary';\r\nimport { StyleDictionaryByPseudoName } from '../style-dictionary-by-pseudo-name';\r\nimport { StyleDictionaryByPseudoNameByField } from '../style-dictionary-by-pseudo-name-by-field';\r\nimport { StyleOptions } from '../style-options';\r\nimport { RawInitOptionsStyles } from './raw-init-options-styles';\r\nimport { RawStyleDictionaryByPseudoName } from './raw-style-dictionary-by-pseudo-name';\r\nimport { RawStyleDictionaryByPseudoNameByField } from './raw-style-dictionary-by-pseudo-name-by-field';\r\n\r\nconst PSEUDO_STYLE_REGEX = /^:([a-z]+)$/;\r\nconst VALID_PSEUDO_KEYS = ['focus', 'hover', 'placeholder'];\r\n\r\nexport class StyleOptionsParser implements Parser {\r\n constructor(private readonly _settings: Settings) { }\r\n\r\n private static _normalizeKey(key: string): string {\r\n // Convert to valid css property (e.g \"backgroundColor\" to \"background-color\")\r\n return key.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\r\n }\r\n\r\n private static _isObject(value: any): boolean {\r\n const valueAsString = Object.prototype.toString.call(value);\r\n return (\r\n value !== undefined &&\r\n value !== null &&\r\n typeof value === 'object' &&\r\n valueAsString !== '[object RegExp]' &&\r\n valueAsString !== '[object Date]'\r\n );\r\n }\r\n\r\n private static _mergeStyleDictionaries(src1: StyleDictionary, src2: StyleDictionary): StyleDictionary {\r\n const result: { [style: string]: string } = {};\r\n\r\n Object.keys(src1.styles).forEach(key => {\r\n result[key] = src1.styles[key];\r\n });\r\n\r\n Object.keys(src2.styles).forEach(key => {\r\n result[key] = src2.styles[key];\r\n });\r\n\r\n return new StyleDictionary(result);\r\n }\r\n\r\n parse(rawInitOptionsStyles: RawInitOptionsStyles | undefined): StyleOptions {\r\n const result = new StyleOptions();\r\n\r\n if (!rawInitOptionsStyles) {\r\n return result;\r\n }\r\n\r\n result.body = this._parseStyleDictionaryByPseudoName(rawInitOptionsStyles.body);\r\n result.cardType = this._parseStyleDictionaryByPseudoName(rawInitOptionsStyles.cardType);\r\n result.container = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.container);\r\n result.label = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.label);\r\n result.input = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.input);\r\n result.select = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.select);\r\n result.validation = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.validation);\r\n result.errorLabel = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.errorLabel);\r\n result.errorInput = this._parseStyleDictionaryByPseudoNameByField(rawInitOptionsStyles.errorInput);\r\n\r\n return result;\r\n }\r\n\r\n private _parseStyleDictionary(rawStyles: string | RawStyleDictionaryByPseudoName | undefined): StyleDictionary {\r\n const styles = new StyleDictionary();\r\n\r\n if (rawStyles === undefined || rawStyles === null || !StyleOptionsParser._isObject(rawStyles)) {\r\n return styles;\r\n }\r\n\r\n Object.keys(rawStyles).forEach(key => {\r\n const style = (rawStyles as any)[key];\r\n\r\n if (style === undefined || style === null || StyleOptionsParser._isObject(style)) {\r\n return;\r\n }\r\n\r\n styles.add(StyleOptionsParser._normalizeKey(key), style);\r\n });\r\n\r\n return styles;\r\n }\r\n\r\n private _parseStyleDictionaryByPseudoName(\r\n rawStyleDictionary: RawStyleDictionaryByPseudoName | undefined,\r\n ): StyleDictionaryByPseudoName {\r\n const result = new StyleDictionaryByPseudoName();\r\n\r\n if (rawStyleDictionary === undefined || rawStyleDictionary === null) {\r\n return result;\r\n }\r\n\r\n Object.keys(rawStyleDictionary).forEach(key => {\r\n const style = rawStyleDictionary[key];\r\n\r\n if (style === undefined || style === null || style === '') {\r\n return;\r\n }\r\n\r\n const match = key.match(PSEUDO_STYLE_REGEX);\r\n\r\n if (match) {\r\n const pseudoKey = match[1];\r\n\r\n if (VALID_PSEUDO_KEYS.indexOf(pseudoKey) === -1) {\r\n return;\r\n }\r\n\r\n (result as any)[pseudoKey] = this._parseStyleDictionary(rawStyleDictionary[key]);\r\n } else {\r\n if (style === undefined || style === null || StyleOptionsParser._isObject(style)) {\r\n return;\r\n }\r\n\r\n result.base.add(StyleOptionsParser._normalizeKey(key), style as string);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private _parseStyleDictionaryByPseudoNameByField(\r\n rawStyleDictionaryByField: RawStyleDictionaryByPseudoNameByField | undefined,\r\n ): StyleDictionaryByPseudoNameByField {\r\n const result = new StyleDictionaryByPseudoNameByField();\r\n\r\n if (!rawStyleDictionaryByField) {\r\n return result;\r\n }\r\n\r\n const defaultStyles = this._parseStyleDictionaryByPseudoName(rawStyleDictionaryByField.default);\r\n\r\n this._settings.fieldNames.forEach(field => {\r\n const fieldStyles = this._parseStyleDictionaryByPseudoName(rawStyleDictionaryByField[field]);\r\n\r\n const finalStyles = new StyleDictionaryByPseudoName();\r\n\r\n finalStyles.base = StyleOptionsParser._mergeStyleDictionaries(defaultStyles.base, fieldStyles.base);\r\n finalStyles.focus = StyleOptionsParser._mergeStyleDictionaries(defaultStyles.focus, fieldStyles.focus);\r\n finalStyles.hover = StyleOptionsParser._mergeStyleDictionaries(defaultStyles.hover, fieldStyles.hover);\r\n finalStyles.placeholder = StyleOptionsParser._mergeStyleDictionaries(\r\n defaultStyles.placeholder,\r\n fieldStyles.placeholder,\r\n );\r\n\r\n (result as any)[field] = finalStyles;\r\n });\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import { LocalizationByField } from './localization-by-field';\r\nimport { LocalizationValidation } from './localization-validation';\r\n\r\nexport class LocalizationOptions {\r\n readonly $className = 'LocalizationOptions';\r\n label: LocalizationByField;\r\n placeholder: LocalizationByField;\r\n validation: LocalizationValidation;\r\n\r\n constructor() {\r\n this.label = new LocalizationByField();\r\n this.placeholder = new LocalizationByField();\r\n this.validation = new LocalizationValidation();\r\n }\r\n}\r\n","import { LocalizationOptions } from './localization-options';\r\n\r\nexport class LocalizationDefaults {\r\n get(showPlaceholders: boolean): LocalizationOptions {\r\n return getDefaultSkinLocalization(showPlaceholders);\r\n }\r\n}\r\n\r\nfunction getDefaultSkinLocalization(showPlaceholders: boolean): LocalizationOptions {\r\n const result = new LocalizationOptions();\r\n const label = result.label;\r\n label.cardholderName = 'Cardholder Name';\r\n label.cardNumber = 'Credit Card';\r\n label.expiration = 'Expiration';\r\n label.cvv = 'Security Code';\r\n label.postalCode = 'Zip/Postal Code';\r\n label.routingNumber = 'Routing Number';\r\n label.accountNumber = 'Account Number';\r\n label.accountHolder = 'Account Holder';\r\n label.accountType = 'Account Type';\r\n label.companyName = 'Company Name';\r\n label.emailAddress = 'Email Address';\r\n label.countryCode = 'Country';\r\n label.fullName = 'Full Name';\r\n\r\n if (showPlaceholders) {\r\n const placeholder = result.placeholder;\r\n placeholder.cardholderName = 'Cardholder Name';\r\n placeholder.cardNumber = 'Key enter credit card';\r\n placeholder.expiration = 'mm/yy';\r\n placeholder.cvv = 'CVV';\r\n placeholder.postalCode = '12345';\r\n placeholder.routingNumber = 'Routing Number';\r\n placeholder.accountNumber = 'Account Number';\r\n placeholder.accountHolder = 'Account Holder';\r\n placeholder.accountType = '';\r\n placeholder.companyName = 'Company Name';\r\n placeholder.emailAddress = 'Email Address';\r\n placeholder.countryCode = 'Country';\r\n placeholder.fullName = 'Full Name';\r\n }\r\n\r\n const validation = result.validation;\r\n validation.invalidCardholderName = 'Cardholder Name is invalid';\r\n validation.invalidCardNumber = 'Credit Card is an invalid card number';\r\n validation.invalidCardType = 'Credit Card is an invalid card type';\r\n validation.invalidExpiration = 'Expiration is invalid';\r\n validation.invalidCvv = 'Security Code is invalid';\r\n validation.invalidPostalCode = 'Zip/Postal Code is invalid';\r\n validation.invalidRoutingNumber = 'Routing Number is invalid';\r\n validation.invalidAccountNumber = 'Account Number is invalid';\r\n validation.invalidAccountHolder = 'Account Holder is invalid';\r\n validation.invalidAccountType = 'Account Type is invalid';\r\n validation.invalidCompanyName = 'Company Name is invalid';\r\n validation.invalidEmailAddress = 'Email Address is invalid';\r\n validation.invalidCountryCode = 'Invalid Country';\r\n validation.invalidFullName = 'Full Name is invalid';\r\n\r\n const required = validation.required;\r\n required.cardholderName = 'Cardholder Name is required';\r\n required.cardNumber = 'Credit Card is required';\r\n required.expiration = 'Expiration is required';\r\n required.cvv = 'Security Code is required';\r\n required.postalCode = 'Zip/Postal Code is required';\r\n required.routingNumber = 'Routing Number is required';\r\n required.accountNumber = 'Account Number is required';\r\n required.accountHolder = 'Account Holder is required';\r\n required.accountType = 'Account Type is required';\r\n required.companyName = 'Company Name is required';\r\n required.emailAddress = 'Email Address is required';\r\n required.countryCode = 'Country is required';\r\n return result;\r\n}\r\n","export class Settings {\r\n get fieldNames(): string[] {\r\n return [\r\n 'cardholderName',\r\n 'cardNumber',\r\n 'expiration',\r\n 'cvv',\r\n 'postalCode',\r\n 'routingNumber',\r\n 'accountNumber',\r\n 'accountHolder',\r\n 'accountType',\r\n 'companyName',\r\n ];\r\n }\r\n\r\n get validationNames(): string[] {\r\n return [\r\n 'invalidCardholderName',\r\n 'invalidCardNumber',\r\n 'invalidCardType',\r\n 'invalidExpiration',\r\n 'invalidCvv',\r\n 'invalidPostalCode',\r\n 'invalidRoutingNumber',\r\n 'invalidAccountNumber',\r\n 'invalidAccountHolder',\r\n 'invalidAccountType',\r\n 'invalidCompanyName',\r\n ];\r\n }\r\n}\r\n","import { BuiltInHostListenerCallback } from './built-in-host-listener-callback';\r\nimport { CustomHostListenerCallback } from './custom-host-listener-callback';\r\nimport { HostListenerCallbackContext } from './host-listener-callback-context';\r\nimport { HostListenerRegistry } from './host-listener-registry';\r\n\r\nexport class DefaultHostListenerRegistry implements HostListenerRegistry {\r\n private _dictionary: ListenerDictionary;\r\n\r\n constructor() {\r\n this._dictionary = {\r\n builtIn: {},\r\n custom: {},\r\n };\r\n }\r\n\r\n addBuiltIn(type: string, callback: BuiltInHostListenerCallback) {\r\n if (!this._dictionary.builtIn[type]) {\r\n this._dictionary.builtIn[type] = [];\r\n }\r\n\r\n this._dictionary.builtIn[type].push(callback);\r\n }\r\n\r\n addCustom(type: string, callback: CustomHostListenerCallback) {\r\n if (!this._dictionary.custom[type]) {\r\n this._dictionary.custom[type] = [];\r\n }\r\n\r\n this._dictionary.custom[type].push(callback);\r\n }\r\n\r\n clear() {\r\n this._dictionary = {\r\n builtIn: {},\r\n custom: {},\r\n };\r\n }\r\n\r\n trigger(context: HostListenerCallbackContext) {\r\n const type = context.message.type;\r\n\r\n if (this._dictionary.builtIn[type]) {\r\n this._dictionary.builtIn[type].forEach(listener => {\r\n const boundListener = listener.bind(null) as BuiltInHostListenerCallback;\r\n boundListener(context);\r\n });\r\n }\r\n\r\n if (this._dictionary.custom[type]) {\r\n this._dictionary.custom[type].forEach(listener => {\r\n const boundListener = listener.bind(null) as CustomHostListenerCallback;\r\n boundListener(context.message.body);\r\n });\r\n }\r\n }\r\n}\r\n\r\ninterface ListenerDictionary {\r\n builtIn: { [messageType: string]: BuiltInHostListenerCallback[] };\r\n custom: { [messageType: string]: CustomHostListenerCallback[] };\r\n}\r\n","export abstract class Message {\r\n constructor(readonly type: TMessageTypeEnum, readonly body?: TBody) {}\r\n}\r\n","export enum HostMessageType {\r\n Init = 'init',\r\n ResetForm = 'reset-form',\r\n SetFormToSubmitted = 'set-form-to-submitted',\r\n SetMode = 'set-mode',\r\n SetSwiperFocus = 'set-swiper-focus',\r\n SubmitForm = 'submit-form',\r\n SwipeData = 'swipe-data',\r\n}\r\n","export enum Mode {\r\n CcInput = 'cc-input',\r\n CcSwiper = 'cc-swiper',\r\n AchInput = 'ach-input',\r\n Klarna = 'klarna-input',\r\n Undefined = '',\r\n}\r\n","import { HostMessageType } from './host-message-type';\r\nimport { Message } from './message';\r\n\r\nexport class HostMessage extends Message {\r\n constructor(type: HostMessageType, body?: TBody) {\r\n super(type, body);\r\n }\r\n}\r\n","export class SwipeKeyHelper {\r\n private _altKeys = '';\r\n\r\n getKeyData(event: KeyboardEvent): string | null {\r\n let char = event.key;\r\n const charUpper = char.toUpperCase();\r\n\r\n // idtech sends the alt code ALT+013 for a newline instead of enter.\r\n if (charUpper === 'ALT' && this._altKeys === '013') return '\\n';\r\n\r\n if (char.length > 1) {\r\n if (charUpper === 'ENTER') char = '\\n';\r\n // IE sets the space key as 'Spacebar' instead of ' '\r\n else if (charUpper === 'SPACEBAR') char = ' ';\r\n else return null;\r\n }\r\n if (event.altKey) {\r\n this._altKeys += char;\r\n return null;\r\n } else this._altKeys = '';\r\n\r\n return char;\r\n }\r\n\r\n // have to use UIEvent since ClipboardEvent doesn't work with IE\r\n getPasteData(event: UIEvent): string | null {\r\n let pastedValue = '';\r\n const e = event as any;\r\n\r\n if (e.clipboardData && e.clipboardData.getData) {\r\n pastedValue = e.clipboardData.getData('text/plain');\r\n } else {\r\n // IE does things differently\r\n const clipboardData = (window as any).clipboardData;\r\n\r\n if (clipboardData && clipboardData.getData) {\r\n pastedValue = clipboardData.getData('Text');\r\n }\r\n }\r\n\r\n return pastedValue || '';\r\n }\r\n}\r\n","import { FrameMessageType } from '../shared/frame-message-type';\r\nimport { HeightChangedMessage } from '../shared/frame-messages/height-changed-message';\r\nimport { KlarnaSaleSucceededMessage } from \"../shared/frame-messages/klarna-sale-succeeded-message\";\r\nimport { ModeChangedMessage } from '../shared/frame-messages/mode-changed-message';\r\nimport { HostMessage } from '../shared/host-message';\r\nimport { HostMessageType } from '../shared/host-message-type';\r\nimport { SwipeDataMessage } from '../shared/host-messages/swipe-data-message';\r\nimport { MessageQueue } from '../shared/message-queue';\r\nimport { Mode } from '../shared/mode';\r\nimport { SwipeKeyHelper } from '../shared/swipe-key-helper.service';\r\nimport { HostListenerRegistry } from './host-listener-registry';\r\n\r\nexport class BuiltInListeners {\r\n private _mode = Mode.Undefined;\r\n private readonly _swipeKeyHelper = new SwipeKeyHelper();\r\n\r\n constructor(private readonly _messageQueue: MessageQueue, listenerRegistry: HostListenerRegistry) {\r\n listenerRegistry.addBuiltIn(FrameMessageType.HeightChanged, context => {\r\n context.iframe.style.height = context.message.body.height + 'px';\r\n });\r\n\r\n listenerRegistry.addBuiltIn(FrameMessageType.ModeChanged, context => {\r\n this._mode = context.message.body.mode;\r\n });\r\n\r\n listenerRegistry.addBuiltIn(FrameMessageType.KlarnaSaleSucceeded, context => {\r\n if(context.message.body.redirectUrl) {\r\n window.location.href = context.message.body.redirectUrl;\r\n }\r\n })\r\n\r\n window.document.addEventListener('keydown', this.onKeyDown.bind(this));\r\n window.document.addEventListener('keyup', this.onKeyUp.bind(this));\r\n window.document.addEventListener('paste', (this.onPaste as EventListener).bind(this));\r\n }\r\n\r\n private get isSwipeMode(): boolean {\r\n return this._mode === Mode.CcSwiper;\r\n }\r\n\r\n destroy() {\r\n window.document.removeEventListener('keydown', this.onKeyDown);\r\n window.document.removeEventListener('keyup', this.onKeyUp);\r\n window.document.removeEventListener('paste', this.onPaste as EventListener);\r\n }\r\n\r\n private sendSwipeData(data: string | null, isPaste?: boolean) {\r\n if (!data) return;\r\n\r\n this._messageQueue.add(\r\n new HostMessage(HostMessageType.SwipeData, {\r\n data: data,\r\n isPaste: isPaste,\r\n }),\r\n );\r\n }\r\n\r\n private onKeyDown(e: KeyboardEvent) {\r\n\r\n if (!this.isSwipeMode) return;\r\n // allow copy paste\r\n if((e.key === 'v' || e.key === 'c') && e.ctrlKey)\r\n return;\r\n\r\n\r\n // we don't want the browser to confuse our swipe data with any hotkeys or shortcuts\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n const data = this._swipeKeyHelper.getKeyData(e);\r\n this.sendSwipeData(data);\r\n }\r\n\r\n private onKeyUp(e: KeyboardEvent) {\r\n if (!this.isSwipeMode) return;\r\n\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n }\r\n\r\n private onPaste(e: UIEvent) {\r\n if (!this.isSwipeMode) return;\r\n\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n const data = this._swipeKeyHelper.getPasteData(e);\r\n this.sendSwipeData(data, true);\r\n }\r\n}\r\n","import { InitOptions } from '../init-options/init-options';\r\nimport { LocalizationOptions } from '../localization-options';\r\nimport { StyleOptions } from '../style-options';\r\nimport { KlarnaOptions } from \"../klarna-options\";\r\nimport { WalletOptions } from '../wallet-options';\r\nimport { EndUserInfo } from '../end-user-info';\r\n\r\nexport class InitMessage {\r\n readonly debug: boolean;\r\n readonly merchantKey: string;\r\n readonly acceptInternationalPostalCodes: boolean;\r\n readonly singleColumnLayoutBreakpoint: number;\r\n readonly requireCardholderName: boolean;\r\n readonly styles: StyleOptions;\r\n readonly localization: LocalizationOptions;\r\n readonly endUserInfo: EndUserInfo;\r\n readonly autoFocusOnFirstField: boolean;\r\n readonly klarna: KlarnaOptions;\r\n readonly wallet: WalletOptions;\r\n\r\n constructor(initOptions: InitOptions) {\r\n this.debug = initOptions.debug;\r\n this.merchantKey = initOptions.merchantKey;\r\n this.acceptInternationalPostalCodes = initOptions.acceptInternationalPostalCodes;\r\n this.singleColumnLayoutBreakpoint = initOptions.singleColumnLayoutBreakpoint;\r\n this.requireCardholderName = initOptions.requireCardholderName;\r\n this.styles = initOptions.styles;\r\n this.localization = initOptions.localization;\r\n this.endUserInfo = initOptions.endUserInfo;\r\n this.autoFocusOnFirstField = initOptions.autoFocusOnFirstField;\r\n this.klarna = initOptions.klarna;\r\n this.wallet = initOptions.wallet;\r\n }\r\n}\r\n","import { HostMessage } from '../shared/host-message';\r\nimport { HostMessageType } from '../shared/host-message-type';\r\nimport { InitMessage } from '../shared/host-messages/init-message';\r\nimport { SetModeMessage } from '../shared/host-messages/set-mode-message';\r\nimport { InitOptions } from '../shared/init-options/init-options';\r\nimport { MessageQueue } from '../shared/message-queue';\r\nimport { Mode } from '../shared/mode';\r\nimport { SendMessageFn } from '../shared/send-message-fn';\r\n\r\nexport class Messenger {\r\n constructor(private readonly _messageQueue: MessageQueue) {}\r\n\r\n init(initOptions: InitOptions, sendMessageFn: SendMessageFn) {\r\n sendMessageFn(new HostMessage(HostMessageType.Init, new InitMessage(initOptions)));\r\n }\r\n\r\n resetForm() {\r\n this._messageQueue.add(new HostMessage(HostMessageType.ResetForm));\r\n }\r\n\r\n setFormToSubmitted() {\r\n this._messageQueue.add(new HostMessage(HostMessageType.SetFormToSubmitted));\r\n }\r\n\r\n setMode(mode: Mode) {\r\n this._messageQueue.add(\r\n new HostMessage(HostMessageType.SetMode, {\r\n mode: mode,\r\n }),\r\n );\r\n }\r\n\r\n setSwiperFocus() {\r\n this._messageQueue.add(new HostMessage(HostMessageType.SetSwiperFocus));\r\n }\r\n\r\n submitForm() {\r\n this._messageQueue.add(new HostMessage(HostMessageType.SubmitForm));\r\n }\r\n}\r\n","import { FrameMessage } from '../shared/frame-message';\r\nimport { FrameMessageType } from '../shared/frame-message-type';\r\nimport { HostMessage } from '../shared/host-message';\r\nimport { InitOptions } from '../shared/init-options/init-options';\r\nimport { MessageQueue } from '../shared/message-queue';\r\nimport { Parser } from '../shared/parser';\r\nimport { BuiltInListeners } from './built-in-listeners';\r\nimport { HostListenerCallbackContext } from './host-listener-callback-context';\r\nimport { HostListenerRegistry } from './host-listener-registry';\r\nimport { Messenger } from './messenger';\r\n\r\nexport class Host {\r\n private _isInitialized = false;\r\n private _iframe: HTMLIFrameElement | undefined;\r\n private readonly _messenger: Messenger;\r\n private _builtInListeners: BuiltInListeners;\r\n\r\n get messenger(): Messenger {\r\n return this._messenger;\r\n }\r\n\r\n constructor(\r\n iframeSrc: string,\r\n private readonly _messageParser: Parser,\r\n private readonly _messageQueue: MessageQueue,\r\n private readonly _listenerRegistry: HostListenerRegistry,\r\n private readonly _initOptions: InitOptions,\r\n ) {\r\n this._builtInListeners = new BuiltInListeners(this._messageQueue, this._listenerRegistry);\r\n this._messenger = new Messenger(this._messageQueue);\r\n\r\n Host._createIframe(iframeSrc, _initOptions.container).then(iframe => {\r\n this._iframe = iframe;\r\n\r\n const messageChannel = new (window as any).MessageChannel();\r\n\r\n messageChannel.port1.onmessage = (event: MessageEvent) => this._handleMessage(event);\r\n this._messenger.init(_initOptions, initMessage => {\r\n this._sendMessage(initMessage, messageChannel.port2);\r\n });\r\n });\r\n }\r\n\r\n private static _createIframe(iframeSrc: string, container: HTMLElement): Promise {\r\n return new Promise(resolve => {\r\n const iframe = document.createElement('iframe');\r\n iframe.setAttribute('frameBorder', '0');\r\n iframe.setAttribute('scrolling', 'no');\r\n iframe.setAttribute('allowTransparency', 'true');\r\n iframe.setAttribute('allow', 'payment *');\r\n iframe.style.width = '100%';\r\n iframe.src = iframeSrc;\r\n\r\n iframe.addEventListener('load', () => {\r\n resolve(iframe);\r\n });\r\n\r\n container.appendChild(iframe);\r\n });\r\n }\r\n\r\n destroy() {\r\n this._builtInListeners.destroy();\r\n\r\n if (this._iframe && this._iframe.parentElement) {\r\n this._iframe.parentElement.removeChild(this._iframe);\r\n }\r\n\r\n this._iframe = undefined;\r\n this._listenerRegistry.clear();\r\n }\r\n\r\n addListener(type: FrameMessageType, callback: (messageBody: any) => void) {\r\n this._listenerRegistry.addCustom(type, callback);\r\n }\r\n\r\n private _handleMessage(event: MessageEvent) {\r\n const message = this._messageParser.parse(event);\r\n\r\n if (this._initOptions!.debug) {\r\n console.log('HOST:', message);\r\n }\r\n\r\n if (!message) {\r\n return;\r\n }\r\n\r\n if (!this._iframe) {\r\n throw Error('iframe has not been initialized - cannot process message.');\r\n }\r\n\r\n if (!this._isInitialized) {\r\n if (message.type !== FrameMessageType.InitAck) {\r\n throw new Error(\r\n `Expected message of type \"${FrameMessageType.InitAck}\" but received message of type \"${message.type}\".`,\r\n );\r\n }\r\n\r\n this._messageQueue.setSendMessageFn((m: HostMessage) => this._sendMessage(m));\r\n\r\n this._isInitialized = true;\r\n } else {\r\n const context: HostListenerCallbackContext = {\r\n message: message,\r\n messenger: this._messenger,\r\n iframe: this._iframe,\r\n };\r\n\r\n this._listenerRegistry.trigger(context);\r\n }\r\n }\r\n\r\n private _sendMessage(message: HostMessage, port?: MessagePort) {\r\n if (!this._iframe) {\r\n throw Error('iframe has not been initialized - cannot send message.');\r\n }\r\n\r\n const contentWindow = this._iframe.contentWindow;\r\n\r\n if (contentWindow) {\r\n contentWindow.postMessage(message, '*', [port || new (window as any).MessageChannel().port2]);\r\n }\r\n }\r\n}\r\n","import { FrameMessageType } from './frame-message-type';\r\nimport { Message } from './message';\r\n\r\nexport class FrameMessage extends Message {\r\n constructor(type: FrameMessageType, body?: T) {\r\n super(type, body);\r\n }\r\n}\r\n","// Need this to not be a library import because it's a webpack build (no tree shaking)\r\n// eslint-disable-next-line\r\nimport { NonNgEnumHelpers } from 'libs/core/common/src/lib/non-ng/enum-helpers';\r\nimport { FrameMessage } from '../shared/frame-message';\r\nimport { FrameMessageType } from '../shared/frame-message-type';\r\nimport { Parser } from '../shared/parser';\r\n\r\nexport class MessageParser implements Parser {\r\n private readonly _frameMessageTypes: string[];\r\n\r\n constructor(enumHelpers: NonNgEnumHelpers) {\r\n this._frameMessageTypes = enumHelpers.values(FrameMessageType);\r\n }\r\n\r\n parse(event: MessageEvent): FrameMessage | null {\r\n if (!event.data || !event.data.type) {\r\n return null;\r\n }\r\n\r\n if (this._frameMessageTypes.indexOf(event.data.type) === -1) {\r\n throw Error(\r\n `Invalid frame message type \"${event.data.type}\". Valid types are ${this._frameMessageTypes.join(', ')}`,\r\n );\r\n }\r\n\r\n return new FrameMessage(event.data.type, event.data.body);\r\n }\r\n}\r\n","export class KlarnaOptions {\r\n readonly $classname = 'KlarnaOptions';\r\n amount: number;\r\n returnUrl: string;\r\n\r\n\r\n constructor() {\r\n this.amount = 0;\r\n this.returnUrl = '';\r\n }\r\n}\r\n","import { Parser } from '../parser';\r\nimport { RawInitOptionsKlarna } from './raw-init-options-klarna';\r\nimport { KlarnaOptions } from '../klarna-options';\r\n\r\nexport class KlarnaOptionsParser implements Parser {\r\n\r\n parse(input: RawInitOptionsKlarna | undefined): KlarnaOptions {\r\n\r\n const result = new KlarnaOptions();\r\n\r\n if (!input) {\r\n return result;\r\n }\r\n\r\n result.returnUrl = input?.returnUrl\r\n result.amount = input?.amount\r\n\r\n return result;\r\n }\r\n}\r\n","export class WalletOptions {\r\n readonly $classname = 'WalletOptions';\r\n amount: number;\r\n enabled: boolean;\r\n\r\n constructor() {\r\n this.amount = 0;\r\n this.enabled = false;\r\n }\r\n}\r\n","import { Parser } from '../parser';\r\nimport { WalletOptions } from '../wallet-options';\r\nimport {RawInitOptionsWallet} from \"./raw-init-options-wallet\";\r\n\r\nexport class WalletOptionsParser implements Parser {\r\n\r\n parse(input: RawInitOptionsWallet | undefined): WalletOptions {\r\n\r\n const result = new WalletOptions();\r\n\r\n if (!input) {\r\n return result;\r\n }\r\n\r\n result.amount = input?.amount\r\n result.enabled = input?.enabled\r\n\r\n return result;\r\n }\r\n}\r\n","// Need this to not be a library import because it's a webpack build (no tree shaking)\r\n// eslint-disable-next-line\r\nimport { NonNgEnumHelpers } from 'libs/core/common/src/lib/non-ng/enum-helpers';\r\nimport { DefaultMessageQueue } from '../shared/default-message-queue';\r\nimport { FrameMessageType } from '../shared/frame-message-type';\r\nimport { InitOptions } from '../shared/init-options/init-options';\r\nimport { LocalizationParser } from '../shared/init-options/localization-parser';\r\nimport { RawInitOptions } from '../shared/init-options/raw-init-options';\r\nimport { StyleOptionsParser } from '../shared/init-options/style-options-parser';\r\nimport { LocalizationDefaults } from '../shared/localization-defaults';\r\nimport { Settings } from '../shared/settings';\r\nimport { DefaultHostListenerRegistry } from './default-host-listener-registry';\r\nimport { Host } from './host';\r\nimport { MessageParser } from './message-parser';\r\nimport { KlarnaOptionsParser } from '../shared/init-options/klarna-options-parser';\r\nimport { WalletOptionsParser } from '../shared/init-options/wallet-options-parser';\r\nimport { EndUserInfo } from '../shared/end-user-info';\r\n\r\nconst psWindow = window as any;\r\nconst IFRAME_SRC = 'https://sandbox-api.paysimple.com/pmt/v1/frame/index.html';\r\n\r\npsWindow.paymentMethodTokenization = (rawInitOptions: RawInitOptions | undefined) => {\r\n if (!psWindow.MessageChannel) {\r\n throw new Error('MessageChannels are not supported.');\r\n }\r\n\r\n const endUserInfo: EndUserInfo = {\r\n hostUrl: window.location.href,\r\n userAgent: window.navigator.userAgent,\r\n };\r\n\r\n const settings = new Settings();\r\n const styleOptionsParser = new StyleOptionsParser(settings);\r\n const localizationDefaults = new LocalizationDefaults();\r\n const localizationParser = new LocalizationParser(settings, localizationDefaults);\r\n const klarnaOptionsParser = new KlarnaOptionsParser();\r\n const walletOptionsParser = new WalletOptionsParser();\r\n const initOptions = new InitOptions(styleOptionsParser,\r\n localizationParser,\r\n klarnaOptionsParser,\r\n walletOptionsParser,\r\n rawInitOptions,\r\n endUserInfo);\r\n\r\n const enumHelpers = new NonNgEnumHelpers();\r\n const messageParser = new MessageParser(enumHelpers);\r\n const messageQueue = new DefaultMessageQueue();\r\n const listenerRegistry = new DefaultHostListenerRegistry();\r\n const host = new Host(IFRAME_SRC, messageParser, messageQueue, listenerRegistry, initOptions);\r\n\r\n return {\r\n trigger: host.messenger,\r\n on: (type: FrameMessageType, callback: (body: any) => void) => host.addListener(type, callback),\r\n destroy: () => host.destroy(),\r\n };\r\n};\r\n"],"names":["$enum","EnumWrapper","enumObj","this","keysList","Object","freeze","keys","filter","isNonIndexKey","sort","length","valuesList","Array","keysByValueMap","Map","index","key","value","set","size","getCachedInstance","result","instancesCache","get","defineProperty","prototype","Symbol","toStringTag","enumerable","configurable","toString","_a","_this","next","done","iterator","values","entries","forEach","iteratee","context","entry","call","map","getKeys","slice","getValues","getEntries","isKey","hasOwnProperty","asKeyOrThrow","Error","asKeyOrDefault","defaultKey","isValue","has","asValueOrThrow","asValueOrDefault","defaultValue","getKeyOrThrow","undefined","getKeyOrDefault","getValueOrThrow","getValueOrDefault","WeakMap","String","parseInt","FrameMessageType","getValueFromEnum","i","keyValue","getKeyFromValue","_sendMessageFn","_queue","setSendMessageFn","sendMessageFn","_processQueue","add","message","push","splice","styleOptionsParser","localizationParser","klarnaOptionsParser","walletOptionsParser","rawInitOptions","endUserInfo","InitOptions","_ensureValidity","container","debug","merchantKey","singleColumnLayoutBreakpoint","acceptInternationalPostalCodes","autoFocusOnFirstField","requireCardholderName","showPlaceholders","styles","parse","localization","klarna","wallet","cardholderName","cardNumber","expiration","cvv","postalCode","routingNumber","accountNumber","accountHolder","accountType","companyName","emailAddress","countryCode","fullName","invalidCardholderName","invalidCardNumber","invalidCardType","invalidExpiration","invalidCvv","invalidPostalCode","invalidRoutingNumber","invalidAccountNumber","invalidAccountHolder","invalidAccountType","invalidCompanyName","invalidEmailAddress","invalidCountryCode","invalidFullName","required","LocalizationByField","_settings","_localizationDefaults","rawInitOptionsLocalization","options","label","_parseLocalizationByField","placeholder","validation","_parseLocalizationValidation","rawInitOptionsLocalizationByField","defaults","fieldNames","field","localizedText","rawInitOptionsLocalizationValidation","LocalizationValidation","validationNames","default","base","StyleDictionary","focus","hover","StyleDictionaryByPseudoName","$className","body","cardType","StyleDictionaryByPseudoNameByField","input","select","errorLabel","errorInput","PSEUDO_STYLE_REGEX","VALID_PSEUDO_KEYS","_normalizeKey","replace","toLowerCase","_isObject","valueAsString","_mergeStyleDictionaries","src1","src2","rawInitOptionsStyles","StyleOptions","_parseStyleDictionaryByPseudoName","_parseStyleDictionaryByPseudoNameByField","_parseStyleDictionary","rawStyles","StyleOptionsParser","style","rawStyleDictionary","match","pseudoKey","indexOf","rawStyleDictionaryByField","defaultStyles","fieldStyles","finalStyles","LocalizationOptions","getDefaultSkinLocalization","_dictionary","builtIn","custom","addBuiltIn","type","callback","addCustom","clear","trigger","listener","bind","boundListener","HostMessageType","Mode","Message","_altKeys","getKeyData","event","char","charUpper","toUpperCase","altKey","getPasteData","pastedValue","e","clipboardData","getData","window","_messageQueue","listenerRegistry","_mode","Undefined","_swipeKeyHelper","SwipeKeyHelper","HeightChanged","iframe","height","ModeChanged","mode","KlarnaSaleSucceeded","redirectUrl","location","href","document","addEventListener","onKeyDown","onKeyUp","onPaste","CcSwiper","destroy","removeEventListener","sendSwipeData","data","isPaste","HostMessage","SwipeData","isSwipeMode","ctrlKey","preventDefault","cancelBubble","initOptions","init","Init","InitMessage","resetForm","ResetForm","setFormToSubmitted","SetFormToSubmitted","setMode","SetMode","setSwiperFocus","SetSwiperFocus","submitForm","SubmitForm","iframeSrc","_messageParser","_listenerRegistry","_initOptions","_isInitialized","_builtInListeners","BuiltInListeners","_messenger","Messenger","Host","_createIframe","then","_iframe","messageChannel","MessageChannel","port1","onmessage","_handleMessage","initMessage","_sendMessage","port2","Promise","resolve","createElement","setAttribute","width","src","appendChild","parentElement","removeChild","addListener","console","log","messenger","InitAck","m","port","contentWindow","postMessage","enumHelpers","_frameMessageTypes","join","FrameMessage","$classname","amount","returnUrl","KlarnaOptions","enabled","WalletOptions","psWindow","paymentMethodTokenization","hostUrl","userAgent","navigator","settings","Settings","localizationDefaults","LocalizationDefaults","LocalizationParser","KlarnaOptionsParser","WalletOptionsParser","NonNgEnumHelpers","messageParser","MessageParser","messageQueue","DefaultMessageQueue","DefaultHostListenerRegistry","host","on"],"sourceRoot":""}