mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-08 15:22:39 +02:00
feat: implement finalize checkout endpoint and update purchase success handling
- Added a new endpoint `/stripe/finalize-checkout` to synchronously fulfill a checkout session, addressing the webhook-vs-redirect race condition. - Updated the `PurchaseSuccessPage` component to handle various states of the checkout process, including loading, completed, pending, and failed states. - Introduced a new response model `FinalizeCheckoutResponse` to provide immediate feedback on the purchase status. - Enhanced the Stripe API service to include the new finalize checkout functionality.
This commit is contained in:
parent
5ff6baedb3
commit
6e1dd40597
5 changed files with 333 additions and 15 deletions
|
|
@ -73,6 +73,19 @@ export const getTokenPurchasesResponse = z.object({
|
|||
purchases: z.array(tokenPurchase),
|
||||
});
|
||||
|
||||
// Response from /stripe/finalize-checkout. Either page or token fields
|
||||
// are populated depending on purchase_type.
|
||||
export const finalizeCheckoutResponse = z.object({
|
||||
purchase_type: z.enum(["page_packs", "premium_tokens"]),
|
||||
status: pagePurchaseStatusEnum,
|
||||
pages_limit: z.number().nullable().optional(),
|
||||
pages_used: z.number().nullable().optional(),
|
||||
pages_granted: z.number().nullable().optional(),
|
||||
premium_credit_micros_limit: z.number().nullable().optional(),
|
||||
premium_credit_micros_used: z.number().nullable().optional(),
|
||||
premium_credit_micros_granted: z.number().nullable().optional(),
|
||||
});
|
||||
|
||||
export type PagePurchaseStatus = z.infer<typeof pagePurchaseStatusEnum>;
|
||||
export type CreateCheckoutSessionRequest = z.infer<typeof createCheckoutSessionRequest>;
|
||||
export type CreateCheckoutSessionResponse = z.infer<typeof createCheckoutSessionResponse>;
|
||||
|
|
@ -85,3 +98,4 @@ export type TokenStripeStatusResponse = z.infer<typeof tokenStripeStatusResponse
|
|||
export type TokenPurchaseStatus = z.infer<typeof tokenPurchaseStatusEnum>;
|
||||
export type TokenPurchase = z.infer<typeof tokenPurchase>;
|
||||
export type GetTokenPurchasesResponse = z.infer<typeof getTokenPurchasesResponse>;
|
||||
export type FinalizeCheckoutResponse = z.infer<typeof finalizeCheckoutResponse>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue