| 123456789101112131415161718192021222324252627 |
- import { FetchError, postJSON } from '@/infrastructure/fetch-json'
- import { loadStripe } from '@stripe/stripe-js/pure'
- export default async function handleStripePaymentAction(
- error: FetchError
- ): Promise<{ handled: boolean }> {
- const clientSecret = error?.data?.clientSecret
- const publicKey = error?.data?.publicKey
- if (clientSecret && publicKey) {
- const stripe = await loadStripe(publicKey)
- if (stripe) {
- const manualConfirmationFlow =
- await stripe.confirmCardPayment(clientSecret)
- if (!manualConfirmationFlow.error) {
- try {
- await postJSON(`/user/subscription/sync`)
- } catch (error) {
- // if the sync fails, there may be stale data until the webhook is
- // processed but we can't do any special handling for that in here
- }
- return { handled: true }
- }
- }
- }
- return { handled: false }
- }
|