UNPKG

braintree-web

Version:

A suite of tools for integrating Braintree in the browser

1,373 lines (1,312 loc) 191 kB
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.braintree || (g.braintree = {})).hostedFields = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){ "use strict"; var scriptPromiseCache = {}; function loadScript(options) { var scriptLoadPromise; var stringifiedOptions = JSON.stringify(options); if (!options.forceScriptReload) { scriptLoadPromise = scriptPromiseCache[stringifiedOptions]; if (scriptLoadPromise) { return scriptLoadPromise; } } var script = document.createElement("script"); var attrs = options.dataAttributes || {}; var container = options.container || document.head; script.src = options.src; script.id = options.id || ""; script.async = true; if (options.type) { script.setAttribute("type", "".concat(options.type)); } if (options.crossorigin) { script.setAttribute("crossorigin", "".concat(options.crossorigin)); } Object.keys(attrs).forEach(function (key) { script.setAttribute("data-".concat(key), "".concat(attrs[key])); }); scriptLoadPromise = new Promise(function (resolve, reject) { script.addEventListener("load", function () { resolve(script); }); script.addEventListener("error", function () { reject(new Error("".concat(options.src, " failed to load."))); }); script.addEventListener("abort", function () { reject(new Error("".concat(options.src, " has aborted."))); }); container.appendChild(script); }); scriptPromiseCache[stringifiedOptions] = scriptLoadPromise; return scriptLoadPromise; } loadScript.clearCache = function () { scriptPromiseCache = {}; }; module.exports = loadScript; },{}],2:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/load-script"); },{"./dist/load-script":1}],3:[function(_dereq_,module,exports){ "use strict"; module.exports = function isAndroid(ua) { ua = ua || window.navigator.userAgent; return /Android/i.test(ua); }; },{}],4:[function(_dereq_,module,exports){ "use strict"; module.exports = function isChromeOS(ua) { ua = ua || window.navigator.userAgent; return /CrOS/i.test(ua); }; },{}],5:[function(_dereq_,module,exports){ "use strict"; var isEdge = _dereq_("./is-edge"); var isSamsung = _dereq_("./is-samsung"); var isDuckDuckGo = _dereq_("./is-duckduckgo"); var isOpera = _dereq_("./is-opera"); var isSilk = _dereq_("./is-silk"); module.exports = function isChrome(ua) { ua = ua || window.navigator.userAgent; return ((ua.indexOf("Chrome") !== -1 || ua.indexOf("CriOS") !== -1) && !isEdge(ua) && !isSamsung(ua) && !isDuckDuckGo(ua) && !isOpera(ua) && !isSilk(ua)); }; },{"./is-duckduckgo":6,"./is-edge":7,"./is-opera":13,"./is-samsung":14,"./is-silk":15}],6:[function(_dereq_,module,exports){ "use strict"; module.exports = function isDuckDuckGo(ua) { ua = ua || window.navigator.userAgent; return ua.indexOf("DuckDuckGo/") !== -1; }; },{}],7:[function(_dereq_,module,exports){ "use strict"; module.exports = function isEdge(ua) { ua = ua || window.navigator.userAgent; return ua.indexOf("Edge/") !== -1 || ua.indexOf("Edg/") !== -1; }; },{}],8:[function(_dereq_,module,exports){ "use strict"; module.exports = function isFirefox(ua) { ua = ua || window.navigator.userAgent; return /Firefox/i.test(ua); }; },{}],9:[function(_dereq_,module,exports){ "use strict"; var isIos = _dereq_("./is-ios"); function isGoogleSearchApp(ua) { return /\bGSA\b/.test(ua); } module.exports = function isIosGoogleSearchApp(ua) { ua = ua || window.navigator.userAgent; return isIos(ua) && isGoogleSearchApp(ua); }; },{"./is-ios":11}],10:[function(_dereq_,module,exports){ "use strict"; var isIos = _dereq_("./is-ios"); var isIosGoogleSearchApp = _dereq_("./is-ios-google-search-app"); module.exports = function isIosWebview(ua) { ua = ua || window.navigator.userAgent; if (isIos(ua)) { // The Google Search iOS app is technically a webview and doesn't support popups. if (isIosGoogleSearchApp(ua)) { return true; } // Historically, a webview could be identified by the presence of AppleWebKit and _no_ presence of Safari after. return /.+AppleWebKit(?!.*Safari)/i.test(ua); } return false; }; },{"./is-ios":11,"./is-ios-google-search-app":9}],11:[function(_dereq_,module,exports){ "use strict"; var isIpadOS = _dereq_("./is-ipados"); module.exports = function isIos(ua, checkIpadOS, document) { if (checkIpadOS === void 0) { checkIpadOS = true; } ua = ua || window.navigator.userAgent; var iOsTest = /iPhone|iPod|iPad/i.test(ua); return checkIpadOS ? iOsTest || isIpadOS(ua, document) : iOsTest; }; },{"./is-ipados":12}],12:[function(_dereq_,module,exports){ "use strict"; module.exports = function isIpadOS(ua, document) { ua = ua || window.navigator.userAgent; document = document || window.document; // "ontouchend" is used to determine if a browser is on an iPad, otherwise // user-agents for iPadOS behave/identify as a desktop browser return /Mac|iPad/i.test(ua) && "ontouchend" in document; }; },{}],13:[function(_dereq_,module,exports){ "use strict"; module.exports = function isOpera(ua) { ua = ua || window.navigator.userAgent; return (ua.indexOf("OPR/") !== -1 || ua.indexOf("Opera/") !== -1 || ua.indexOf("OPT/") !== -1); }; },{}],14:[function(_dereq_,module,exports){ "use strict"; module.exports = function isSamsungBrowser(ua) { ua = ua || window.navigator.userAgent; return /SamsungBrowser/i.test(ua); }; },{}],15:[function(_dereq_,module,exports){ "use strict"; module.exports = function isSilk(ua) { ua = ua || window.navigator.userAgent; return ua.indexOf("Silk/") !== -1; }; },{}],16:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/is-android"); },{"./dist/is-android":3}],17:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/is-chrome-os"); },{"./dist/is-chrome-os":4}],18:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/is-chrome"); },{"./dist/is-chrome":5}],19:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/is-firefox"); },{"./dist/is-firefox":8}],20:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/is-ios-webview"); },{"./dist/is-ios-webview":10}],21:[function(_dereq_,module,exports){ module.exports = _dereq_("./dist/is-ios"); },{"./dist/is-ios":11}],22:[function(_dereq_,module,exports){ "use strict"; var EventEmitter = /** @class */ (function () { function EventEmitter() { this._events = {}; } EventEmitter.prototype.on = function (event, callback) { if (this._events[event]) { this._events[event].push(callback); } else { this._events[event] = [callback]; } }; EventEmitter.prototype.off = function (event, callback) { var eventCallbacks = this._events[event]; if (!eventCallbacks) { return; } var indexOfCallback = eventCallbacks.indexOf(callback); eventCallbacks.splice(indexOfCallback, 1); }; EventEmitter.prototype._emit = function (event) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var eventCallbacks = this._events[event]; if (!eventCallbacks) { return; } eventCallbacks.forEach(function (callback) { callback.apply(void 0, args); }); }; EventEmitter.prototype.hasListener = function (event) { var eventCallbacks = this._events[event]; if (!eventCallbacks) { return false; } return eventCallbacks.length > 0; }; EventEmitter.createChild = function (ChildObject) { ChildObject.prototype = Object.create(EventEmitter.prototype, { constructor: ChildObject, }); }; return EventEmitter; }()); module.exports = EventEmitter; },{}],23:[function(_dereq_,module,exports){ "use strict"; var set_attributes_1 = _dereq_("./lib/set-attributes"); var default_attributes_1 = _dereq_("./lib/default-attributes"); var assign_1 = _dereq_("./lib/assign"); module.exports = function createFrame(options) { if (options === void 0) { options = {}; } var iframe = document.createElement("iframe"); var config = (0, assign_1.assign)({}, default_attributes_1.defaultAttributes, options); if (config.style && typeof config.style !== "string") { (0, assign_1.assign)(iframe.style, config.style); delete config.style; } (0, set_attributes_1.setAttributes)(iframe, config); if (!iframe.getAttribute("id")) { iframe.id = iframe.name; } return iframe; }; },{"./lib/assign":24,"./lib/default-attributes":25,"./lib/set-attributes":26}],24:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.assign = void 0; function assign( // eslint-disable-next-line @typescript-eslint/no-explicit-any target) { var objs = []; for (var _i = 1; _i < arguments.length; _i++) { objs[_i - 1] = arguments[_i]; } objs.forEach(function (obj) { if (typeof obj !== "object") { return; } Object.keys(obj).forEach(function (key) { target[key] = obj[key]; }); }); return target; } exports.assign = assign; },{}],25:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultAttributes = void 0; exports.defaultAttributes = { src: "about:blank", frameBorder: 0, allowtransparency: true, scrolling: "no", }; },{}],26:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setAttributes = void 0; function setAttributes(element, // eslint-disable-next-line @typescript-eslint/no-explicit-any attributes) { for (var key in attributes) { if (attributes.hasOwnProperty(key)) { var value = attributes[key]; if (value == null) { element.removeAttribute(key); } else { element.setAttribute(key, value); } } } } exports.setAttributes = setAttributes; },{}],27:[function(_dereq_,module,exports){ "use strict"; function uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0; var v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); } module.exports = uuid; },{}],28:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function deferred(fn) { return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } setTimeout(function () { try { fn.apply(void 0, args); } catch (err) { /* eslint-disable no-console */ console.log("Error in callback function"); console.log(err); /* eslint-enable no-console */ } }, 1); }; } exports.deferred = deferred; },{}],29:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function once(fn) { var called = false; return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!called) { called = true; fn.apply(void 0, args); } }; } exports.once = once; },{}],30:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable consistent-return */ function promiseOrCallback(promise, callback) { if (!callback) { return promise; } promise.then(function (data) { return callback(null, data); }).catch(function (err) { return callback(err); }); } exports.promiseOrCallback = promiseOrCallback; },{}],31:[function(_dereq_,module,exports){ "use strict"; var deferred_1 = _dereq_("./lib/deferred"); var once_1 = _dereq_("./lib/once"); var promise_or_callback_1 = _dereq_("./lib/promise-or-callback"); function wrapPromise(fn) { // eslint-disable-next-line @typescript-eslint/no-explicit-any return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var callback; var lastArg = args[args.length - 1]; if (typeof lastArg === "function") { callback = args.pop(); callback = once_1.once(deferred_1.deferred(callback)); } // I know, I know, this looks bad. But it's a quirk of the library that // we need to allow passing the this context to the original function // eslint-disable-next-line @typescript-eslint/ban-ts-ignore // @ts-ignore: this has an implicit any return promise_or_callback_1.promiseOrCallback(fn.apply(this, args), callback); // eslint-disable-line no-invalid-this }; } wrapPromise.wrapPrototype = function (target, options) { if (options === void 0) { options = {}; } var ignoreMethods = options.ignoreMethods || []; var includePrivateMethods = options.transformPrivateMethods === true; var methods = Object.getOwnPropertyNames(target.prototype).filter(function (method) { var isNotPrivateMethod; var isNonConstructorFunction = method !== "constructor" && typeof target.prototype[method] === "function"; var isNotAnIgnoredMethod = ignoreMethods.indexOf(method) === -1; if (includePrivateMethods) { isNotPrivateMethod = true; } else { isNotPrivateMethod = method.charAt(0) !== "_"; } return (isNonConstructorFunction && isNotPrivateMethod && isNotAnIgnoredMethod); }); methods.forEach(function (method) { var original = target.prototype[method]; target.prototype[method] = wrapPromise(original); }); return target; }; module.exports = wrapPromise; },{"./lib/deferred":28,"./lib/once":29,"./lib/promise-or-callback":30}],32:[function(_dereq_,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.loadAxo = {})); })(this, (function (exports) { 'use strict'; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ function __awaiter(thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); } function __generator(thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } var dist = {}; var scriptPromiseCache = {}; function loadScript$1(options) { var scriptLoadPromise; var stringifiedOptions = JSON.stringify(options); if (!options.forceScriptReload) { scriptLoadPromise = scriptPromiseCache[stringifiedOptions]; if (scriptLoadPromise) { return scriptLoadPromise; } } var script = document.createElement("script"); var attrs = options.dataAttributes || {}; var container = options.container || document.head; script.src = options.src; script.id = options.id || ""; script.async = true; if (options.type) { script.setAttribute("type", "".concat(options.type)); } if (options.crossorigin) { script.setAttribute("crossorigin", "".concat(options.crossorigin)); } Object.keys(attrs).forEach(function (key) { script.setAttribute("data-".concat(key), "".concat(attrs[key])); }); scriptLoadPromise = new Promise(function (resolve, reject) { script.addEventListener("load", function () { resolve(script); }); script.addEventListener("error", function () { reject(new Error("".concat(options.src, " failed to load."))); }); script.addEventListener("abort", function () { reject(new Error("".concat(options.src, " has aborted."))); }); container.appendChild(script); }); scriptPromiseCache[stringifiedOptions] = scriptLoadPromise; return scriptLoadPromise; } loadScript$1.clearCache = function () { scriptPromiseCache = {}; }; var loadScript_1$1 = loadScript$1; var loadStylesheet$1 = function loadStylesheet(options) { var stylesheet = document.querySelector("link[href=\"".concat(options.href, "\"]")); if (stylesheet) { return Promise.resolve(stylesheet); } stylesheet = document.createElement("link"); var container = options.container || document.head; stylesheet.setAttribute("rel", "stylesheet"); stylesheet.setAttribute("type", "text/css"); stylesheet.setAttribute("href", options.href); stylesheet.setAttribute("id", options.id); if (container.firstChild) { container.insertBefore(stylesheet, container.firstChild); } else { container.appendChild(stylesheet); } return Promise.resolve(stylesheet); }; Object.defineProperty(dist, "__esModule", { value: true }); dist.loadStylesheet = loadScript_1 = dist.loadScript = void 0; var loadScript = loadScript_1$1; var loadScript_1 = dist.loadScript = loadScript; var loadStylesheet = loadStylesheet$1; dist.loadStylesheet = loadStylesheet; var CDNX_PROD = "https://www.paypalobjects.com"; var ASSET_NAME = { minified: "axo.min", unminified: "axo", }; var FL_NAMESPACE = "fastlane"; var ASSET_PATH = "connect-boba"; var LOCALE_PATH = "".concat(ASSET_PATH, "/locales/"); var constants = { AXO_ASSET_NAME: ASSET_NAME, AXO_ASSET_PATH: ASSET_PATH, LOCALE_PATH: LOCALE_PATH, CDNX_PROD: CDNX_PROD, }; var AxoSupportedPlatforms = { BT: "BT", PPCP: "PPCP", }; /** * Checks if the current environment is an AMD environment. * * @returns {boolean} True if the environment is AMD, false otherwise. */ function isAmdEnv() { return typeof window.define === "function" && !!window.define.amd; } /** * Checks if the current environment is a RequireJS environment. * * @returns {boolean} True if the environment is RequireJS, false otherwise. */ function isRequireJsEnv() { return (isAmdEnv() && typeof window.requirejs === "function" && typeof window.requirejs.config === "function"); } /** * Safely loads BT modules by checking if the module already exists and verifying if versions mismatch * * @param loadConfig <BtModuleLoadConfig> Configuration of BT Module to load * @param version <string> version that should be passed from the client getVersion * @returns Promise<HTMLScriptElement> * @returns Promise<true> when BT module with same version already exists * @returns Promise.reject(err) when BT module already exists but versions mismatch or empty version passed in */ function safeLoadBtModule(loadConfig, version, minified) { var _a, _b; if (minified === void 0) { minified = true; } return __awaiter(this, void 0, void 0, function () { var bt, existingVersion; return __generator(this, function (_c) { bt = getBraintree(); if (bt && bt[loadConfig.module]) { if (version && ((_a = bt[loadConfig.module]) === null || _a === void 0 ? void 0 : _a.VERSION) !== version) { existingVersion = (_b = bt[loadConfig.module]) === null || _b === void 0 ? void 0 : _b.VERSION; throw new Error("".concat(loadConfig.module, " already loaded with version ").concat(existingVersion, " cannot load version ").concat(version)); } else { return [2 /*return*/, true]; } } if (!version) { throw new Error("Attempted to load ".concat(loadConfig.module, " without specifying version")); } return [2 /*return*/, loadBtModule(loadConfig, version, minified)]; }); }); } /** * Reads the version and to load the correct version of Bt module * * @param loadConfig <BtModuleLoadConfig> Configuration of BT Module to load * @param version <string> Bt module version * @returns Promise<HTMLScriptElement> or */ function loadBtModule(loadConfig, version, minified) { if (minified === void 0) { minified = true; } if (isAmdEnv()) { var module_1 = minified ? loadConfig.amdModule.minified : loadConfig.amdModule.unminified; return new Promise(function (resolve, reject) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore window.require([module_1], resolve, reject); }); } var script = minified ? loadConfig.script.minified : loadConfig.script.unminified; return loadScript_1({ id: "".concat(loadConfig.id, "-").concat(version), src: "https://js.braintreegateway.com/web/".concat(version, "/js/").concat(script), }); } /** * Looks for the Braintree web sdk on the window object * * @returns Braintree web sdk */ function getBraintree() { return window === null || window === void 0 ? void 0 : window.braintree; } var _a, _b; /** * Maps to the BT module namespace created on the window.braintree object */ var BtModule = { Client: "client", HostedCardFields: "hostedFields", }; var BT_NAMESPACE = "braintree"; var BT_ASSET_NAME = (_a = {}, _a[BtModule.Client] = "client", _a[BtModule.HostedCardFields] = "hosted-fields", _a); var btModulesLoadConfig = (_b = {}, _b[BtModule.Client] = { id: "client", module: BtModule.Client, amdModule: { unminified: "".concat(BT_NAMESPACE, "/").concat(BT_ASSET_NAME[BtModule.Client]), minified: "".concat(BT_NAMESPACE, "/").concat(BT_ASSET_NAME[BtModule.Client], ".min"), }, script: { unminified: "".concat(BT_ASSET_NAME[BtModule.Client], ".js"), minified: "".concat(BT_ASSET_NAME[BtModule.Client], ".min.js"), }, }, _b[BtModule.HostedCardFields] = { id: "hcf", module: BtModule.HostedCardFields, amdModule: { unminified: "".concat(BT_NAMESPACE, "/").concat(BT_ASSET_NAME[BtModule.HostedCardFields]), minified: "".concat(BT_NAMESPACE, "/").concat(BT_ASSET_NAME[BtModule.HostedCardFields], ".min"), }, script: { unminified: "".concat(BT_ASSET_NAME[BtModule.HostedCardFields], ".js"), minified: "".concat(BT_ASSET_NAME[BtModule.HostedCardFields], ".min.js"), }, }, _b); /** * Loads accelerated checkout components. * @param options object with a minified parameter to determine if the script that is loaded should be minified or not (defaults to true if) * @returns an object with metadata with a localeUrl parameter to be read by AXO SDK */ function loadAxo(options) { return __awaiter(this, void 0, void 0, function () { var btSdkVersion, minified, assetUrl, localeUrl; return __generator(this, function (_a) { switch (_a.label) { case 0: performance.mark("pp_axo_sdk_init_invoked"); btSdkVersion = options.btSdkVersion, minified = options.minified; assetUrl = getAssetsUrl(options); localeUrl = getLocaleUrl(options); if (!(options.platform === AxoSupportedPlatforms.BT)) return [3 /*break*/, 2]; return [4 /*yield*/, Promise.all([ safeLoadBtModule(btModulesLoadConfig.hostedFields, btSdkVersion, minified), loadAXOScript(assetUrl, minified), ])]; case 1: _a.sent(); return [3 /*break*/, 5]; case 2: if (!(options.platform === AxoSupportedPlatforms.PPCP)) return [3 /*break*/, 4]; return [4 /*yield*/, Promise.all([ safeLoadBtModule(btModulesLoadConfig.client, btSdkVersion, minified), safeLoadBtModule(btModulesLoadConfig.hostedFields, btSdkVersion, minified), loadAXOScript(assetUrl, minified), ])]; case 3: _a.sent(); return [3 /*break*/, 5]; case 4: throw new Error("unsupported axo platform"); case 5: return [2 /*return*/, { metadata: { localeUrl: localeUrl } }]; } }); }); } /** * Reads the url and to load the axo bundle script * @param url (Required) string url for the correct axo asset * @returns Promise<HTMLScriptElement> */ function loadAXOScript(url, minified) { var _a; if (minified === void 0) { minified = true; } if (isAmdEnv()) { // AMD environment if (isRequireJsEnv()) { // Let's configure RequireJS requirejs.config({ paths: (_a = {}, _a[FL_NAMESPACE] = url, _a), }); } var moduleName_1 = "".concat(FL_NAMESPACE, "/").concat(minified ? constants.AXO_ASSET_NAME.minified : constants.AXO_ASSET_NAME.unminified); return new Promise(function (resolve, reject) { window.require([moduleName_1], resolve, reject); }); } // Not an AMD environment return loadScript_1({ id: "axo-id", src: url, forceScriptReload: true, }); } /** * Prepends the domain to the asset url * @param options object with assetUrl and bundleid parameters to determine which URL to return * @returns full domain and assets URL as string */ function generateAssetUrl(_a) { var assetUrl = _a.assetUrl, bundleId = _a.bundleId; return bundleId ? "https://cdn-".concat(bundleId, ".static.engineering.dev.paypalinc.com/").concat(assetUrl) : "".concat(constants.CDNX_PROD, "/").concat(assetUrl); } /** * Retrieves either the minified or unminified assets URL as specified * @param options (Optional) object with a minified and metadata with bundleIdOverride parameters to determine which URL to return * @returns assets URL as string */ function getAssetsUrl(options) { var _a; var assetName = (options === null || options === void 0 ? void 0 : options.minified) !== false ? constants.AXO_ASSET_NAME.minified : constants.AXO_ASSET_NAME.unminified; var assetUrl = isAmdEnv() ? constants.AXO_ASSET_PATH : "".concat(constants.AXO_ASSET_PATH, "/").concat(assetName, ".js"); return generateAssetUrl({ assetUrl: assetUrl, bundleId: (_a = options === null || options === void 0 ? void 0 : options.metadata) === null || _a === void 0 ? void 0 : _a.bundleIdOverride, }); } /** * Retrieves the Locales URL, the path to our language files * @param options (Optional) object with a minified and metadata with bundleIdOverride parameters to determine which URL to return * @returns locale URL as string */ function getLocaleUrl(options) { var _a; return generateAssetUrl({ assetUrl: constants.LOCALE_PATH, bundleId: (_a = options === null || options === void 0 ? void 0 : options.metadata) === null || _a === void 0 ? void 0 : _a.bundleIdOverride, }); } exports.constants = constants; exports.loadAxo = loadAxo; })); },{}],33:[function(_dereq_,module,exports){ "use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var cardTypes = _dereq_("./lib/card-types"); var add_matching_cards_to_results_1 = _dereq_("./lib/add-matching-cards-to-results"); var is_valid_input_type_1 = _dereq_("./lib/is-valid-input-type"); var find_best_match_1 = _dereq_("./lib/find-best-match"); var clone_1 = _dereq_("./lib/clone"); var customCards = {}; var cardNames = { VISA: "visa", MASTERCARD: "mastercard", AMERICAN_EXPRESS: "american-express", DINERS_CLUB: "diners-club", DISCOVER: "discover", JCB: "jcb", UNIONPAY: "unionpay", MAESTRO: "maestro", ELO: "elo", MIR: "mir", HIPER: "hiper", HIPERCARD: "hipercard", }; var ORIGINAL_TEST_ORDER = [ cardNames.VISA, cardNames.MASTERCARD, cardNames.AMERICAN_EXPRESS, cardNames.DINERS_CLUB, cardNames.DISCOVER, cardNames.JCB, cardNames.UNIONPAY, cardNames.MAESTRO, cardNames.ELO, cardNames.MIR, cardNames.HIPER, cardNames.HIPERCARD, ]; var testOrder = (0, clone_1.clone)(ORIGINAL_TEST_ORDER); function findType(cardType) { return customCards[cardType] || cardTypes[cardType]; } function getAllCardTypes() { return testOrder.map(function (cardType) { return (0, clone_1.clone)(findType(cardType)); }); } function getCardPosition(name, ignoreErrorForNotExisting) { if (ignoreErrorForNotExisting === void 0) { ignoreErrorForNotExisting = false; } var position = testOrder.indexOf(name); if (!ignoreErrorForNotExisting && position === -1) { throw new Error('"' + name + '" is not a supported card type.'); } return position; } function creditCardType(cardNumber) { var results = []; if (!(0, is_valid_input_type_1.isValidInputType)(cardNumber)) { return results; } if (cardNumber.length === 0) { return getAllCardTypes(); } testOrder.forEach(function (cardType) { var cardConfiguration = findType(cardType); (0, add_matching_cards_to_results_1.addMatchingCardsToResults)(cardNumber, cardConfiguration, results); }); var bestMatch = (0, find_best_match_1.findBestMatch)(results); if (bestMatch) { return [bestMatch]; } return results; } creditCardType.getTypeInfo = function (cardType) { return (0, clone_1.clone)(findType(cardType)); }; creditCardType.removeCard = function (name) { var position = getCardPosition(name); testOrder.splice(position, 1); }; creditCardType.addCard = function (config) { var existingCardPosition = getCardPosition(config.type, true); customCards[config.type] = config; if (existingCardPosition === -1) { testOrder.push(config.type); } }; creditCardType.updateCard = function (cardType, updates) { var originalObject = customCards[cardType] || cardTypes[cardType]; if (!originalObject) { throw new Error("\"".concat(cardType, "\" is not a recognized type. Use `addCard` instead.'")); } if (updates.type && originalObject.type !== updates.type) { throw new Error("Cannot overwrite type parameter."); } var clonedCard = (0, clone_1.clone)(originalObject); clonedCard = __assign(__assign({}, clonedCard), updates); customCards[clonedCard.type] = clonedCard; }; creditCardType.changeOrder = function (name, position) { var currentPosition = getCardPosition(name); testOrder.splice(currentPosition, 1); testOrder.splice(position, 0, name); }; creditCardType.resetModifications = function () { testOrder = (0, clone_1.clone)(ORIGINAL_TEST_ORDER); customCards = {}; }; creditCardType.types = cardNames; module.exports = creditCardType; },{"./lib/add-matching-cards-to-results":34,"./lib/card-types":35,"./lib/clone":36,"./lib/find-best-match":37,"./lib/is-valid-input-type":38}],34:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addMatchingCardsToResults = void 0; var clone_1 = _dereq_("./clone"); var matches_1 = _dereq_("./matches"); function addMatchingCardsToResults(cardNumber, cardConfiguration, results) { var i, patternLength; for (i = 0; i < cardConfiguration.patterns.length; i++) { var pattern = cardConfiguration.patterns[i]; if (!(0, matches_1.matches)(cardNumber, pattern)) { continue; } var clonedCardConfiguration = (0, clone_1.clone)(cardConfiguration); if (Array.isArray(pattern)) { patternLength = String(pattern[0]).length; } else { patternLength = String(pattern).length; } if (cardNumber.length >= patternLength) { clonedCardConfiguration.matchStrength = patternLength; } results.push(clonedCardConfiguration); break; } } exports.addMatchingCardsToResults = addMatchingCardsToResults; },{"./clone":36,"./matches":39}],35:[function(_dereq_,module,exports){ "use strict"; var cardTypes = { visa: { niceType: "Visa", type: "visa", patterns: [4], gaps: [4, 8, 12], lengths: [16, 18, 19], code: { name: "CVV", size: 3, }, }, mastercard: { niceType: "Mastercard", type: "mastercard", patterns: [[51, 55], [2221, 2229], [223, 229], [23, 26], [270, 271], 2720], gaps: [4, 8, 12], lengths: [16], code: { name: "CVC", size: 3, }, }, "american-express": { niceType: "American Express", type: "american-express", patterns: [34, 37], gaps: [4, 10], lengths: [15], code: { name: "CID", size: 4, }, }, "diners-club": { niceType: "Diners Club", type: "diners-club", patterns: [[300, 305], 36, 38, 39], gaps: [4, 10], lengths: [14, 16, 19], code: { name: "CVV", size: 3, }, }, discover: { niceType: "Discover", type: "discover", patterns: [6011, [644, 649], 65], gaps: [4, 8, 12], lengths: [16, 19], code: { name: "CID", size: 3, }, }, jcb: { niceType: "JCB", type: "jcb", patterns: [2131, 1800, [3528, 3589]], gaps: [4, 8, 12], lengths: [16, 17, 18, 19], code: { name: "CVV", size: 3, }, }, unionpay: { niceType: "UnionPay", type: "unionpay", patterns: [ 620, [62100, 62182], [62184, 62187], [62185, 62197], [62200, 62205], [622010, 622999], 622018, [62207, 62209], [623, 626], 6270, 6272, 6276, [627700, 627779], [627781, 627799], [6282, 6289], 6291, 6292, 810, [8110, 8131], [8132, 8151], [8152, 8163], [8164, 8171], ], gaps: [4, 8, 12], lengths: [14, 15, 16, 17, 18, 19], code: { name: "CVN", size: 3, }, }, maestro: { niceType: "Maestro", type: "maestro", patterns: [ 493698, [500000, 504174], [504176, 506698], [506779, 508999], [56, 59], 63, 67, 6, ], gaps: [4, 8, 12], lengths: [12, 13, 14, 15, 16, 17, 18, 19], code: { name: "CVC", size: 3, }, }, elo: { niceType: "Elo", type: "elo", patterns: [ 401178, 401179, 438935, 457631, 457632, 431274, 451416, 457393, 504175, [506699, 506778], [509000, 509999], 627780, 636297, 636368, [650031, 650033], [650035, 650051], [650405, 650439], [650485, 650538], [650541, 650598], [650700, 650718], [650720, 650727], [650901, 650978], [651652, 651679], [655000, 655019], [655021, 655058], ], gaps: [4, 8, 12], lengths: [16], code: { name: "CVE", size: 3, }, }, mir: { niceType: "Mir", type: "mir", patterns: [[2200, 2204]], gaps: [4, 8, 12], lengths: [16, 17, 18, 19], code: { name: "CVP2", size: 3, }, }, hiper: { niceType: "Hiper", type: "hiper", patterns: [637095, 63737423, 63743358, 637568, 637599, 637609, 637612], gaps: [4, 8, 12], lengths: [16], code: { name: "CVC", size: 3, }, }, hipercard: { niceType: "Hipercard", type: "hipercard", patterns: [606282], gaps: [4, 8, 12], lengths: [16], code: { name: "CVC", size: 3, }, }, }; module.exports = cardTypes; },{}],36:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.clone = void 0; function clone(originalObject) { if (!originalObject) { return null; } return JSON.parse(JSON.stringify(originalObject)); } exports.clone = clone; },{}],37:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findBestMatch = void 0; function hasEnoughResultsToDetermineBestMatch(results) { var numberOfResultsWithMaxStrengthProperty = results.filter(function (result) { return result.matchStrength; }).length; /* * if all possible results have a maxStrength property that means the card * number is sufficiently long enough to determine conclusively what the card * type is * */ return (numberOfResultsWithMaxStrengthProperty > 0 && numberOfResultsWithMaxStrengthProperty === results.length); } function findBestMatch(results) { if (!hasEnoughResultsToDetermineBestMatch(results)) { return null; } return results.reduce(function (bestMatch, result) { if (!bestMatch) { return result; } /* * If the current best match pattern is less specific than this result, set * the result as the new best match * */ if (Number(bestMatch.matchStrength) < Number(result.matchStrength)) { return result; } return bestMatch; }); } exports.findBestMatch = findBestMatch; },{}],38:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidInputType = void 0; function isValidInputType(cardNumber) { return typeof cardNumber === "string" || cardNumber instanceof String; } exports.isValidInputType = isValidInputType; },{}],39:[function(_dereq_,module,exports){ "use strict"; /* * Adapted from https://github.com/polvo-labs/card-type/blob/aaab11f80fa1939bccc8f24905a06ae3cd864356/src/cardType.js#L37-L42 * */ Object.defineProperty(exports, "__esModule", { value: true }); exports.matches = void 0; function matchesRange(cardNumber, min, max) { var maxLengthToCheck = String(min).length; var substr = cardNumber.substr(0, maxLengthToCheck); var integerRepresentationOfCardNumber = parseInt(substr, 10); min = parseInt(String(min).substr(0, substr.length), 10); max = parseInt(String(max).substr(0, substr.length), 10); return (integerRepresentationOfCardNumber >= min && integerRepresentationOfCardNumber <= max); } function matchesPattern(cardNumber, pattern) { pattern = String(pattern); return (pattern.substring(0, cardNumber.length) === cardNumber.substring(0, pattern.length)); } function matches(cardNumber, pattern) { if (Array.isArray(pattern)) { return matchesRange(cardNumber, pattern[0], pattern[1]); } return matchesPattern(cardNumber, pattern); } exports.matches = matches; },{}],40:[function(_dereq_,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Framebus = void 0; var lib_1 = _dereq_("./lib"); var DefaultPromise = (typeof window !== "undefined" && window.Promise); var Framebus = /** @class */ (function () { function Framebus(options) { if (options === void 0) { options = {}; } this.origin = options.origin || "*"; this.channel = options.channel || ""; this.verifyDomain = options.verifyDomain; // if a targetFrames configuration is not passed in, // the default behavior is to broadcast the payload // to the top level window or to the frame itself. // By default, the broadcast function will loop through // all the known siblings and children of the window. // If a targetFrames array is passed, it will instead // only broadcast to those specified targetFrames this.targetFrames = options.targetFrames || []; this.limitBroadcastToFramesArray = Boolean(options.targetFrames); this.isDestroyed = false; this.listeners = []; this.hasAdditionalChecksForOnListeners = Boolean(this.verifyDomain || this.limitBroadcastToFramesArray); } Framebus.setPromise = function (PromiseGlobal) { Framebus.Promise = PromiseGlobal; }; Framebus.target = function (options) { return new Framebus(options); }; Framebus.prototype.addTargetFrame = function (frame) { if (!this.limitBroadcastToFramesArray) { return; } this.targetFrames.push(frame); }; Framebus.prototype.include = function (childWindow) { if (childWindow == null) { return false; } if (childWindow.Window == null) { return false; } if (childWindow.constructor !== childWindow.Window) { return false; } lib_1.childWindows.push(childWindow); return true; }; Framebus.prototype.target = function (options) { return Framebus.target(options); }; Framebus.prototype.emit = function (eventName, data, reply) { if (this.isDestroyed) { return false; } var origin = this.origin; eventName = this.namespaceEvent(eventName); if ((0, lib_1.isntString)(eventName)) { return false; } if ((0, lib_1.isntString)(origin)) { return false; } if (typeof data === "function") { reply = data; data = undefined; // eslint-disable-line no-undefined } var payload = (0, lib_1.packagePayload)(eventName, origin, data, reply); if (!payload) { return false; } if (this.limitBroadcastToFramesArray) { this.targetFramesAsWindows().forEach(function (frame) { (0, lib_1.sendMessage)(frame, payload, origin); }); } else { (0, lib_1.broadcast)(payload, { origin: origin, frame: window.top || window.self, }); } return true; }; Framebus.prototype.emitAsPromise = function (eventName, data) { var _this = this; return new Framebus.Promise(function (resolve, reject) { var didAttachListener = _this.emit(eventName, data, function (payload) { resolve(payload); }); if (!didAttachListener) { reject(new Error("Listener not added for \"".concat(eventName, "\""))); } }); }; Framebus.prototype.on = function (eventName, originalHandler) { if (this.isDestroyed) { return false; } // eslint-disable-next-line @typescript-eslint/no-this-alias var self = this; var origin = this.origin; var handler = originalHandler; eventName = this.namespaceEvent(eventName); if ((0, lib_1.subscriptionArgsInvalid)(eventName, handler, origin)) { return false;