{"version":3,"file":"billing-redirect-message-502c8ce9.js","sources":["../../../node_modules/@stripe/stripe-js/dist/stripe.esm.js","../../../common/resources/client/billing/checkout/stripe/use-stripe.ts","../../../common/resources/client/billing/checkout/stripe/stripe-elements-form.tsx","../../../common/resources/client/billing/billing-redirect-message.tsx"],"sourcesContent":["var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"2.1.11\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n }\n\n script.addEventListener('load', function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n });\n script.addEventListener('error', function () {\n reject(new Error('Failed to load Stripe.js'));\n });\n } catch (error) {\n reject(error);\n return;\n }\n });\n return stripePromise;\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\n// own script injection.\n\nvar stripePromise$1 = Promise.resolve().then(function () {\n return loadScript(null);\n});\nvar loadCalled = false;\nstripePromise$1[\"catch\"](function (err) {\n if (!loadCalled) {\n console.warn(err);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now();\n return stripePromise$1.then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import {useEffect, useRef, useState} from 'react';\nimport {loadStripe, Stripe, StripeElements} from '@stripe/stripe-js';\nimport {apiClient} from '@common/http/query-client';\nimport {useSelectedLocale} from '@common/i18n/selected-locale';\nimport {useAuth} from '@common/auth/use-auth';\nimport {useIsDarkMode} from '@common/ui/themes/use-is-dark-mode';\nimport {useSettings} from '@common/core/settings/use-settings';\n\ninterface UseStripeProps {\n type: 'setupIntent' | 'subscription';\n productId?: string | number;\n priceId?: string | number;\n}\nexport function useStripe({type, productId, priceId}: UseStripeProps) {\n const {user} = useAuth();\n const isDarkMode = useIsDarkMode();\n const isInitiatedRef = useRef(false);\n const paymentElementRef = useRef(null);\n const {localeCode} = useSelectedLocale();\n const [stripe, setStripe] = useState(null);\n const [elements, setElements] = useState(null);\n const {\n branding: {site_name},\n billing: {\n stripe_public_key,\n stripe: {enable},\n },\n } = useSettings();\n\n useEffect(() => {\n if (!enable || !stripe_public_key || isInitiatedRef.current) return;\n\n Promise.all([\n // load stripe js library\n loadStripe(stripe_public_key, {\n apiVersion: '2022-08-01',\n locale: localeCode as any,\n }),\n // create partial subscription for clientSecret\n type === 'setupIntent'\n ? createSetupIntent()\n : createSubscription(productId!, priceId),\n ]).then(([stripe, {clientSecret}]) => {\n if (stripe && paymentElementRef.current) {\n const elements = stripe.elements({\n clientSecret,\n appearance: {\n theme: isDarkMode ? 'night' : 'stripe',\n },\n });\n\n // Create and mount the Payment Element\n const paymentElement = elements.create('payment', {\n business: {name: site_name},\n terms: {card: 'never'},\n fields: {\n billingDetails: {\n address: 'auto',\n },\n },\n defaultValues: {\n billingDetails: {\n email: user?.email,\n },\n },\n });\n paymentElement.mount(paymentElementRef.current);\n\n setStripe(stripe);\n setElements(elements);\n }\n });\n\n isInitiatedRef.current = true;\n }, [\n productId,\n stripe_public_key,\n enable,\n isDarkMode,\n localeCode,\n site_name,\n type,\n user?.email,\n ]);\n\n return {\n stripe,\n elements,\n paymentElementRef,\n stripeIsEnabled: stripe_public_key != null && enable,\n };\n}\n\nfunction createSetupIntent(): Promise<{clientSecret: string}> {\n return apiClient.post('billing/stripe/create-setup-intent').then(r => r.data);\n}\n\nfunction createSubscription(\n productId: number | string,\n priceId?: number | string\n): Promise<{clientSecret: string}> {\n return apiClient\n .post('billing/stripe/create-partial-subscription', {\n product_id: productId,\n price_id: priceId,\n })\n .then(r => r.data);\n}\n","import clsx from 'clsx';\nimport {Button} from '@common/ui/buttons/button';\nimport {FormEventHandler, Fragment, ReactNode, useState} from 'react';\nimport {useStripe} from '@common/billing/checkout/stripe/use-stripe';\nimport {Skeleton} from '@common/ui/skeleton/skeleton';\n\ninterface StripeElementsFormProps {\n productId?: string | number;\n priceId?: string | number;\n type: 'setupIntent' | 'subscription';\n submitLabel: ReactNode;\n returnUrl: string;\n}\nexport function StripeElementsForm({\n productId,\n priceId,\n type = 'subscription',\n submitLabel,\n returnUrl,\n}: StripeElementsFormProps) {\n const {stripe, elements, paymentElementRef, stripeIsEnabled} = useStripe({\n type,\n productId,\n priceId,\n });\n const [errorMessage, setErrorMessage] = useState(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n // disable upgrade button if stripe is enabled, but not loaded yet\n const stripeIsReady: boolean =\n !stripeIsEnabled || (elements != null && stripe != null);\n\n const handleSubmit: FormEventHandler = async e => {\n e.preventDefault();\n\n // stripe has not loaded yet\n if (!stripe || !elements) return;\n\n setIsSubmitting(true);\n\n try {\n const method =\n type === 'subscription' ? 'confirmPayment' : 'confirmSetup';\n const result = await stripe[method]({\n elements,\n confirmParams: {\n return_url: returnUrl,\n },\n });\n\n // don't show validation error as it will be shown already by stripe payment element\n if (result.error?.type !== 'validation_error' && result.error?.message) {\n setErrorMessage(result.error.message);\n }\n } catch {}\n\n setIsSubmitting(false);\n };\n\n return (\n
\n \n {stripeIsEnabled && }\n \n {errorMessage && !isSubmitting && (\n
{errorMessage}
\n )}\n \n {submitLabel}\n \n \n );\n}\n\nfunction StripeSkeleton() {\n return (\n \n \n \n \n \n \n );\n}\n","import {MessageDescriptor} from '../i18n/message-descriptor';\nimport {Link, To} from 'react-router-dom';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {TaskAltIcon} from '../icons/material/TaskAlt';\nimport {ErrorIcon} from '../icons/material/Error';\nimport {Trans} from '../i18n/trans';\nimport {Button} from '../ui/buttons/button';\nimport {Skeleton} from '../ui/skeleton/skeleton';\nimport {opacityAnimation} from '../ui/animation/opacity-animation';\n\nexport interface BillingRedirectMessageConfig {\n message: MessageDescriptor;\n status: 'success' | 'error';\n link: To;\n buttonLabel: MessageDescriptor;\n}\n\ninterface BillingRedirectMessageProps {\n config?: BillingRedirectMessageConfig;\n}\nexport function BillingRedirectMessage({config}: BillingRedirectMessageProps) {\n return (\n \n
\n {config ? (\n \n {config.status === 'success' ? (\n \n ) : (\n \n )}\n
\n \n
\n \n \n \n \n ) : (\n \n )}\n
\n
\n );\n}\n\nfunction LoadingSkeleton() {\n return (\n \n \n \n \n \n );\n}\n"],"names":["V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","findScript","scripts","i","script","injectScript","params","queryString","headOrBody","registerWrapper","stripe","startTime","stripePromise","loadScript","resolve","reject","error","initStripe","maybeStripe","args","stripePromise$1","loadCalled","err","loadStripe","_len","_key","useStripe","type","productId","priceId","user","useAuth","isDarkMode","useIsDarkMode","isInitiatedRef","useRef","paymentElementRef","localeCode","useSelectedLocale","setStripe","useState","elements","setElements","site_name","stripe_public_key","enable","useSettings","useEffect","createSetupIntent","createSubscription","clientSecret","apiClient","r","StripeElementsForm","submitLabel","returnUrl","stripeIsEnabled","errorMessage","setErrorMessage","isSubmitting","setIsSubmitting","stripeIsReady","handleSubmit","e","result","_a","_b","jsxs","jsx","clsx","StripeSkeleton","Button","Fragment","Skeleton","BillingRedirectMessage","config","AnimatePresence","m","opacityAnimation","TaskAltIcon","ErrorIcon","Trans","Link","LoadingSkeleton"],"mappings":"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","x_google_ignoreList":[0]}