-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtypes.ts
More file actions
79 lines (70 loc) · 2.06 KB
/
Copy pathtypes.ts
File metadata and controls
79 lines (70 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import type { PaymentProviderId } from "@/lib/payment/constants";
import type { MoneyMinor } from "@/lib/money";
export type CreateCheckoutParams = {
productId: string;
lemonSqueezyVariantId?: string | null;
buyerName: string;
buyerEmail: string;
amountMinor: MoneyMinor;
currency: string;
productName: string;
productDescription: string;
baseUrl: string;
ip: string;
userAgent?: string;
/** Stripe embedded checkout session vs redirect modal */
checkoutMode?: "embedded" | "redirect";
couponCode?: string;
};
export type CreateCheckoutResult =
| { mode: "embedded"; clientSecret: string }
| { mode: "overlay"; url: string }
| { mode: "redirect"; url: string };
export type FulfillmentEvent = {
provider: PaymentProviderId;
productId: string;
buyerName: string;
buyerEmail: string;
amountMinor?: MoneyMinor;
currency?: string;
buyerIp?: string;
userAgent?: string;
siteUrl?: string;
stripeSessionId?: string;
stripePaymentIntentId?: string;
stripeChargeId?: string;
lemonSqueezyOrderId?: string;
couponCode?: string;
};
export type RevocationEvent = {
provider: PaymentProviderId;
stripePaymentIntentId?: string;
stripeChargeId?: string;
stripeSessionId?: string;
lemonSqueezyOrderId?: string;
};
export type ParsedStripeWebhookEvent = {
provider: "stripe";
eventId: string;
eventType: string;
raw: unknown;
};
export type ParsedLemonSqueezyWebhookEvent = {
provider: "lemonsqueezy";
eventId: string;
eventName: string;
raw: unknown;
};
export type ParsedWebhookEvent =
| ParsedStripeWebhookEvent
| ParsedLemonSqueezyWebhookEvent;
export interface PaymentProvider {
readonly id: PaymentProviderId;
createCheckout(params: CreateCheckoutParams): Promise<CreateCheckoutResult>;
parseWebhook(request: Request): Promise<ParsedWebhookEvent>;
toFulfillmentEvent(event: ParsedWebhookEvent): FulfillmentEvent | null;
toRevocationEvent(event: ParsedWebhookEvent): RevocationEvent | null;
}
export type ProviderCheckoutState =
| { ok: true; result: CreateCheckoutResult }
| { ok: false; error: string };