braintree-web
Version:
A suite of tools for integrating Braintree in the browser
1,515 lines (1,451 loc) • 180 kB
JavaScript
(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 __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PromiseGlobal = void 0;
var promise_polyfill_1 = __importDefault(_dereq_("promise-polyfill"));
var PromiseGlobal =
// eslint-disable-next-line no-undef
typeof Promise !== "undefined" ? Promise : promise_polyfill_1.default;
exports.PromiseGlobal = PromiseGlobal;
},{"promise-polyfill":63}],2:[function(_dereq_,module,exports){
"use strict";
var promise_1 = _dereq_("./lib/promise");
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.crossorigin) {
script.setAttribute("crossorigin", "" + options.crossorigin);
}
Object.keys(attrs).forEach(function (key) {
script.setAttribute("data-" + key, "" + attrs[key]);
});
scriptLoadPromise = new promise_1.PromiseGlobal(function (resolve, reject) {
script.addEventListener("load", function () {
resolve(script);
});
script.addEventListener("error", function () {
reject(new Error(options.src + " failed to load."));
});
script.addEventListener("abort", function () {
reject(new Error(options.src + " has aborted."));
});
container.appendChild(script);
});
scriptPromiseCache[stringifiedOptions] = scriptLoadPromise;
return scriptLoadPromise;
}
loadScript.clearCache = function () {
scriptPromiseCache = {};
};
module.exports = loadScript;
},{"./lib/promise":1}],3:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/load-script");
},{"./dist/load-script":2}],4:[function(_dereq_,module,exports){
"use strict";
module.exports = function isAndroid(ua) {
ua = ua || window.navigator.userAgent;
return /Android/i.test(ua);
};
},{}],5:[function(_dereq_,module,exports){
"use strict";
module.exports = function isChromeOS(ua) {
ua = ua || window.navigator.userAgent;
return /CrOS/i.test(ua);
};
},{}],6:[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":7,"./is-edge":8,"./is-opera":17,"./is-samsung":18,"./is-silk":19}],7:[function(_dereq_,module,exports){
"use strict";
module.exports = function isDuckDuckGo(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("DuckDuckGo/") !== -1;
};
},{}],8:[function(_dereq_,module,exports){
"use strict";
module.exports = function isEdge(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("Edge/") !== -1;
};
},{}],9:[function(_dereq_,module,exports){
"use strict";
module.exports = function isFirefox(ua) {
ua = ua || window.navigator.userAgent;
return /Firefox/i.test(ua);
};
},{}],10:[function(_dereq_,module,exports){
"use strict";
var isIE11 = _dereq_("./is-ie11");
module.exports = function isIE(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("MSIE") !== -1 || isIE11(ua);
};
},{"./is-ie11":12}],11:[function(_dereq_,module,exports){
"use strict";
module.exports = function isIe10(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("MSIE 10") !== -1;
};
},{}],12:[function(_dereq_,module,exports){
"use strict";
module.exports = function isIe11(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("Trident/7") !== -1;
};
},{}],13:[function(_dereq_,module,exports){
"use strict";
module.exports = function isIe9(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("MSIE 9") !== -1;
};
},{}],14:[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":16}],15:[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":16,"./is-ios-google-search-app":14}],16:[function(_dereq_,module,exports){
"use strict";
module.exports = function isIos(ua) {
ua = ua || window.navigator.userAgent;
return /iPhone|iPod|iPad/i.test(ua);
};
},{}],17:[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);
};
},{}],18:[function(_dereq_,module,exports){
"use strict";
module.exports = function isSamsungBrowser(ua) {
ua = ua || window.navigator.userAgent;
return /SamsungBrowser/i.test(ua);
};
},{}],19:[function(_dereq_,module,exports){
"use strict";
module.exports = function isSilk(ua) {
ua = ua || window.navigator.userAgent;
return ua.indexOf("Silk/") !== -1;
};
},{}],20:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-android");
},{"./dist/is-android":4}],21:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-chrome-os");
},{"./dist/is-chrome-os":5}],22:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-chrome");
},{"./dist/is-chrome":6}],23:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-edge");
},{"./dist/is-edge":8}],24:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-firefox");
},{"./dist/is-firefox":9}],25:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-ie");
},{"./dist/is-ie":10}],26:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-ie10");
},{"./dist/is-ie10":11}],27:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-ie9");
},{"./dist/is-ie9":13}],28:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-ios-webview");
},{"./dist/is-ios-webview":15}],29:[function(_dereq_,module,exports){
module.exports = _dereq_("./dist/is-ios");
},{"./dist/is-ios":16}],30:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.toggle = exports.remove = exports.add = void 0;
function _classesOf(element) {
return element.className.trim().split(/\s+/);
}
function add(element) {
var toAdd = [];
for (var _i = 1; _i < arguments.length; _i++) {
toAdd[_i - 1] = arguments[_i];
}
element.className = _classesOf(element)
.filter(function (classname) { return toAdd.indexOf(classname) === -1; })
.concat(toAdd)
.join(" ");
}
exports.add = add;
function remove(element) {
var toRemove = [];
for (var _i = 1; _i < arguments.length; _i++) {
toRemove[_i - 1] = arguments[_i];
}
element.className = _classesOf(element)
.filter(function (classname) { return toRemove.indexOf(classname) === -1; })
.join(" ");
}
exports.remove = remove;
function toggle(element, classname, adding) {
if (adding) {
add(element, classname);
}
else {
remove(element, classname);
}
}
exports.toggle = toggle;
},{}],31:[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;
},{}],32:[function(_dereq_,module,exports){
"use strict";
var GlobalPromise = (typeof Promise !== "undefined"
? Promise // eslint-disable-line no-undef
: null);
var ExtendedPromise = /** @class */ (function () {
function ExtendedPromise(options) {
var _this = this;
if (typeof options === "function") {
this._promise = new ExtendedPromise.Promise(options);
return;
}
this._promise = new ExtendedPromise.Promise(function (resolve, reject) {
_this._resolveFunction = resolve;
_this._rejectFunction = reject;
});
options = options || {};
this._onResolve = options.onResolve || ExtendedPromise.defaultOnResolve;
this._onReject = options.onReject || ExtendedPromise.defaultOnReject;
if (ExtendedPromise.shouldCatchExceptions(options)) {
this._promise.catch(function () {
// prevents unhandled promise rejection warning
// in the console for extended promises that
// that catch the error in an asynchronous manner
});
}
this._resetState();
}
ExtendedPromise.defaultOnResolve = function (result) {
return ExtendedPromise.Promise.resolve(result);
};
ExtendedPromise.defaultOnReject = function (err) {
return ExtendedPromise.Promise.reject(err);
};
ExtendedPromise.setPromise = function (PromiseClass) {
ExtendedPromise.Promise = PromiseClass;
};
ExtendedPromise.shouldCatchExceptions = function (options) {
if (options.hasOwnProperty("suppressUnhandledPromiseMessage")) {
return Boolean(options.suppressUnhandledPromiseMessage);
}
return Boolean(ExtendedPromise.suppressUnhandledPromiseMessage);
};
// start Promise methods documented in:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Methods
ExtendedPromise.all = function (args) {
return ExtendedPromise.Promise.all(args);
};
ExtendedPromise.allSettled = function (args) {
return ExtendedPromise.Promise.allSettled(args);
};
ExtendedPromise.race = function (args) {
return ExtendedPromise.Promise.race(args);
};
ExtendedPromise.reject = function (arg) {
return ExtendedPromise.Promise.reject(arg);
};
ExtendedPromise.resolve = function (arg) {
return ExtendedPromise.Promise.resolve(arg);
};
ExtendedPromise.prototype.then = function () {
var _a;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return (_a = this._promise).then.apply(_a, args);
};
ExtendedPromise.prototype.catch = function () {
var _a;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return (_a = this._promise).catch.apply(_a, args);
};
ExtendedPromise.prototype.resolve = function (arg) {
var _this = this;
if (this.isFulfilled) {
return this;
}
this._setResolved();
ExtendedPromise.Promise.resolve()
.then(function () {
return _this._onResolve(arg);
})
.then(function (argForResolveFunction) {
_this._resolveFunction(argForResolveFunction);
})
.catch(function (err) {
_this._resetState();
_this.reject(err);
});
return this;
};
ExtendedPromise.prototype.reject = function (arg) {
var _this = this;
if (this.isFulfilled) {
return this;
}
this._setRejected();
ExtendedPromise.Promise.resolve()
.then(function () {
return _this._onReject(arg);
})
.then(function (result) {
_this._setResolved();
_this._resolveFunction(result);
})
.catch(function (err) {
return _this._rejectFunction(err);
});
return this;
};
ExtendedPromise.prototype._resetState = function () {
this.isFulfilled = false;
this.isResolved = false;
this.isRejected = false;
};
ExtendedPromise.prototype._setResolved = function () {
this.isFulfilled = true;
this.isResolved = true;
this.isRejected = false;
};
ExtendedPromise.prototype._setRejected = function () {
this.isFulfilled = true;
this.isResolved = false;
this.isRejected = true;
};
ExtendedPromise.Promise = GlobalPromise;
return ExtendedPromise;
}());
module.exports = ExtendedPromise;
},{}],33:[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 = assign_1.assign({}, default_attributes_1.defaultAttributes, options);
if (config.style && typeof config.style !== "string") {
assign_1.assign(iframe.style, config.style);
delete config.style;
}
set_attributes_1.setAttributes(iframe, config);
if (!iframe.getAttribute("id")) {
iframe.id = iframe.name;
}
return iframe;
};
},{"./lib/assign":34,"./lib/default-attributes":35,"./lib/set-attributes":36}],34:[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;
},{}],35:[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",
};
},{}],36:[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;
},{}],37:[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;
},{}],38:[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;
},{}],39:[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;
},{}],40:[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;
},{}],41:[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":38,"./lib/once":39,"./lib/promise-or-callback":40}],42:[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 = clone_1.clone(ORIGINAL_TEST_ORDER);
function findType(cardType) {
return customCards[cardType] || cardTypes[cardType];
}
function getAllCardTypes() {
return testOrder.map(function (cardType) { return 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 (!is_valid_input_type_1.isValidInputType(cardNumber)) {
return results;
}
if (cardNumber.length === 0) {
return getAllCardTypes();
}
testOrder.forEach(function (cardType) {
var cardConfiguration = findType(cardType);
add_matching_cards_to_results_1.addMatchingCardsToResults(cardNumber, cardConfiguration, results);
});
var bestMatch = find_best_match_1.findBestMatch(results);
if (bestMatch) {
return [bestMatch];
}
return results;
}
creditCardType.getTypeInfo = function (cardType) {
return 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("\"" + 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 = 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 = clone_1.clone(ORIGINAL_TEST_ORDER);
customCards = {};
};
creditCardType.types = cardNames;
module.exports = creditCardType;
},{"./lib/add-matching-cards-to-results":43,"./lib/card-types":44,"./lib/clone":45,"./lib/find-best-match":46,"./lib/is-valid-input-type":47}],43:[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 (!matches_1.matches(cardNumber, pattern)) {
continue;
}
var clonedCardConfiguration = 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":45,"./matches":48}],44:[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,
[624, 626],
[62100, 62182],
[62184, 62187],
[62185, 62197],
[62200, 62205],
[622010, 622999],
622018,
[622019, 622999],
[62207, 62209],
[622126, 622925],
[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;
},{}],45:[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;
},{}],46:[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;
},{}],47:[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;
},{}],48:[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;
},{}],49:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Framebus = void 0;
var is_not_string_1 = _dereq_("./lib/is-not-string");
var subscription_args_invalid_1 = _dereq_("./lib/subscription-args-invalid");
var broadcast_1 = _dereq_("./lib/broadcast");
var package_payload_1 = _dereq_("./lib/package-payload");
var constants_1 = _dereq_("./lib/constants");
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;
this.isDestroyed = false;
this.listeners = [];
}
Framebus.setPromise = function (PromiseGlobal) {
Framebus.Promise = PromiseGlobal;
};
Framebus.target = function (options) {
return new Framebus(options);
};
Framebus.prototype.include = function (childWindow) {
if (childWindow == null) {
return false;
}
if (childWindow.Window == null) {
return false;
}
if (childWindow.constructor !== childWindow.Window) {
return false;
}
constants_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 (is_not_string_1.isntString(eventName)) {
return false;
}
if (is_not_string_1.isntString(origin)) {
return false;
}
if (typeof data === "function") {
reply = data;
data = undefined; // eslint-disable-line no-undefined
}
var payload = package_payload_1.packagePayload(eventName, origin, data, reply);
if (!payload) {
return false;
}
broadcast_1.broadcast(window.top || window.self, payload, origin);
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 \"" + 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 (subscription_args_invalid_1.subscriptionArgsInvalid(eventName, handler, origin)) {
return false;
}
if (this.verifyDomain) {
/* eslint-disable no-invalid-this, @typescript-eslint/ban-ts-comment */
handler = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
// @ts-ignore
if (self.checkOrigin(this && this.origin)) {
originalHandler.apply(void 0, args);
}
};
/* eslint-enable no-invalid-this, @typescript-eslint/ban-ts-comment */
}
this.listeners.push({
eventName: eventName,
handler: handler,
originalHandler: originalHandler,
});
constants_1.subscribers[origin] = constants_1.subscribers[origin] || {};
constants_1.subscribers[origin][eventName] = constants_1.subscribers[origin][eventName] || [];
constants_1.subscribers[origin][eventName].push(handler);
return true;
};
Framebus.prototype.off = function (eventName, originalHandler) {
var handler = originalHandler;
if (this.isDestroyed) {
return false;
}
if (this.verifyDomain) {
for (var i = 0; i < this.listeners.length; i++) {
var listener = this.listeners[i];
if (listener.originalHandler === originalHandler) {
handler = listener.handler;
}
}
}
eventName = this.namespaceEvent(eventName);
var origin = this.origin;
if (subscription_args_invalid_1.subscriptionArgsInvalid(eventName, handler, origin)) {
return false;
}
var subscriberList = constants_1.subscribers[origin] && constants_1.subscribers[origin][eventName];
if (!subscriberList) {
return false;
}
for (var i = 0; i < subscriberList.length; i++) {
if (subscriberList[i] === handler) {
subscriberList.splice(i, 1);
return true;
}
}
return false;
};
Framebus.prototype.teardown = function () {
if (this.isDestroyed) {
return;
}
this.isDestroyed = true;
for (var i = 0; i < this.listeners.length; i++) {
var listener = this.listeners[i];
this.off(listener.eventName, listener.handler);
}
this.listeners.length = 0;
};
Framebus.prototype.checkOrigin = function (postMessageOrigin) {
var merchantHost;
var a = document.createElement("a");
a.href = location.href;
if (a.protocol === "https:") {
merchantHost = a.host.replace(/:443$/, "");
}
else if (a.protocol === "http:") {
merchantHost = a.host.replace(/:80$/, "");
}
else {
merchantHost = a.host;
}
var merchantOrigin = a.protocol + "//" + merchantHost;
if (merchantOrigin === postMessageOrigin) {
return true;
}
if (this.verifyDomain) {
return this.verifyDomain(postMessageOrigin);
}
return true;
};
Framebus.prototype.namespaceEvent = function (eventName) {
if (!this.channel) {
return eventName;
}
return this.channel + ":" + eventName;
};
Framebus.Promise = DefaultPromise;
return Framebus;
}());
exports.Framebus = Framebus;
},{"./lib/broadcast":53,"./lib/constants":54,"./lib/is-not-string":57,"./lib/package-payload":59,"./lib/subscription-args-invalid":61}],50:[function(_dereq_,module,exports){
"use strict";
var attach_1 = _dereq_("./lib/attach");
var framebus_1 = _dereq_("./framebus");
attach_1.attach();
module.exports = framebus_1.Framebus;
},{"./framebus":49,"./lib/attach":51}],51:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.detach = exports.attach = void 0;
var message_1 = _dereq_("./message");
var isAttached = false;
function attach() {
if (isAttached || typeof window === "undefined") {
return;
}
isAttached = true;
window.addEventListener("message", message_1.onmessage, false);
}
exports.attach = attach;
// removeIf(production)
function detach() {
isAttached = false;
window.removeEventListener("message", message_1.onmessage, false);
}
exports.detach = detach;
// endRemoveIf(production)
},{"./message":58}],52:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.broadcastToChildWindows = void 0;
var broadcast_1 = _dereq_("./broadcast");
var constants_1 = _dereq_("./constants");
function broadcastToChildWindows(payload, origin, source) {
for (var i = constants_1.childWindows.length - 1; i >= 0; i--) {
var childWindow = constants_1.childWindows[i];
if (childWindow.closed) {
constants_1.childWindows.splice(i, 1);
}
else if (source !== childWindow) {
broadcast_1.broadcast(childWindow.top, payload, origin);
}
}
}
exports.broadcastToChildWindows = broadcastToChildWindows;
},{"./broadcast":53,"./constants":54}],53:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.broadcast = void 0;
var has_opener_1 = _dereq_("./has-opener");
function broadcast(frame, payload, origin) {
var i = 0;
var frameToBroadcastTo;
try {
frame.postMessage(payload, origin);
if (has_opener_1.hasOpener(frame) && frame.opener.top !== window.top) {
broadcast(frame.opener.top, payload, origin);
}
// previously, our max value was frame.frames.length
// but frames.length inherits from window.length
// which can be overwritten if a developer does
// `var length = value;` outside of a function
// scope, it'll prevent us from looping through
// all the frames. With this, we loop through
// until there are no longer any frames
// eslint-disable-next-line no-cond-assign
while ((frameToBroadcastTo = frame.frames[i])) {
broadcast(frameToBroadcastTo, payload, origin);
i++;
}
}
catch (_) {
/* ignored */
}
}
exports.broadcast = broadcast;
},{"./has-opener":56}],54:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.subscribers = exports.childWindows = exports.prefix = void 0;
exports.prefix = "/*framebus*/";
exports.childWindows = [];
exports.subscribers = {};
},{}],55:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.dispatch = void 0;
var constants_1 = _dereq_("./constants");
function dispatch(origin, event, data, reply, e) {
if (!constants_1.subscribers[origin]) {
return;
}
if (!constants_1.subscribers[origin][event]) {
return;
}
var args = [];
if (data) {
args.push(data);
}
if (reply) {
args.push(reply);
}
for (var i = 0; i < constants_1.subscribers[origin][event].length; i++) {
constants_1.subscribers[origin][event][i].apply(e, args);
}
}
exports.dispatch = dispatch;
},{"./constants":54}],56:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.hasOpener = void 0;
function hasOpener(frame) {
if (frame.top !== frame) {
return false;
}
if (frame.opener == null) {
return false;
}
if (frame.opener === frame) {
return false;
}
if (frame.opener.closed === true) {
return false;
}
return true;
}
exports.hasOpener = hasOpener;
},{}],57:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.isntString = void 0;
function isntString(str) {
return typeof str !== "string";
}
exports.isntString = isntString;
},{}],58:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.onmessage = void 0;
var is_not_string_1 = _dereq_("./is-not-string");
var unpack_payload_1 = _dereq_("./unpack-payload");
var dispatch_1 = _dereq_("./dispatch");
var broadcast_to_child_windows_1 = _dereq_("./broadcast-to-child-windows");
function onmessage(e) {
if (is_not_string_1.isntString(e.data)) {
return;
}
var payload = unpack_payload_1.unpackPayload(e);
if (!payload) {
return;
}
var data = payload.eventData;
var reply = payload.reply;
dispatch_1.dispatch("*", payload.event, data, reply, e);
dispatch_1.dispatch(e.origin, payload.event, data, reply, e);
broadcast_to_child_windows_1.broadcastToChildWindows(e.data, payload.origin, e.source);
}
exports.onmessage = onmessage;
},{"./broadcast-to-child-windows":52,"./dispatch":55,"./is-not-string":57,"./unpack-payload":62}],59:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.packagePayload = void 0;
var subscribe_replier_1 = _dereq_("./subscribe-replier");
var constants_1 = _dereq_("./constants");
function packagePayload(event, origin, data, reply) {
var packaged;
var payload = {
event: event,
origin: origin,
};
if (typeof reply === "function") {
payload.reply = subscribe_replier_1.subscribeReplier(reply, origin);
}
payload.eventData = data;
try {
packaged = constants_1.prefix + JSON.stringify(payload);
}
catch (e) {
throw new Error("Could not stringify event: " + e.message);
}
return packaged;
}
exports.packagePayload = packagePayload;
},{"./constants":54,"./subscribe-replier":60}],60:[function(_dereq_,module,exports){
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.subscribeReplier = void 0;
var framebus_1 = _dereq_("../framebus");
var uuid_1 = __importDefault(_dereq_("@braintree/uuid"));
function subscribeReplier(fn, origin) {
var uuid = uuid_1.default();
function replier(data, replyOriginHandler) {
fn(data, replyOriginHandler);
framebus_1.Framebus.target({
origin: origin,
}).off(uuid, replier);
}
framebus_1.Framebus.target({
origin: origin,
}).on(uuid, replier);
return uuid;
}
exports.subscribeReplier = subscribeReplier;
},{"../framebus":49,"@braintree/uuid":37}],61:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.subscriptionArgsInvalid = void 0;
var is_not_string_1 = _dereq_("./is-not-string");
function subscriptionArgsInvalid(event, fn, origin) {
if (is_not_string_1.isntString(event)) {
return true;
}
if (typeof fn !== "function") {
return true;
}
return is_not_string_1.isntString(origin);
}
exports.subscriptionArgsInvalid = subscriptionArgsInvalid;
},{"./is-not-string":57}],62:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.unpackPayload = void 0;
var constants_1 = _dereq_("./constants");
var package_payload_1 = _dereq_("./package-payload");
function unpackPayload(e) {
var payload;
if (e.data.slice(0, constants_1.prefix.length) !== constants_1.prefix) {
return false;
}
try {
payload = JSON.parse(e.data.slice(constants_1.prefix.length));
}
catch (err) {
return false;
}
if (payload.reply) {
var replyOrigin_1 = e.origin;
var replySource_1 =