import {loadStripe} from '@stripe/stripe-js'; import {StripeOnrampConstructor} from '../types'; import {StandaloneOnrampOptions} from '../types/crypto-js/standalone-onramp-session'; import {loadScript, initStripeOnramp, LoadStripeOnramp} from './shared'; import {LoadStandaloneOnrampUrl} from './standalone'; export {loadCryptoOnrampAndInitialize} from './embedded_components'; // Execute our own script injection after a tick to give users time to do their // own script injection. const stripeOnrampPromise = Promise.resolve().then(() => loadScript()); let loadCalled = false; stripeOnrampPromise.catch((err: Error) => { if (!loadCalled) { console.warn(err); } }); export const loadStripeOnramp: LoadStripeOnramp = (...args) => { loadCalled = true; const startTime = Date.now(); return Promise.all([loadStripe(...args), stripeOnrampPromise]).then( ([, maybeStripeOnramp]) => initStripeOnramp(maybeStripeOnramp, args, startTime) ); }; export const getStandaloneOnrampUrl: LoadStandaloneOnrampUrl = ( options: StandaloneOnrampOptions ) => { return stripeOnrampPromise .then((stripeOnramp: StripeOnrampConstructor | null) => { // Resolve to null if promise returns null (happens serverside) if (stripeOnramp === null) { return null; } const standaloneOnramp = stripeOnramp.Standalone(options); return standaloneOnramp.getUrl(); }) .catch(() => { // Resolve to null on all errors return null; }); };