Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
171 lines
4.8 KiB
Text
171 lines
4.8 KiB
Text
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: "4.6.0",
|
|
startTime: startTime
|
|
});
|
|
};
|
|
|
|
var stripePromise = null;
|
|
var onErrorListener = null;
|
|
var onLoadListener = null;
|
|
|
|
var onError = function onError(reject) {
|
|
return function () {
|
|
reject(new Error('Failed to load Stripe.js'));
|
|
};
|
|
};
|
|
|
|
var onLoad = function onLoad(resolve, reject) {
|
|
return function () {
|
|
if (window.Stripe) {
|
|
resolve(window.Stripe);
|
|
} else {
|
|
reject(new Error('Stripe.js not available'));
|
|
}
|
|
};
|
|
};
|
|
|
|
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' || typeof document === '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);
|
|
} else if (script && onLoadListener !== null && onErrorListener !== null) {
|
|
var _script$parentNode;
|
|
|
|
// remove event listeners
|
|
script.removeEventListener('load', onLoadListener);
|
|
script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,
|
|
// reload script to trigger 'load' event
|
|
|
|
(_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);
|
|
script = injectScript(params);
|
|
}
|
|
|
|
onLoadListener = onLoad(resolve, reject);
|
|
onErrorListener = onError(reject);
|
|
script.addEventListener('load', onLoadListener);
|
|
script.addEventListener('error', onErrorListener);
|
|
} catch (error) {
|
|
reject(error);
|
|
return;
|
|
}
|
|
}); // Resets stripePromise on error
|
|
|
|
return stripePromise["catch"](function (error) {
|
|
stripePromise = null;
|
|
return Promise.reject(error);
|
|
});
|
|
};
|
|
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
|
|
|
|
var stripePromise$1;
|
|
var loadCalled = false;
|
|
|
|
var getStripePromise = function getStripePromise() {
|
|
if (stripePromise$1) {
|
|
return stripePromise$1;
|
|
}
|
|
|
|
stripePromise$1 = loadScript(null)["catch"](function (error) {
|
|
// clear cache on error
|
|
stripePromise$1 = null;
|
|
return Promise.reject(error);
|
|
});
|
|
return stripePromise$1;
|
|
}; // Execute our own script injection after a tick to give users time to do their
|
|
// own script injection.
|
|
|
|
|
|
Promise.resolve().then(function () {
|
|
return getStripePromise();
|
|
})["catch"](function (error) {
|
|
if (!loadCalled) {
|
|
console.warn(error);
|
|
}
|
|
});
|
|
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(); // if previous attempts are unsuccessful, will re-load script
|
|
|
|
return getStripePromise().then(function (maybeStripe) {
|
|
return initStripe(maybeStripe, args, startTime);
|
|
});
|
|
};
|
|
|
|
export { loadStripe };
|