@billfn/provider-dodo 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +453 -0
- package/dist/index.js.map +1 -0
- package/package.json +38 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BillFnProviderAdapter } from '@billfn/core';
|
|
2
|
+
export interface DodoProviderConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
baseUrl?: string;
|
|
5
|
+
fetch?: typeof fetch;
|
|
6
|
+
webhookSecret?: string;
|
|
7
|
+
webhookSignatureHeader?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createDodoProvider(config: DodoProviderConfig): BillFnProviderAdapter;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,qBAAqB,EAQtB,MAAM,cAAc,CAAC;AAItB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAmUpF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
import { createBillFnError } from '@billfn/core';
|
|
2
|
+
import { verifyStandardWebhookSignature } from '@superfunctions/webhooks';
|
|
3
|
+
const DODO_CHECKOUT_SESSION_METADATA_KEY = 'billfn_checkout_session_id';
|
|
4
|
+
const DODO_BILLING_ACCOUNT_METADATA_KEY = 'billfn_billing_account_id';
|
|
5
|
+
const DODO_PRODUCT_METADATA_KEY = 'billfn_product_id';
|
|
6
|
+
export function createDodoProvider(config) {
|
|
7
|
+
const fetchImpl = config.fetch ?? fetch;
|
|
8
|
+
const baseUrl = (config.baseUrl ?? 'https://live.dodopayments.com').replace(/\/$/, '');
|
|
9
|
+
const webhookSignatureHeader = (config.webhookSignatureHeader ?? 'webhook-signature').toLowerCase();
|
|
10
|
+
return {
|
|
11
|
+
provider: 'dodo',
|
|
12
|
+
capabilities: {
|
|
13
|
+
createCheckout: true,
|
|
14
|
+
verifyCheckout: true,
|
|
15
|
+
cancelSubscription: true,
|
|
16
|
+
syncSubscription: true,
|
|
17
|
+
restorePurchases: true,
|
|
18
|
+
webhookIngestion: true,
|
|
19
|
+
changeSubscription: true,
|
|
20
|
+
resumeSubscription: true,
|
|
21
|
+
refundCharge: true
|
|
22
|
+
},
|
|
23
|
+
async createCheckout(input) {
|
|
24
|
+
const isSubscription = input.price.kind === 'subscription';
|
|
25
|
+
const metadata = createDodoMetadata(input);
|
|
26
|
+
const response = await requestJson(fetchImpl, `${baseUrl}/${isSubscription ? 'subscriptions' : 'payments'}`, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: createHeaders(config.apiKey),
|
|
29
|
+
body: JSON.stringify(isSubscription
|
|
30
|
+
? {
|
|
31
|
+
customer: input.customer,
|
|
32
|
+
billing: input.customer?.billing,
|
|
33
|
+
payment_link: true,
|
|
34
|
+
return_url: input.returnUrl ?? input.successUrl ?? '',
|
|
35
|
+
product_id: input.price.providerProductId,
|
|
36
|
+
quantity: 1,
|
|
37
|
+
metadata
|
|
38
|
+
}
|
|
39
|
+
: {
|
|
40
|
+
customer: input.customer,
|
|
41
|
+
billing: input.customer?.billing,
|
|
42
|
+
payment_link: true,
|
|
43
|
+
return_url: input.returnUrl ?? input.successUrl ?? '',
|
|
44
|
+
product_cart: [{ product_id: input.price.providerProductId, quantity: 1 }],
|
|
45
|
+
metadata
|
|
46
|
+
})
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
status: 'requires_action',
|
|
50
|
+
providerCheckoutId: readString(response, ['payment_id', 'id']),
|
|
51
|
+
providerSubscriptionId: readString(response, ['subscription_id']),
|
|
52
|
+
providerChargeId: readString(response, ['payment_id']),
|
|
53
|
+
checkoutUrl: readString(response, ['payment_link']),
|
|
54
|
+
raw: response
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
async verifyCheckout(input) {
|
|
58
|
+
const subscriptionId = input.checkoutSession.providerSubscriptionId ??
|
|
59
|
+
readString(input.payload ?? {}, ['subscriptionId', 'subscription_id']);
|
|
60
|
+
const chargeId = input.checkoutSession.providerChargeId ??
|
|
61
|
+
input.checkoutSession.providerCheckoutId ??
|
|
62
|
+
readString(input.payload ?? {}, ['paymentId', 'payment_id']);
|
|
63
|
+
const isSubscription = input.price.kind === 'subscription';
|
|
64
|
+
const resourceId = isSubscription ? subscriptionId : chargeId;
|
|
65
|
+
if (!resourceId) {
|
|
66
|
+
throw createBillFnError({
|
|
67
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
68
|
+
message: 'Dodo verification requires a subscription or payment identifier'
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const response = await requestJson(fetchImpl, `${baseUrl}/${isSubscription ? 'subscriptions' : 'payments'}/${resourceId}`, {
|
|
72
|
+
method: 'GET',
|
|
73
|
+
headers: createHeaders(config.apiKey)
|
|
74
|
+
});
|
|
75
|
+
assertDodoVerificationOwnership(input, isSubscription, resourceId, response);
|
|
76
|
+
return mapDodoState(isSubscription, response);
|
|
77
|
+
},
|
|
78
|
+
async fetchSubscription(input) {
|
|
79
|
+
const providerSubscriptionId = input.subscription.providerSubscriptionId;
|
|
80
|
+
if (!providerSubscriptionId) {
|
|
81
|
+
throw createBillFnError({
|
|
82
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
83
|
+
message: 'Dodo subscription sync requires providerSubscriptionId'
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const response = await requestJson(fetchImpl, `${baseUrl}/subscriptions/${providerSubscriptionId}`, {
|
|
87
|
+
method: 'GET',
|
|
88
|
+
headers: createHeaders(config.apiKey)
|
|
89
|
+
});
|
|
90
|
+
return mapDodoState(true, response);
|
|
91
|
+
},
|
|
92
|
+
async cancelSubscription(input) {
|
|
93
|
+
const providerSubscriptionId = input.subscription.providerSubscriptionId;
|
|
94
|
+
if (!providerSubscriptionId) {
|
|
95
|
+
throw createBillFnError({
|
|
96
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
97
|
+
message: 'Dodo cancellation requires providerSubscriptionId'
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const response = await requestJson(fetchImpl, `${baseUrl}/subscriptions/${providerSubscriptionId}`, {
|
|
101
|
+
method: 'PATCH',
|
|
102
|
+
headers: createHeaders(config.apiKey),
|
|
103
|
+
body: JSON.stringify({
|
|
104
|
+
cancel_at_next_billing_date: true
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
return {
|
|
108
|
+
operationStatus: 'applied',
|
|
109
|
+
billingState: mapDodoState(true, response),
|
|
110
|
+
raw: response
|
|
111
|
+
};
|
|
112
|
+
},
|
|
113
|
+
async changeSubscription(input) {
|
|
114
|
+
const providerSubscriptionId = input.subscription.providerSubscriptionId;
|
|
115
|
+
if (!providerSubscriptionId) {
|
|
116
|
+
throw createBillFnError({
|
|
117
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
118
|
+
message: 'Dodo change subscription requires providerSubscriptionId'
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
const attempted = await tryRequestJson(fetchImpl, `${baseUrl}/subscriptions/${providerSubscriptionId}/change-plan`, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: createHeaders(config.apiKey),
|
|
124
|
+
body: JSON.stringify({
|
|
125
|
+
product_id: input.targetPrice.providerProductId,
|
|
126
|
+
proration_billing_mode: normalizeDodoProration(input.prorationBehavior),
|
|
127
|
+
quantity: 1,
|
|
128
|
+
effective_at: normalizeDodoEffectiveAt(input.effectiveAt)
|
|
129
|
+
})
|
|
130
|
+
});
|
|
131
|
+
if (attempted.ok) {
|
|
132
|
+
return {
|
|
133
|
+
operationStatus: 'applied',
|
|
134
|
+
billingState: mapDodoState(true, attempted.data),
|
|
135
|
+
raw: attempted.data
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (!shouldFallbackToReplacementCheckout(attempted.error.status)) {
|
|
139
|
+
throw createBillFnError({
|
|
140
|
+
code: 'BILLFN_PROVIDER_ERROR',
|
|
141
|
+
message: `Dodo change subscription failed with status ${attempted.error.status}`,
|
|
142
|
+
details: attempted.error
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const cancellation = await requestJson(fetchImpl, `${baseUrl}/subscriptions/${providerSubscriptionId}`, {
|
|
146
|
+
method: 'PATCH',
|
|
147
|
+
headers: createHeaders(config.apiKey),
|
|
148
|
+
body: JSON.stringify({
|
|
149
|
+
cancel_at_next_billing_date: true
|
|
150
|
+
})
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
operationStatus: 'requires_action',
|
|
154
|
+
billingState: input.effectiveAt === 'immediate' ? mapDodoState(true, cancellation) : undefined,
|
|
155
|
+
clientAction: {
|
|
156
|
+
type: 'redirect',
|
|
157
|
+
metadata: {
|
|
158
|
+
action: 'replacement-checkout',
|
|
159
|
+
targetProductId: input.targetPrice.providerProductId,
|
|
160
|
+
effectiveAt: input.effectiveAt
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
raw: {
|
|
164
|
+
fallback: 'replacement-checkout',
|
|
165
|
+
updateError: attempted.error,
|
|
166
|
+
cancellation
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
async resumeSubscription(input) {
|
|
171
|
+
const providerSubscriptionId = input.subscription.providerSubscriptionId;
|
|
172
|
+
if (!providerSubscriptionId) {
|
|
173
|
+
throw createBillFnError({
|
|
174
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
175
|
+
message: 'Dodo resume subscription requires providerSubscriptionId'
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const attempted = await tryRequestJson(fetchImpl, `${baseUrl}/subscriptions/${providerSubscriptionId}`, {
|
|
179
|
+
method: 'PATCH',
|
|
180
|
+
headers: createHeaders(config.apiKey),
|
|
181
|
+
body: JSON.stringify({
|
|
182
|
+
cancel_at_next_billing_date: false
|
|
183
|
+
})
|
|
184
|
+
});
|
|
185
|
+
if (!attempted.ok) {
|
|
186
|
+
return {
|
|
187
|
+
operationStatus: 'requires_action',
|
|
188
|
+
clientAction: {
|
|
189
|
+
type: 'redirect',
|
|
190
|
+
metadata: {
|
|
191
|
+
action: 'contact-support'
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
raw: {
|
|
195
|
+
resumeError: attempted.error
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
operationStatus: 'applied',
|
|
201
|
+
billingState: mapDodoState(true, attempted.data),
|
|
202
|
+
raw: attempted.data
|
|
203
|
+
};
|
|
204
|
+
},
|
|
205
|
+
async refundCharge(input) {
|
|
206
|
+
const paymentId = input.providerChargeId ?? input.subscription?.providerChargeId;
|
|
207
|
+
if (!paymentId) {
|
|
208
|
+
throw createBillFnError({
|
|
209
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
210
|
+
message: 'Dodo refund requires providerChargeId'
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
const refundBody = {
|
|
214
|
+
payment_id: paymentId,
|
|
215
|
+
reason: input.reason
|
|
216
|
+
};
|
|
217
|
+
if (input.mode === 'custom' || input.mode === 'prorated_remaining_period') {
|
|
218
|
+
if (typeof input.amount === 'number') {
|
|
219
|
+
refundBody.amount = input.amount;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const response = await requestJson(fetchImpl, `${baseUrl}/refunds`, {
|
|
223
|
+
method: 'POST',
|
|
224
|
+
headers: createHeaders(config.apiKey),
|
|
225
|
+
body: JSON.stringify(refundBody)
|
|
226
|
+
});
|
|
227
|
+
return {
|
|
228
|
+
operationStatus: 'applied',
|
|
229
|
+
providerRefundId: readString(response, ['refund_id', 'id']),
|
|
230
|
+
raw: response
|
|
231
|
+
};
|
|
232
|
+
},
|
|
233
|
+
async restorePurchases(input) {
|
|
234
|
+
const isSubscription = input.price.kind === 'subscription';
|
|
235
|
+
const response = await requestJson(fetchImpl, `${baseUrl}/${isSubscription ? 'subscriptions' : 'payments'}/${input.purchaseReference}`, {
|
|
236
|
+
method: 'GET',
|
|
237
|
+
headers: createHeaders(config.apiKey)
|
|
238
|
+
});
|
|
239
|
+
assertDodoRestoreOwnership(input, isSubscription, response);
|
|
240
|
+
return [mapDodoState(isSubscription, response)];
|
|
241
|
+
},
|
|
242
|
+
async parseWebhook(input) {
|
|
243
|
+
if (!config.webhookSecret) {
|
|
244
|
+
throw createBillFnError({
|
|
245
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
246
|
+
message: 'Dodo webhook parsing requires webhookSecret to be configured'
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
const webhookId = input.headers.get('webhook-id');
|
|
250
|
+
const webhookTimestamp = input.headers.get('webhook-timestamp');
|
|
251
|
+
const signature = input.headers.get(webhookSignatureHeader);
|
|
252
|
+
if (!webhookId ||
|
|
253
|
+
!webhookTimestamp ||
|
|
254
|
+
!signature ||
|
|
255
|
+
!verifyStandardWebhookSignature(input.rawBody, {
|
|
256
|
+
id: webhookId,
|
|
257
|
+
timestamp: webhookTimestamp,
|
|
258
|
+
signature
|
|
259
|
+
}, config.webhookSecret)) {
|
|
260
|
+
throw createBillFnError({
|
|
261
|
+
code: 'BILLFN_WEBHOOK_SIGNATURE_INVALID',
|
|
262
|
+
message: 'Dodo webhook signature verification failed'
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
let payload;
|
|
266
|
+
try {
|
|
267
|
+
payload = JSON.parse(input.rawBody);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
throw createBillFnError({
|
|
271
|
+
code: 'BILLFN_VALIDATION_ERROR',
|
|
272
|
+
message: 'Dodo webhook payload must be valid JSON'
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
const type = readString(payload, ['type', 'event']) ?? 'unknown';
|
|
276
|
+
const eventId = webhookId;
|
|
277
|
+
const data = asRecord(payload.data) ?? payload;
|
|
278
|
+
const isSubscription = Boolean(readString(data, ['subscription_id'])) || type.includes('subscription');
|
|
279
|
+
return [
|
|
280
|
+
{
|
|
281
|
+
providerEventId: eventId,
|
|
282
|
+
type,
|
|
283
|
+
signatureVerified: true,
|
|
284
|
+
occurredAt: readString(payload, ['created_at', 'timestamp']) ?? undefined,
|
|
285
|
+
priceId: readString(data, ['product_id']) ?? undefined,
|
|
286
|
+
providerSubscriptionId: readString(data, ['subscription_id']) ?? undefined,
|
|
287
|
+
providerChargeId: readString(data, ['payment_id']) ?? undefined,
|
|
288
|
+
checkoutReferenceId: readString(data, ['checkout_session_id']) ?? undefined,
|
|
289
|
+
billingState: mapDodoState(isSubscription, data),
|
|
290
|
+
raw: payload
|
|
291
|
+
}
|
|
292
|
+
];
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
function createHeaders(apiKey) {
|
|
297
|
+
return {
|
|
298
|
+
authorization: `Bearer ${apiKey}`,
|
|
299
|
+
'content-type': 'application/json'
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
function createDodoMetadata(input) {
|
|
303
|
+
const metadata = {};
|
|
304
|
+
for (const [key, value] of Object.entries(input.metadata ?? {})) {
|
|
305
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
306
|
+
metadata[key] = String(value);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
metadata[DODO_CHECKOUT_SESSION_METADATA_KEY] = input.checkoutSessionId;
|
|
310
|
+
metadata[DODO_BILLING_ACCOUNT_METADATA_KEY] = input.billingAccount.id;
|
|
311
|
+
metadata[DODO_PRODUCT_METADATA_KEY] = input.price.providerProductId;
|
|
312
|
+
return metadata;
|
|
313
|
+
}
|
|
314
|
+
function assertDodoVerificationOwnership(input, isSubscription, resourceId, response) {
|
|
315
|
+
const responseId = isSubscription
|
|
316
|
+
? readString(response, ['subscription_id', 'id'])
|
|
317
|
+
: readString(response, ['payment_id', 'id']);
|
|
318
|
+
const metadata = asRecord(response.metadata);
|
|
319
|
+
const productMatches = dodoProductMatches(response, isSubscription, input.price.providerProductId);
|
|
320
|
+
const metadataMatches = metadata?.[DODO_CHECKOUT_SESSION_METADATA_KEY] === input.checkoutSession.checkoutSessionId &&
|
|
321
|
+
metadata[DODO_BILLING_ACCOUNT_METADATA_KEY] === input.billingAccount.id &&
|
|
322
|
+
metadata[DODO_PRODUCT_METADATA_KEY] === input.price.providerProductId;
|
|
323
|
+
if (responseId !== resourceId || !productMatches || !metadataMatches) {
|
|
324
|
+
throw createBillFnError({
|
|
325
|
+
code: 'BILLFN_CONFLICT',
|
|
326
|
+
message: 'Dodo resource does not match the checkout session, billing account, and product'
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function assertDodoRestoreOwnership(input, isSubscription, response) {
|
|
331
|
+
const responseId = isSubscription
|
|
332
|
+
? readString(response, ['subscription_id', 'id'])
|
|
333
|
+
: readString(response, ['payment_id', 'id']);
|
|
334
|
+
const metadata = asRecord(response.metadata);
|
|
335
|
+
const productMatches = dodoProductMatches(response, isSubscription, input.price.providerProductId);
|
|
336
|
+
const metadataMatches = metadata?.[DODO_BILLING_ACCOUNT_METADATA_KEY] === input.billingAccount.id &&
|
|
337
|
+
metadata[DODO_PRODUCT_METADATA_KEY] === input.price.providerProductId;
|
|
338
|
+
if (responseId !== input.purchaseReference || !productMatches || !metadataMatches) {
|
|
339
|
+
throw createBillFnError({
|
|
340
|
+
code: 'BILLFN_CONFLICT',
|
|
341
|
+
message: 'Dodo resource does not match the purchase reference, billing account, and product'
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
function dodoProductMatches(response, isSubscription, providerProductId) {
|
|
346
|
+
return isSubscription
|
|
347
|
+
? readString(response, ['product_id']) === providerProductId
|
|
348
|
+
: asArrayOfRecords(response.product_cart).some((item) => readString(item, ['product_id']) === providerProductId);
|
|
349
|
+
}
|
|
350
|
+
async function requestJson(fetchImpl, url, init) {
|
|
351
|
+
const response = await fetchImpl(url, init);
|
|
352
|
+
const raw = await response.text();
|
|
353
|
+
if (!response.ok) {
|
|
354
|
+
throw createBillFnError({
|
|
355
|
+
code: 'BILLFN_PROVIDER_ERROR',
|
|
356
|
+
message: `Dodo request failed with status ${response.status}`,
|
|
357
|
+
details: {
|
|
358
|
+
status: response.status,
|
|
359
|
+
body: raw
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
return raw ? JSON.parse(raw) : {};
|
|
364
|
+
}
|
|
365
|
+
async function tryRequestJson(fetchImpl, url, init) {
|
|
366
|
+
const response = await fetchImpl(url, init);
|
|
367
|
+
const raw = await response.text();
|
|
368
|
+
if (!response.ok) {
|
|
369
|
+
return {
|
|
370
|
+
ok: false,
|
|
371
|
+
error: {
|
|
372
|
+
status: response.status,
|
|
373
|
+
body: raw
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
return {
|
|
378
|
+
ok: true,
|
|
379
|
+
data: raw ? JSON.parse(raw) : {}
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
function mapDodoState(isSubscription, payload) {
|
|
383
|
+
const rawStatus = readString(payload, ['status']) ?? 'pending';
|
|
384
|
+
const normalized = normalizeDodoStatus(rawStatus);
|
|
385
|
+
return {
|
|
386
|
+
subscriptionStatus: normalized,
|
|
387
|
+
checkoutStatus: normalized === 'failed' ? 'failed' : normalized === 'pending' ? 'pending' : 'succeeded',
|
|
388
|
+
providerSubscriptionId: readString(payload, ['subscription_id']) ?? undefined,
|
|
389
|
+
providerChargeId: readString(payload, ['payment_id']) ?? undefined,
|
|
390
|
+
currentPeriodStart: readString(payload, ['current_period_start', 'started_at']) ?? undefined,
|
|
391
|
+
currentPeriodEnd: isSubscription ? readString(payload, ['next_billing_date', 'current_period_end']) ?? undefined : undefined,
|
|
392
|
+
autoRenew: isSubscription ? normalized === 'active' || normalized === 'trialing' || normalized === 'grace' : false,
|
|
393
|
+
raw: payload
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
function normalizeDodoStatus(status) {
|
|
397
|
+
switch (status) {
|
|
398
|
+
case 'active':
|
|
399
|
+
return 'active';
|
|
400
|
+
case 'trialing':
|
|
401
|
+
return 'trialing';
|
|
402
|
+
case 'on_hold':
|
|
403
|
+
case 'paused':
|
|
404
|
+
return 'paused';
|
|
405
|
+
case 'cancelled':
|
|
406
|
+
return 'canceled';
|
|
407
|
+
case 'expired':
|
|
408
|
+
return 'expired';
|
|
409
|
+
case 'failed':
|
|
410
|
+
return 'failed';
|
|
411
|
+
case 'grace_period':
|
|
412
|
+
case 'billing_retry':
|
|
413
|
+
return 'grace';
|
|
414
|
+
case 'succeeded':
|
|
415
|
+
return 'active';
|
|
416
|
+
default:
|
|
417
|
+
return 'pending';
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
function normalizeDodoProration(value) {
|
|
421
|
+
switch (value) {
|
|
422
|
+
case 'prorate':
|
|
423
|
+
return 'prorated_immediately';
|
|
424
|
+
case 'none':
|
|
425
|
+
return 'do_not_bill';
|
|
426
|
+
default:
|
|
427
|
+
return 'prorated_immediately';
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
function normalizeDodoEffectiveAt(value) {
|
|
431
|
+
return value === 'next_renewal' ? 'next_billing_date' : 'immediately';
|
|
432
|
+
}
|
|
433
|
+
function shouldFallbackToReplacementCheckout(status) {
|
|
434
|
+
return status === 405;
|
|
435
|
+
}
|
|
436
|
+
function readString(record, keys) {
|
|
437
|
+
for (const key of keys) {
|
|
438
|
+
const value = record[key];
|
|
439
|
+
if (typeof value === 'string' && value.length > 0) {
|
|
440
|
+
return value;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return undefined;
|
|
444
|
+
}
|
|
445
|
+
function asRecord(value) {
|
|
446
|
+
return typeof value === 'object' && value !== null ? value : null;
|
|
447
|
+
}
|
|
448
|
+
function asArrayOfRecords(value) {
|
|
449
|
+
return Array.isArray(value)
|
|
450
|
+
? value.filter((entry) => typeof entry === 'object' && entry !== null)
|
|
451
|
+
: [];
|
|
452
|
+
}
|
|
453
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@billfn/provider-dodo",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Dodo provider adapter for billfn",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"clean": "rm -rf dist"
|
|
22
|
+
},
|
|
23
|
+
"author": "21n",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@billfn/core": "^0.0.1",
|
|
30
|
+
"@superfunctions/webhooks": "^0.1.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^22.0.0",
|
|
34
|
+
"typescript": "^5.6.0",
|
|
35
|
+
"vitest": "^3.2.4"
|
|
36
|
+
},
|
|
37
|
+
"gitHead": "f8eb29238bac5f1c40843c938335901ff6cf2a73"
|
|
38
|
+
}
|