'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var V3_URL = 'https://js.stripe.com/v3';
var V3_URL_REGEX = /^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/;
var EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';
var findScript = function findScript() {
var scripts = document.querySelectorAll("script[src^=\"".concat(V3_URL, "\"]"));
for (var i = 0; i < scripts.length; i++) {
var script = scripts[i];
if (!V3_URL_REGEX.test(script.src)) {
continue;
}
return script;
}
return null;
};
var injectScript = function injectScript(params) {
var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';
var script = document.createElement('script');
script.src = "".concat(V3_URL).concat(queryString);
var headOrBody = document.head || document.body;
if (!headOrBody) {
throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');
}
headOrBody.appendChild(script);
return script;
};
var registerWrapper = function registerWrapper(stripe, startTime) {
if (!stripe || !stripe._registerWrapper) {
return;
}
stripe._registerWrapper({
name: 'stripe-js',
version: "1.35.0",
startTime: startTime
});
};
var stripePromise = null;
var loadScript = function loadScript(params) {
// Ensure that we only attempt to load Stripe.js at most once
if (stripePromise !== null) {
return stripePromise;
}
stripePromise = new Promise(function (resolve, reject) {
if (typeof window === 'undefined') {
// Resolve to null when imported server side. This makes the module
// safe to import in an isomorphic code base.
resolve(null);
return;
}
if (window.Stripe && params) {
console.warn(EXISTING_SCRIPT_MESSAGE);
}
if (window.Stripe) {
resolve(window.Stripe);
return;
}
try {
var script = findScript();
if (script && params) {
console.warn(EXISTING_SCRIPT_MESSAGE);
} else if (!script) {
script = injectScript(params);
}
script.addEventListener('load', function () {
if (window.Stripe) {
resolve(window.Stripe);
} else {
reject(new Error('Stripe.js not available'));
}
});
script.addEventListener('error', function () {
reject(new Error('Failed to load Stripe.js'));
});
} catch (error) {
reject(error);
return;
}
});
return stripePromise;
};
var initStripe = function initStripe(maybeStripe, args, startTime) {
if (maybeStripe === null) {
return null;
}
var stripe = maybeStripe.apply(undefined, args);
registerWrapper(stripe, startTime);
return stripe;
}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
// own script injection.
var stripePromise$1 = Promise.resolve().then(function () {
return loadScript(null);
});
var loadCalled = false;
stripePromise$1["catch"](function (err) {
if (!loadCalled) {
console.warn(err);
}
});
var loadStripe = function loadStripe() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
loadCalled = true;
var startTime = Date.now();
return stripePromise$1.then(function (maybeStripe) {
return initStripe(maybeStripe, args, startTime);
});
};
exports.loadStripe = loadStripe;