@happyvertical/accounting 0.89.11 → 0.90.0
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/README.md +47 -0
- package/dist/chunks/{stripe-BhTiF2Xx.js → stripe-e3yn8cEJ.js} +112 -26
- package/dist/chunks/stripe-e3yn8cEJ.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/providers/stripe/index.d.ts +3 -1
- package/dist/providers/stripe/index.d.ts.map +1 -1
- package/dist/types.d.ts +25 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/chunks/stripe-BhTiF2Xx.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# @happyvertical/accounting
|
|
2
|
+
|
|
3
|
+
Provider-neutral accounting synchronization with Stripe billing support.
|
|
4
|
+
|
|
5
|
+
## Stripe invoices
|
|
6
|
+
|
|
7
|
+
Accounting amounts use currency major units: `12.34` means USD 12.34 and
|
|
8
|
+
`1200` means JPY 1200. The Stripe adapter converts them to Stripe's smallest
|
|
9
|
+
currency unit at the provider boundary.
|
|
10
|
+
|
|
11
|
+
For a retryable period close, provide one stable `idempotencyKey` for the
|
|
12
|
+
logical invoice. The adapter derives stable Stripe keys for every invoice item
|
|
13
|
+
and the invoice. It tags resources with the local invoice and line identifiers,
|
|
14
|
+
then reconciles them on a later replay, including after Stripe's idempotency
|
|
15
|
+
retention window. Reuse the key only for the same invoice contents.
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
await stripe.invoices.push({
|
|
19
|
+
id: 'tenant-42:2026-09',
|
|
20
|
+
invoiceNumber: 'INV-2026-09-42',
|
|
21
|
+
customerId: 'tenant-42',
|
|
22
|
+
customerExternalId: 'cus_123',
|
|
23
|
+
issueDate: new Date('2026-09-01'),
|
|
24
|
+
dueDate: new Date('2026-09-30'),
|
|
25
|
+
lineItems: [{ description: 'Usage', quantity: 1, unitPrice: 12.34 }],
|
|
26
|
+
subtotal: 12.34,
|
|
27
|
+
taxAmount: 0,
|
|
28
|
+
totalAmount: 12.34,
|
|
29
|
+
currency: 'USD',
|
|
30
|
+
idempotencyKey: 'period-close:tenant-42:2026-09',
|
|
31
|
+
automaticTax: true,
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`automaticTax: true` enables Stripe Tax on the invoice. Sync the customer's
|
|
36
|
+
complete billing address before creating the invoice so Stripe can calculate
|
|
37
|
+
tax from that customer tax location. Read the invoice back to persist Stripe's
|
|
38
|
+
calculated `taxAmount`; callers do not supply local tax tables or rates.
|
|
39
|
+
|
|
40
|
+
## Stripe Checkout and webhooks
|
|
41
|
+
|
|
42
|
+
`billing.createCheckoutSession` accepts `idempotencyKey`; reuse it when
|
|
43
|
+
retrying the same Checkout Session creation. After `webhooks.verify` succeeds,
|
|
44
|
+
the parsed Stripe webhook exposes its provider event as `WebhookEvent.id`.
|
|
45
|
+
Persist that identifier in a durable inbox before applying side effects; the
|
|
46
|
+
in-process parser alone cannot deduplicate deliveries across restarts or
|
|
47
|
+
replicas.
|
|
@@ -40,10 +40,10 @@ var StripeProvider = class {
|
|
|
40
40
|
this.webhooks = new StripeWebhookOperations(this.options);
|
|
41
41
|
this.billing = new StripeBillingOperationsImpl(this);
|
|
42
42
|
}
|
|
43
|
-
async request(method, endpoint, params) {
|
|
43
|
+
async request(method, endpoint, params, options = {}) {
|
|
44
44
|
const timeout = this.options.timeout || 3e4;
|
|
45
45
|
const maxRetries = this.options.maxRetries || 3;
|
|
46
|
-
const idempotencyKey = method === "POST" ? `sdk-${randomUUID()}` : null;
|
|
46
|
+
const idempotencyKey = method === "POST" ? options.idempotencyKey ?? `sdk-${randomUUID()}` : null;
|
|
47
47
|
let lastError = null;
|
|
48
48
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
49
49
|
const controller = new AbortController();
|
|
@@ -131,21 +131,34 @@ var StripeInvoiceOperations = class {
|
|
|
131
131
|
}
|
|
132
132
|
async push(invoice) {
|
|
133
133
|
if (!invoice.customerExternalId) throw new Error("Stripe invoices require customerExternalId");
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
134
|
+
const existingInvoice = invoice.idempotencyKey ? await this.findInvoiceByLocalId(invoice.customerExternalId, invoice.id) : void 0;
|
|
135
|
+
if (existingInvoice) return {
|
|
136
|
+
action: "created",
|
|
137
|
+
externalId: existingInvoice.id,
|
|
138
|
+
syncedAt: /* @__PURE__ */ new Date()
|
|
139
|
+
};
|
|
140
|
+
const existingLineItemIndexes = invoice.idempotencyKey ? await this.findPendingLineItemIndexes(invoice.customerExternalId, invoice.id) : /* @__PURE__ */ new Set();
|
|
141
|
+
for (const [index, lineItem] of invoice.lineItems.entries()) {
|
|
142
|
+
if (existingLineItemIndexes.has(index)) continue;
|
|
143
|
+
await this.provider.request("POST", "/v1/invoiceitems", {
|
|
144
|
+
customer: invoice.customerExternalId,
|
|
145
|
+
currency: invoice.currency || "usd",
|
|
146
|
+
description: lineItem.description,
|
|
147
|
+
quantity: lineItem.quantity,
|
|
148
|
+
unit_amount_decimal: String(moneyToStripeMinorUnits(lineItem.unitPrice, invoice.currency || "usd")),
|
|
149
|
+
tax_behavior: invoice.automaticTax ? "exclusive" : void 0,
|
|
150
|
+
metadata: normalizeMetadata({
|
|
151
|
+
local_invoice_id: invoice.id,
|
|
152
|
+
local_line_index: index,
|
|
153
|
+
local_sku: lineItem.sku,
|
|
154
|
+
local_discount: lineItem.discount,
|
|
155
|
+
local_tax_rate: lineItem.taxRate
|
|
156
|
+
})
|
|
157
|
+
}, { idempotencyKey: invoice.idempotencyKey ? `${invoice.idempotencyKey}:item:${index}` : void 0 });
|
|
158
|
+
}
|
|
146
159
|
return {
|
|
147
160
|
action: "created",
|
|
148
|
-
externalId: (await this.provider.request("POST", "/v1/invoices", mapInvoiceToStripe(invoice))).id,
|
|
161
|
+
externalId: (await this.provider.request("POST", "/v1/invoices", mapInvoiceToStripe(invoice), { idempotencyKey: invoice.idempotencyKey ? `${invoice.idempotencyKey}:invoice` : void 0 })).id,
|
|
149
162
|
syncedAt: /* @__PURE__ */ new Date()
|
|
150
163
|
};
|
|
151
164
|
}
|
|
@@ -170,6 +183,38 @@ var StripeInvoiceOperations = class {
|
|
|
170
183
|
async void(externalId) {
|
|
171
184
|
await this.provider.request("POST", `/v1/invoices/${encodeURIComponent(externalId)}/void`);
|
|
172
185
|
}
|
|
186
|
+
async findInvoiceByLocalId(customerExternalId, localInvoiceId) {
|
|
187
|
+
let startingAfter;
|
|
188
|
+
do {
|
|
189
|
+
const response = await this.provider.request("GET", "/v1/invoices", {
|
|
190
|
+
customer: customerExternalId,
|
|
191
|
+
limit: 100,
|
|
192
|
+
starting_after: startingAfter
|
|
193
|
+
});
|
|
194
|
+
const existing = response.data.find((invoice) => invoice.metadata?.local_id === localInvoiceId);
|
|
195
|
+
if (existing) return existing;
|
|
196
|
+
startingAfter = response.has_more ? response.data.at(-1)?.id : void 0;
|
|
197
|
+
} while (startingAfter);
|
|
198
|
+
}
|
|
199
|
+
async findPendingLineItemIndexes(customerExternalId, localInvoiceId) {
|
|
200
|
+
const indexes = /* @__PURE__ */ new Set();
|
|
201
|
+
let startingAfter;
|
|
202
|
+
do {
|
|
203
|
+
const response = await this.provider.request("GET", "/v1/invoiceitems", {
|
|
204
|
+
customer: customerExternalId,
|
|
205
|
+
pending: true,
|
|
206
|
+
limit: 100,
|
|
207
|
+
starting_after: startingAfter
|
|
208
|
+
});
|
|
209
|
+
for (const item of response.data) {
|
|
210
|
+
if (item.metadata?.local_invoice_id !== localInvoiceId) continue;
|
|
211
|
+
const index = Number(item.metadata.local_line_index);
|
|
212
|
+
if (Number.isSafeInteger(index) && index >= 0) indexes.add(index);
|
|
213
|
+
}
|
|
214
|
+
startingAfter = response.has_more ? response.data.at(-1)?.id : void 0;
|
|
215
|
+
} while (startingAfter);
|
|
216
|
+
return indexes;
|
|
217
|
+
}
|
|
173
218
|
};
|
|
174
219
|
var StripePaymentOperations = class {
|
|
175
220
|
provider;
|
|
@@ -189,7 +234,7 @@ var StripeBillingOperationsImpl = class {
|
|
|
189
234
|
this.provider = provider;
|
|
190
235
|
}
|
|
191
236
|
async createCheckoutSession(input) {
|
|
192
|
-
const response = await this.provider.request("POST", "/v1/checkout/sessions", mapCheckoutSessionToStripe(input));
|
|
237
|
+
const response = await this.provider.request("POST", "/v1/checkout/sessions", mapCheckoutSessionToStripe(input), { idempotencyKey: input.idempotencyKey });
|
|
193
238
|
return {
|
|
194
239
|
externalId: response.id,
|
|
195
240
|
url: response.url || null,
|
|
@@ -307,6 +352,7 @@ var StripeWebhookOperations = class {
|
|
|
307
352
|
const resource = event?.data?.object;
|
|
308
353
|
return {
|
|
309
354
|
type: event?.type || "unknown",
|
|
355
|
+
id: typeof event?.id === "string" ? event.id : void 0,
|
|
310
356
|
provider: "stripe",
|
|
311
357
|
timestamp: unixToDate(event?.created) || /* @__PURE__ */ new Date(),
|
|
312
358
|
payload: event,
|
|
@@ -367,6 +413,7 @@ function mapInvoiceToStripe(invoice) {
|
|
|
367
413
|
due_date: invoice.dueDate,
|
|
368
414
|
auto_advance: false,
|
|
369
415
|
pending_invoice_items_behavior: "include",
|
|
416
|
+
automatic_tax: invoice.automaticTax ? { enabled: true } : void 0,
|
|
370
417
|
metadata: normalizeMetadata({
|
|
371
418
|
local_id: invoice.id,
|
|
372
419
|
invoice_number: invoice.invoiceNumber,
|
|
@@ -452,7 +499,7 @@ function mapStripeCustomer(customer) {
|
|
|
452
499
|
postalCode: customer.address.postal_code || void 0,
|
|
453
500
|
country: customer.address.country || void 0
|
|
454
501
|
} : void 0,
|
|
455
|
-
balance: customer.balance === null || customer.balance === void 0 ? void 0 :
|
|
502
|
+
balance: customer.balance === null || customer.balance === void 0 ? void 0 : stripeMinorUnitsToMoney(customer.balance, customer.currency),
|
|
456
503
|
currency: customer.currency || void 0,
|
|
457
504
|
raw: customer
|
|
458
505
|
};
|
|
@@ -466,11 +513,11 @@ function mapStripeInvoice(invoice) {
|
|
|
466
513
|
customerExternalId: typeof invoice.customer === "string" ? invoice.customer : invoice.customer?.id || "",
|
|
467
514
|
issueDate: unixToDate(invoice.created) || /* @__PURE__ */ new Date(),
|
|
468
515
|
dueDate: unixToDate(invoice.due_date) || unixToDate(invoice.created) || /* @__PURE__ */ new Date(),
|
|
469
|
-
subtotal:
|
|
470
|
-
taxAmount:
|
|
471
|
-
totalAmount:
|
|
472
|
-
amountPaid:
|
|
473
|
-
balance:
|
|
516
|
+
subtotal: stripeMinorUnitsToMoney(invoice.subtotal || 0, invoice.currency),
|
|
517
|
+
taxAmount: stripeMinorUnitsToMoney(stripeInvoiceTaxAmount(invoice), invoice.currency),
|
|
518
|
+
totalAmount: stripeMinorUnitsToMoney(invoice.total || 0, invoice.currency),
|
|
519
|
+
amountPaid: stripeMinorUnitsToMoney(invoice.amount_paid || 0, invoice.currency),
|
|
520
|
+
balance: stripeMinorUnitsToMoney(invoice.amount_remaining || 0, invoice.currency),
|
|
474
521
|
status: mapStripeInvoiceStatus(invoice.status, invoice.due_date),
|
|
475
522
|
currency: invoice.currency || "usd",
|
|
476
523
|
raw: invoice
|
|
@@ -481,7 +528,7 @@ function mapStripePaymentIntent(paymentIntent) {
|
|
|
481
528
|
externalId: paymentIntent.id,
|
|
482
529
|
provider: "stripe",
|
|
483
530
|
syncedAt: /* @__PURE__ */ new Date(),
|
|
484
|
-
amount:
|
|
531
|
+
amount: stripeMinorUnitsToMoney(paymentIntent.amount || 0, paymentIntent.currency),
|
|
485
532
|
currency: paymentIntent.currency || "usd",
|
|
486
533
|
paidAt: unixToDate(paymentIntent.created) || /* @__PURE__ */ new Date(),
|
|
487
534
|
method: paymentIntent.payment_method_types?.[0],
|
|
@@ -626,8 +673,47 @@ function valuesEqual(left, right) {
|
|
|
626
673
|
if (typeof left === "number" && typeof right === "number") return Math.abs(left - right) < .01;
|
|
627
674
|
return false;
|
|
628
675
|
}
|
|
629
|
-
function
|
|
630
|
-
|
|
676
|
+
function stripeInvoiceTaxAmount(invoice) {
|
|
677
|
+
if (typeof invoice.tax === "number") return invoice.tax;
|
|
678
|
+
return (invoice.total_taxes || []).reduce((total, tax) => total + (tax.amount || 0), 0);
|
|
679
|
+
}
|
|
680
|
+
var STRIPE_ZERO_DECIMAL_CURRENCIES = /* @__PURE__ */ new Set([
|
|
681
|
+
"BIF",
|
|
682
|
+
"CLP",
|
|
683
|
+
"DJF",
|
|
684
|
+
"GNF",
|
|
685
|
+
"JPY",
|
|
686
|
+
"KMF",
|
|
687
|
+
"KRW",
|
|
688
|
+
"MGA",
|
|
689
|
+
"PYG",
|
|
690
|
+
"RWF",
|
|
691
|
+
"VND",
|
|
692
|
+
"VUV",
|
|
693
|
+
"XAF",
|
|
694
|
+
"XOF",
|
|
695
|
+
"XPF"
|
|
696
|
+
]);
|
|
697
|
+
var STRIPE_THREE_DECIMAL_CURRENCIES = /* @__PURE__ */ new Set([
|
|
698
|
+
"BHD",
|
|
699
|
+
"IQD",
|
|
700
|
+
"JOD",
|
|
701
|
+
"KWD",
|
|
702
|
+
"LYD",
|
|
703
|
+
"OMR",
|
|
704
|
+
"TND"
|
|
705
|
+
]);
|
|
706
|
+
function stripeCurrencyMinorUnitFactor(currency) {
|
|
707
|
+
const normalized = (currency || "usd").toUpperCase();
|
|
708
|
+
if (STRIPE_ZERO_DECIMAL_CURRENCIES.has(normalized)) return 1;
|
|
709
|
+
if (STRIPE_THREE_DECIMAL_CURRENCIES.has(normalized)) return 1e3;
|
|
710
|
+
return 100;
|
|
711
|
+
}
|
|
712
|
+
function moneyToStripeMinorUnits(amount, currency) {
|
|
713
|
+
return Math.round(amount * stripeCurrencyMinorUnitFactor(currency));
|
|
714
|
+
}
|
|
715
|
+
function stripeMinorUnitsToMoney(amount, currency) {
|
|
716
|
+
return amount / stripeCurrencyMinorUnitFactor(currency);
|
|
631
717
|
}
|
|
632
718
|
function toUnixSeconds(date) {
|
|
633
719
|
return Math.floor(date.getTime() / 1e3);
|
|
@@ -641,4 +727,4 @@ function sleep(ms) {
|
|
|
641
727
|
//#endregion
|
|
642
728
|
export { StripeProvider };
|
|
643
729
|
|
|
644
|
-
//# sourceMappingURL=stripe-
|
|
730
|
+
//# sourceMappingURL=stripe-e3yn8cEJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-e3yn8cEJ.js","names":[],"sources":["../../src/providers/stripe/index.ts"],"sourcesContent":["/**\n * Stripe Provider\n *\n * Implements Stripe AR, payment, webhook, and billing operations using the\n * Stripe HTTP API directly. The SDK keeps Stripe as an optional runtime\n * dependency by relying on the platform fetch implementation.\n */\n\nimport { createHmac, randomUUID, timingSafeEqual } from 'node:crypto';\nimport type {\n AccountingProviderType,\n AuditMatch,\n AuditOperations,\n AuditReport,\n BillInput,\n BillOperations,\n CustomerInput,\n CustomerOperations,\n DateRange,\n ExternalBill,\n ExternalCustomer,\n ExternalInvoice,\n ExternalPayment,\n ExternalRecord,\n ExternalVendor,\n FieldDiff,\n InvoiceInput,\n InvoiceOperations,\n ListOptions,\n PaymentInput,\n PaymentOperations,\n StripeAccountingProvider,\n StripeBillingOperations,\n StripeCheckoutLineItem,\n StripeCheckoutSession,\n StripeCheckoutSessionInput,\n StripeCustomerPortalSession,\n StripeCustomerPortalSessionInput,\n StripeOptions,\n StripeSubscriptionStatus,\n StripeSubscriptionStatusResult,\n SyncResult,\n VendorInput,\n VendorOperations,\n WebhookEvent,\n WebhookOperations,\n} from '../../types.js';\n\ntype StripePrimitive = string | number | boolean | Date | null | undefined;\ntype StripeFormValue =\n | StripePrimitive\n | StripeFormValue[]\n | { [key: string]: StripeFormValue };\n\ninterface StripeListResponse<T> {\n object: 'list';\n data: T[];\n has_more?: boolean;\n}\n\ninterface StripeCustomer {\n id: string;\n name?: string | null;\n email?: string | null;\n phone?: string | null;\n address?: StripeAddress | null;\n balance?: number | null;\n currency?: string | null;\n}\n\ninterface StripeAddress {\n line1?: string | null;\n line2?: string | null;\n city?: string | null;\n state?: string | null;\n postal_code?: string | null;\n country?: string | null;\n}\n\ninterface StripeInvoice {\n id: string;\n number?: string | null;\n customer?: string | StripeCustomer | null;\n created?: number | null;\n due_date?: number | null;\n subtotal?: number | null;\n tax?: number | null;\n total_taxes?: Array<{ amount?: number | null }> | null;\n total?: number | null;\n amount_paid?: number | null;\n amount_remaining?: number | null;\n status?: string | null;\n currency?: string | null;\n metadata?: Record<string, string> | null;\n}\n\ninterface StripeInvoiceItem {\n id: string;\n metadata?: Record<string, string> | null;\n}\n\ninterface StripePaymentIntent {\n id: string;\n amount?: number | null;\n currency?: string | null;\n created?: number | null;\n status?: string | null;\n invoice?: string | null;\n payment_method_types?: string[] | null;\n latest_charge?: string | null;\n}\n\ninterface StripeCheckoutSessionResponse {\n id: string;\n url?: string | null;\n customer?: string | null;\n subscription?: string | null;\n payment_intent?: string | null;\n}\n\ninterface StripePortalSessionResponse {\n id: string;\n url: string;\n}\n\ninterface StripeSubscription {\n id: string;\n status: StripeSubscriptionStatus;\n customer: string | StripeCustomer;\n current_period_start?: number | null;\n current_period_end?: number | null;\n cancel_at_period_end?: boolean | null;\n canceled_at?: number | null;\n trial_end?: number | null;\n}\n\ninterface StripeWebhookPayload {\n id?: string | null;\n type?: string | null;\n created?: number | null;\n data?: {\n object?: {\n id?: string | null;\n object?: string | null;\n } | null;\n } | null;\n}\n\n/**\n * Stripe accounting provider.\n */\nexport class StripeProvider implements StripeAccountingProvider {\n readonly type = 'stripe' as const;\n\n private readonly options: StripeOptions;\n private readonly fetchImpl: typeof fetch;\n\n readonly customers: CustomerOperations;\n readonly invoices: InvoiceOperations;\n readonly vendors: VendorOperations;\n readonly bills: BillOperations;\n readonly payments: PaymentOperations;\n readonly audit: AuditOperations;\n readonly webhooks: WebhookOperations;\n readonly billing: StripeBillingOperations;\n\n constructor(options: StripeOptions) {\n this.options = {\n timeout: 30000,\n maxRetries: 3,\n apiBaseUrl: 'https://api.stripe.com',\n webhookTolerance: 300,\n ...options,\n };\n this.fetchImpl = options.fetch || fetch;\n\n this.customers = new StripeCustomerOperations(this);\n this.invoices = new StripeInvoiceOperations(this);\n this.vendors = new UnsupportedVendorOperations();\n this.bills = new UnsupportedBillOperations();\n this.payments = new StripePaymentOperations(this);\n this.audit = new StripeAuditOperations(this);\n this.webhooks = new StripeWebhookOperations(this.options);\n this.billing = new StripeBillingOperationsImpl(this);\n }\n\n async request<T>(\n method: 'GET' | 'POST' | 'DELETE',\n endpoint: string,\n params?: Record<string, StripeFormValue>,\n options: { idempotencyKey?: string } = {},\n ): Promise<T> {\n const timeout = this.options.timeout || 30000;\n const maxRetries = this.options.maxRetries || 3;\n const idempotencyKey =\n method === 'POST'\n ? (options.idempotencyKey ?? `sdk-${randomUUID()}`)\n : null;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const url = this.buildUrl(endpoint, method === 'GET' ? params : {});\n const body =\n method === 'POST' && params\n ? encodeStripeForm(params).toString()\n : undefined;\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.options.secretKey}`,\n Accept: 'application/json',\n };\n if (method === 'POST') {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n if (idempotencyKey) {\n headers['Idempotency-Key'] = idempotencyKey;\n }\n }\n if (this.options.apiVersion) {\n headers['Stripe-Version'] = this.options.apiVersion;\n }\n\n const response = await this.fetchImpl(url, {\n method,\n headers,\n body,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n const error = new Error(\n `Stripe API error (${response.status}): ${errorText}`,\n );\n\n if (response.status < 500 && response.status !== 429) {\n throw error;\n }\n\n lastError = error;\n } else {\n const text = await response.text();\n return (text ? JSON.parse(text) : {}) as T;\n }\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n const statusMatch = lastError.message.match(\n /Stripe API error \\((\\d+)\\)/,\n );\n if (statusMatch) {\n const status = Number.parseInt(statusMatch[1], 10);\n if (status >= 400 && status < 500 && status !== 429) {\n throw lastError;\n }\n }\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (attempt < maxRetries) {\n await sleep(2 ** attempt * 500);\n }\n }\n\n throw lastError || new Error('Stripe request failed after retries');\n }\n\n private buildUrl(\n endpoint: string,\n params?: Record<string, StripeFormValue>,\n ): string {\n const baseUrl = this.options.apiBaseUrl || 'https://api.stripe.com';\n const url = new URL(endpoint, baseUrl);\n\n if (params && Object.keys(params).length > 0) {\n for (const [key, value] of encodeStripeForm(params).entries()) {\n url.searchParams.append(key, value);\n }\n }\n\n return url.toString();\n }\n}\n\nclass StripeCustomerOperations implements CustomerOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async push(customer: CustomerInput): Promise<SyncResult> {\n const response = await this.provider.request<StripeCustomer>(\n 'POST',\n '/v1/customers',\n mapCustomerToStripe(customer),\n );\n\n return {\n action: 'created',\n externalId: response.id,\n syncedAt: new Date(),\n };\n }\n\n async pull(externalId: string): Promise<ExternalCustomer> {\n const customer = await this.provider.request<StripeCustomer>(\n 'GET',\n `/v1/customers/${encodeURIComponent(externalId)}`,\n );\n return mapStripeCustomer(customer);\n }\n\n async list(options: ListOptions = {}): Promise<ExternalCustomer[]> {\n const response = await this.provider.request<\n StripeListResponse<StripeCustomer>\n >('GET', '/v1/customers', mapListOptions(options));\n return response.data.map(mapStripeCustomer);\n }\n\n async sync(customer: CustomerInput): Promise<SyncResult> {\n if (!customer.externalId) {\n return this.push(customer);\n }\n\n await this.provider.request<StripeCustomer>(\n 'POST',\n `/v1/customers/${encodeURIComponent(customer.externalId)}`,\n mapCustomerToStripe(customer),\n );\n\n return {\n action: 'updated',\n externalId: customer.externalId,\n syncedAt: new Date(),\n };\n }\n}\n\nclass StripeInvoiceOperations implements InvoiceOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async push(invoice: InvoiceInput): Promise<SyncResult> {\n if (!invoice.customerExternalId) {\n throw new Error('Stripe invoices require customerExternalId');\n }\n\n const existingInvoice = invoice.idempotencyKey\n ? await this.findInvoiceByLocalId(invoice.customerExternalId, invoice.id)\n : undefined;\n if (existingInvoice) {\n return {\n action: 'created',\n externalId: existingInvoice.id,\n syncedAt: new Date(),\n };\n }\n\n const existingLineItemIndexes = invoice.idempotencyKey\n ? await this.findPendingLineItemIndexes(\n invoice.customerExternalId,\n invoice.id,\n )\n : new Set<number>();\n\n for (const [index, lineItem] of invoice.lineItems.entries()) {\n if (existingLineItemIndexes.has(index)) {\n continue;\n }\n await this.provider.request(\n 'POST',\n '/v1/invoiceitems',\n {\n customer: invoice.customerExternalId,\n currency: invoice.currency || 'usd',\n description: lineItem.description,\n quantity: lineItem.quantity,\n unit_amount_decimal: String(\n moneyToStripeMinorUnits(\n lineItem.unitPrice,\n invoice.currency || 'usd',\n ),\n ),\n tax_behavior: invoice.automaticTax ? 'exclusive' : undefined,\n metadata: normalizeMetadata({\n local_invoice_id: invoice.id,\n local_line_index: index,\n local_sku: lineItem.sku,\n local_discount: lineItem.discount,\n local_tax_rate: lineItem.taxRate,\n }),\n },\n {\n idempotencyKey: invoice.idempotencyKey\n ? `${invoice.idempotencyKey}:item:${index}`\n : undefined,\n },\n );\n }\n\n const response = await this.provider.request<StripeInvoice>(\n 'POST',\n '/v1/invoices',\n mapInvoiceToStripe(invoice),\n {\n idempotencyKey: invoice.idempotencyKey\n ? `${invoice.idempotencyKey}:invoice`\n : undefined,\n },\n );\n\n return {\n action: 'created',\n externalId: response.id,\n syncedAt: new Date(),\n };\n }\n\n async pull(externalId: string): Promise<ExternalInvoice> {\n const invoice = await this.provider.request<StripeInvoice>(\n 'GET',\n `/v1/invoices/${encodeURIComponent(externalId)}`,\n );\n return mapStripeInvoice(invoice);\n }\n\n async list(options: ListOptions = {}): Promise<ExternalInvoice[]> {\n const response = await this.provider.request<\n StripeListResponse<StripeInvoice>\n >('GET', '/v1/invoices', mapListOptions(options));\n return response.data.map(mapStripeInvoice);\n }\n\n async sync(invoice: InvoiceInput): Promise<SyncResult> {\n if (!invoice.externalId) {\n return this.push(invoice);\n }\n\n await this.provider.request<StripeInvoice>(\n 'POST',\n `/v1/invoices/${encodeURIComponent(invoice.externalId)}`,\n mapInvoiceUpdateToStripe(invoice),\n );\n\n return {\n action: 'updated',\n externalId: invoice.externalId,\n syncedAt: new Date(),\n };\n }\n\n async send(externalId: string): Promise<void> {\n await this.provider.request(\n 'POST',\n `/v1/invoices/${encodeURIComponent(externalId)}/send`,\n );\n }\n\n async void(externalId: string): Promise<void> {\n await this.provider.request(\n 'POST',\n `/v1/invoices/${encodeURIComponent(externalId)}/void`,\n );\n }\n\n private async findInvoiceByLocalId(\n customerExternalId: string,\n localInvoiceId: string,\n ): Promise<StripeInvoice | undefined> {\n let startingAfter: string | undefined;\n do {\n const response = await this.provider.request<\n StripeListResponse<StripeInvoice>\n >('GET', '/v1/invoices', {\n customer: customerExternalId,\n limit: 100,\n starting_after: startingAfter,\n });\n const existing = response.data.find(\n (invoice) => invoice.metadata?.local_id === localInvoiceId,\n );\n if (existing) {\n return existing;\n }\n startingAfter = response.has_more ? response.data.at(-1)?.id : undefined;\n } while (startingAfter);\n\n return undefined;\n }\n\n private async findPendingLineItemIndexes(\n customerExternalId: string,\n localInvoiceId: string,\n ): Promise<Set<number>> {\n const indexes = new Set<number>();\n let startingAfter: string | undefined;\n do {\n const response = await this.provider.request<\n StripeListResponse<StripeInvoiceItem>\n >('GET', '/v1/invoiceitems', {\n customer: customerExternalId,\n pending: true,\n limit: 100,\n starting_after: startingAfter,\n });\n for (const item of response.data) {\n if (item.metadata?.local_invoice_id !== localInvoiceId) {\n continue;\n }\n const index = Number(item.metadata.local_line_index);\n if (Number.isSafeInteger(index) && index >= 0) {\n indexes.add(index);\n }\n }\n startingAfter = response.has_more ? response.data.at(-1)?.id : undefined;\n } while (startingAfter);\n\n return indexes;\n }\n}\n\nclass StripePaymentOperations implements PaymentOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async pull(externalId: string): Promise<ExternalPayment> {\n const paymentIntent = await this.provider.request<StripePaymentIntent>(\n 'GET',\n `/v1/payment_intents/${encodeURIComponent(externalId)}`,\n );\n return mapStripePaymentIntent(paymentIntent);\n }\n\n async list(options: ListOptions = {}): Promise<ExternalPayment[]> {\n const response = await this.provider.request<\n StripeListResponse<StripePaymentIntent>\n >('GET', '/v1/payment_intents', mapListOptions(options));\n return response.data.map(mapStripePaymentIntent);\n }\n}\n\nclass StripeBillingOperationsImpl implements StripeBillingOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async createCheckoutSession(\n input: StripeCheckoutSessionInput,\n ): Promise<StripeCheckoutSession> {\n const response = await this.provider.request<StripeCheckoutSessionResponse>(\n 'POST',\n '/v1/checkout/sessions',\n mapCheckoutSessionToStripe(input),\n { idempotencyKey: input.idempotencyKey },\n );\n\n return {\n externalId: response.id,\n url: response.url || null,\n customerExternalId: response.customer || undefined,\n subscriptionExternalId: response.subscription || undefined,\n paymentIntentExternalId: response.payment_intent || undefined,\n raw: response,\n };\n }\n\n async createCustomerPortalSession(\n input: StripeCustomerPortalSessionInput,\n ): Promise<StripeCustomerPortalSession> {\n const response = await this.provider.request<StripePortalSessionResponse>(\n 'POST',\n '/v1/billing_portal/sessions',\n {\n customer: input.customerExternalId,\n return_url: input.returnUrl,\n configuration: input.configurationExternalId,\n },\n );\n\n return {\n externalId: response.id,\n url: response.url,\n raw: response,\n };\n }\n\n async retrieveSubscriptionStatus(\n subscriptionExternalId: string,\n ): Promise<StripeSubscriptionStatusResult> {\n const subscription = await this.provider.request<StripeSubscription>(\n 'GET',\n `/v1/subscriptions/${encodeURIComponent(subscriptionExternalId)}`,\n );\n\n return mapStripeSubscription(subscription);\n }\n\n async listCustomerSubscriptions(\n customerExternalId: string,\n ): Promise<StripeSubscriptionStatusResult[]> {\n const response = await this.provider.request<\n StripeListResponse<StripeSubscription>\n >('GET', '/v1/subscriptions', {\n customer: customerExternalId,\n status: 'all',\n limit: 100,\n });\n\n return response.data.map(mapStripeSubscription);\n }\n}\n\nclass UnsupportedVendorOperations implements VendorOperations {\n async push(_vendor: VendorInput): Promise<SyncResult> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async pull(_externalId: string): Promise<ExternalVendor> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async list(_options?: ListOptions): Promise<ExternalVendor[]> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async sync(_vendor: VendorInput): Promise<SyncResult> {\n throw new Error('Stripe does not support vendor operations');\n }\n}\n\nclass UnsupportedBillOperations implements BillOperations {\n async push(_bill: BillInput): Promise<SyncResult> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async pull(_externalId: string): Promise<ExternalBill> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async list(_options?: ListOptions): Promise<ExternalBill[]> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async sync(_bill: BillInput): Promise<SyncResult> {\n throw new Error('Stripe does not support bill operations');\n }\n}\n\nclass StripeAuditOperations implements AuditOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async reconcileCustomers(\n locals: CustomerInput[],\n ): Promise<AuditReport<CustomerInput>> {\n const externals = await this.provider.customers.list({ limit: 100 });\n return reconcileRecords('stripe', locals, externals, compareCustomer);\n }\n\n async reconcileInvoices(\n locals: InvoiceInput[],\n dateRange?: DateRange,\n ): Promise<AuditReport<InvoiceInput>> {\n const externals = await this.provider.invoices.list({\n limit: 100,\n startDate: dateRange?.start,\n endDate: dateRange?.end,\n });\n return reconcileRecords('stripe', locals, externals, compareInvoice);\n }\n\n async reconcileVendors(\n _locals: VendorInput[],\n ): Promise<AuditReport<VendorInput>> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async reconcileBills(_locals: BillInput[]): Promise<AuditReport<BillInput>> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async reconcilePayments(\n locals: PaymentInput[],\n dateRange?: DateRange,\n ): Promise<AuditReport<PaymentInput>> {\n const externals = await this.provider.payments.list({\n limit: 100,\n startDate: dateRange?.start,\n endDate: dateRange?.end,\n });\n return reconcileRecords('stripe', locals, externals, comparePayment);\n }\n}\n\nclass StripeWebhookOperations implements WebhookOperations {\n constructor(private readonly options: StripeOptions) {}\n\n verify(payload: string, signature: string, secret: string): boolean {\n const endpointSecret = secret || this.options.webhookSecret;\n if (!endpointSecret) {\n throw new Error(\n 'Stripe webhook secret not provided. Pass it as the secret parameter or configure webhookSecret in options.',\n );\n }\n\n const parsed = parseStripeSignatureHeader(signature);\n if (!parsed.timestamp || parsed.signatures.length === 0) {\n return false;\n }\n\n const tolerance = this.options.webhookTolerance ?? 300;\n const timestamp = Number.parseInt(parsed.timestamp, 10);\n if (\n !Number.isFinite(timestamp) ||\n Math.abs(Date.now() / 1000 - timestamp) > tolerance\n ) {\n return false;\n }\n\n const signedPayload = `${parsed.timestamp}.${payload}`;\n const expected = createHmac('sha256', endpointSecret)\n .update(signedPayload)\n .digest('hex');\n\n return parsed.signatures.some((value) =>\n constantTimeEqualHex(value, expected),\n );\n }\n\n parse(payload: string): WebhookEvent {\n let event: StripeWebhookPayload;\n try {\n event = JSON.parse(payload) as StripeWebhookPayload;\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown JSON parse error';\n throw new Error(`Invalid Stripe webhook payload: ${message}`);\n }\n\n const resource = event?.data?.object;\n return {\n type: event?.type || 'unknown',\n id: typeof event?.id === 'string' ? event.id : undefined,\n provider: 'stripe',\n timestamp: unixToDate(event?.created) || new Date(),\n payload: event,\n resourceType: mapStripeResourceType(\n resource?.object || undefined,\n event?.type || undefined,\n ),\n resourceId: typeof resource?.id === 'string' ? resource.id : undefined,\n };\n }\n}\n\nfunction encodeStripeForm(params: Record<string, StripeFormValue>) {\n const form = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n appendStripeFormValue(form, key, value);\n }\n\n return form;\n}\n\nfunction appendStripeFormValue(\n form: URLSearchParams,\n key: string,\n value: StripeFormValue,\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (value instanceof Date) {\n form.append(key, String(toUnixSeconds(value)));\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n appendStripeFormValue(form, `${key}[${index}]`, item);\n });\n return;\n }\n\n if (typeof value === 'object') {\n for (const [childKey, childValue] of Object.entries(value)) {\n appendStripeFormValue(form, `${key}[${childKey}]`, childValue);\n }\n return;\n }\n\n form.append(key, String(value));\n}\n\nfunction mapCustomerToStripe(\n customer: CustomerInput,\n): Record<string, StripeFormValue> {\n const stripeCustomer: Record<string, StripeFormValue> = {\n name: customer.name,\n email: customer.email,\n phone: customer.phone,\n address: customer.billingAddress\n ? {\n line1: customer.billingAddress.street1,\n line2: customer.billingAddress.street2,\n city: customer.billingAddress.city,\n state: customer.billingAddress.state,\n postal_code: customer.billingAddress.postalCode,\n country: customer.billingAddress.country,\n }\n : undefined,\n metadata: normalizeMetadata({\n local_id: customer.id,\n payment_terms: customer.paymentTerms,\n ...customer.metadata,\n }),\n };\n\n if (customer.taxExempt !== undefined) {\n stripeCustomer.tax_exempt = customer.taxExempt ? 'exempt' : 'none';\n }\n\n return stripeCustomer;\n}\n\nfunction mapInvoiceToStripe(\n invoice: InvoiceInput,\n): Record<string, StripeFormValue> {\n return {\n customer: invoice.customerExternalId,\n collection_method: 'send_invoice',\n due_date: invoice.dueDate,\n auto_advance: false,\n pending_invoice_items_behavior: 'include',\n automatic_tax: invoice.automaticTax ? { enabled: true } : undefined,\n metadata: normalizeMetadata({\n local_id: invoice.id,\n invoice_number: invoice.invoiceNumber,\n reference: invoice.reference,\n memo: invoice.memo,\n tax_amount: invoice.taxAmount,\n subtotal: invoice.subtotal,\n total_amount: invoice.totalAmount,\n ...invoice.metadata,\n }),\n };\n}\n\nfunction mapInvoiceUpdateToStripe(\n invoice: InvoiceInput,\n): Record<string, StripeFormValue> {\n return {\n due_date: invoice.dueDate,\n metadata: normalizeMetadata({\n local_id: invoice.id,\n invoice_number: invoice.invoiceNumber,\n reference: invoice.reference,\n memo: invoice.memo,\n ...invoice.metadata,\n }),\n };\n}\n\nfunction mapCheckoutSessionToStripe(\n input: StripeCheckoutSessionInput,\n): Record<string, StripeFormValue> {\n return {\n mode: input.mode || 'subscription',\n success_url: input.successUrl,\n cancel_url: input.cancelUrl,\n customer: input.customerExternalId,\n customer_email: input.customerExternalId ? undefined : input.customerEmail,\n client_reference_id: input.clientReferenceId,\n allow_promotion_codes: input.allowPromotionCodes,\n line_items: input.lineItems.map(mapCheckoutLineItem),\n metadata: normalizeMetadata(input.metadata || {}),\n };\n}\n\nfunction mapCheckoutLineItem(\n lineItem: StripeCheckoutLineItem,\n): Record<string, StripeFormValue> {\n if (lineItem.price) {\n return {\n price: lineItem.price,\n quantity: lineItem.quantity || 1,\n };\n }\n\n if (!lineItem.priceData) {\n throw new Error('Stripe checkout line item requires price or priceData');\n }\n\n const productData = lineItem.priceData.product\n ? undefined\n : { name: lineItem.priceData.productName || 'Subscription' };\n\n return {\n quantity: lineItem.quantity || 1,\n price_data: {\n currency: lineItem.priceData.currency,\n unit_amount: lineItem.priceData.unitAmount,\n product: lineItem.priceData.product,\n product_data: productData,\n recurring: lineItem.priceData.recurring\n ? {\n interval: lineItem.priceData.recurring.interval,\n interval_count: lineItem.priceData.recurring.intervalCount,\n }\n : undefined,\n },\n };\n}\n\nfunction mapListOptions(options: ListOptions): Record<string, StripeFormValue> {\n return {\n limit: options.limit,\n starting_after:\n typeof options.offset === 'string' ? options.offset : undefined,\n created: {\n gte: options.startDate,\n lte: options.endDate,\n },\n status: options.status,\n };\n}\n\nfunction mapStripeCustomer(customer: StripeCustomer): ExternalCustomer {\n return {\n externalId: customer.id,\n provider: 'stripe',\n syncedAt: new Date(),\n name: customer.name || '',\n email: customer.email || undefined,\n phone: customer.phone || undefined,\n billingAddress: customer.address\n ? {\n street1: customer.address.line1 || undefined,\n street2: customer.address.line2 || undefined,\n city: customer.address.city || undefined,\n state: customer.address.state || undefined,\n postalCode: customer.address.postal_code || undefined,\n country: customer.address.country || undefined,\n }\n : undefined,\n balance:\n customer.balance === null || customer.balance === undefined\n ? undefined\n : stripeMinorUnitsToMoney(customer.balance, customer.currency),\n currency: customer.currency || undefined,\n raw: customer,\n };\n}\n\nfunction mapStripeInvoice(invoice: StripeInvoice): ExternalInvoice {\n return {\n externalId: invoice.id,\n provider: 'stripe',\n syncedAt: new Date(),\n invoiceNumber: invoice.number || invoice.id,\n customerExternalId:\n typeof invoice.customer === 'string'\n ? invoice.customer\n : invoice.customer?.id || '',\n issueDate: unixToDate(invoice.created) || new Date(),\n dueDate:\n unixToDate(invoice.due_date) || unixToDate(invoice.created) || new Date(),\n subtotal: stripeMinorUnitsToMoney(invoice.subtotal || 0, invoice.currency),\n taxAmount: stripeMinorUnitsToMoney(\n stripeInvoiceTaxAmount(invoice),\n invoice.currency,\n ),\n totalAmount: stripeMinorUnitsToMoney(invoice.total || 0, invoice.currency),\n amountPaid: stripeMinorUnitsToMoney(\n invoice.amount_paid || 0,\n invoice.currency,\n ),\n balance: stripeMinorUnitsToMoney(\n invoice.amount_remaining || 0,\n invoice.currency,\n ),\n status: mapStripeInvoiceStatus(invoice.status, invoice.due_date),\n currency: invoice.currency || 'usd',\n raw: invoice,\n };\n}\n\nfunction mapStripePaymentIntent(\n paymentIntent: StripePaymentIntent,\n): ExternalPayment {\n return {\n externalId: paymentIntent.id,\n provider: 'stripe',\n syncedAt: new Date(),\n amount: stripeMinorUnitsToMoney(\n paymentIntent.amount || 0,\n paymentIntent.currency,\n ),\n currency: paymentIntent.currency || 'usd',\n paidAt: unixToDate(paymentIntent.created) || new Date(),\n method: paymentIntent.payment_method_types?.[0],\n transactionId: paymentIntent.latest_charge || paymentIntent.id,\n invoiceExternalIds: paymentIntent.invoice\n ? [paymentIntent.invoice]\n : undefined,\n status: mapStripePaymentStatus(paymentIntent.status),\n raw: paymentIntent,\n };\n}\n\nfunction mapStripeSubscription(\n subscription: StripeSubscription,\n): StripeSubscriptionStatusResult {\n return {\n externalId: subscription.id,\n status: subscription.status,\n customerExternalId:\n typeof subscription.customer === 'string'\n ? subscription.customer\n : subscription.customer.id,\n currentPeriodStart: unixToDate(subscription.current_period_start),\n currentPeriodEnd: unixToDate(subscription.current_period_end),\n cancelAtPeriodEnd: Boolean(subscription.cancel_at_period_end),\n canceledAt: unixToDate(subscription.canceled_at),\n trialEnd: unixToDate(subscription.trial_end),\n raw: subscription,\n };\n}\n\nfunction mapStripeInvoiceStatus(\n status?: string | null,\n dueDate?: number | null,\n): ExternalInvoice['status'] {\n switch (status) {\n case 'draft':\n return 'draft';\n case 'paid':\n return 'paid';\n case 'void':\n return 'voided';\n case 'open':\n if (dueDate && dueDate * 1000 < Date.now()) {\n return 'overdue';\n }\n return 'sent';\n default:\n return 'sent';\n }\n}\n\nfunction mapStripePaymentStatus(\n status?: string | null,\n): ExternalPayment['status'] {\n switch (status) {\n case 'succeeded':\n return 'completed';\n case 'processing':\n case 'requires_action':\n case 'requires_capture':\n case 'requires_confirmation':\n return 'pending';\n case 'canceled':\n case 'requires_payment_method':\n return 'failed';\n default:\n return 'pending';\n }\n}\n\nfunction mapStripeResourceType(\n object?: string,\n eventType?: string,\n): WebhookEvent['resourceType'] | undefined {\n if (object === 'customer' || eventType?.startsWith('customer.')) {\n return 'customer';\n }\n if (object === 'invoice' || eventType?.startsWith('invoice.')) {\n return 'invoice';\n }\n if (\n object === 'payment_intent' ||\n object === 'charge' ||\n eventType?.startsWith('payment_intent.') ||\n eventType?.startsWith('charge.')\n ) {\n return 'payment';\n }\n return undefined;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown>,\n): Record<string, string> {\n const normalized: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (value !== undefined && value !== null) {\n normalized[key] = String(value);\n }\n }\n\n return normalized;\n}\n\nfunction parseStripeSignatureHeader(signature: string): {\n timestamp?: string;\n signatures: string[];\n} {\n const parts = signature.split(',').map((part) => part.trim());\n const parsed: { timestamp?: string; signatures: string[] } = {\n signatures: [],\n };\n\n for (const part of parts) {\n const separatorIndex = part.indexOf('=');\n if (separatorIndex === -1) {\n continue;\n }\n\n const key = part.slice(0, separatorIndex);\n const value = part.slice(separatorIndex + 1);\n if (key === 't') {\n parsed.timestamp = value;\n }\n if (key === 'v1' && value) {\n parsed.signatures.push(value);\n }\n }\n\n return parsed;\n}\n\nfunction constantTimeEqualHex(left: string, right: string): boolean {\n try {\n const leftBuffer = Buffer.from(left, 'hex');\n const rightBuffer = Buffer.from(right, 'hex');\n return (\n leftBuffer.length === rightBuffer.length &&\n timingSafeEqual(leftBuffer, rightBuffer)\n );\n } catch {\n return false;\n }\n}\n\nfunction reconcileRecords<TLocal extends { externalId?: string }>(\n provider: AccountingProviderType,\n locals: TLocal[],\n externals: ExternalRecord[],\n compare: (local: TLocal, external: ExternalRecord) => FieldDiff[],\n): AuditReport<TLocal> {\n const externalById = new Map(\n externals.map((external) => [external.externalId, external]),\n );\n const matched: AuditMatch<TLocal>[] = [];\n const discrepancies: AuditReport<TLocal>['discrepancies'] = [];\n const localOnly: TLocal[] = [];\n const seenExternalIds = new Set<string>();\n\n for (const local of locals) {\n const external = local.externalId\n ? externalById.get(local.externalId)\n : undefined;\n\n if (!external) {\n localOnly.push(local);\n continue;\n }\n\n seenExternalIds.add(external.externalId);\n const differences = compare(local, external);\n if (differences.length === 0) {\n matched.push({ local, external, status: 'identical' });\n } else {\n discrepancies.push({ local, external, differences });\n }\n }\n\n const externalOnly = externals.filter(\n (external) => !seenExternalIds.has(external.externalId),\n );\n\n return {\n provider,\n auditedAt: new Date(),\n matched,\n localOnly,\n externalOnly,\n discrepancies,\n summary: {\n total: locals.length + externalOnly.length,\n matched: matched.length,\n localOnly: localOnly.length,\n externalOnly: externalOnly.length,\n discrepancies: discrepancies.length,\n },\n };\n}\n\nfunction compareCustomer(\n local: CustomerInput,\n external: ExternalRecord,\n): FieldDiff[] {\n const customer = external as ExternalCustomer;\n return [\n compareField('name', local.name, customer.name),\n compareField('email', local.email, customer.email),\n ].filter((diff): diff is FieldDiff => Boolean(diff));\n}\n\nfunction compareInvoice(\n local: InvoiceInput,\n external: ExternalRecord,\n): FieldDiff[] {\n const invoice = external as ExternalInvoice;\n return [\n compareField('totalAmount', local.totalAmount, invoice.totalAmount),\n compareField('currency', local.currency || 'usd', invoice.currency),\n ].filter((diff): diff is FieldDiff => Boolean(diff));\n}\n\nfunction comparePayment(\n local: PaymentInput,\n external: ExternalRecord,\n): FieldDiff[] {\n const payment = external as ExternalPayment;\n return [\n compareField('amount', local.amount, payment.amount),\n compareField('currency', local.currency || 'usd', payment.currency),\n ].filter((diff): diff is FieldDiff => Boolean(diff));\n}\n\nfunction compareField(\n field: string,\n localValue: unknown,\n externalValue: unknown,\n): FieldDiff | null {\n if (valuesEqual(localValue, externalValue)) {\n return null;\n }\n return { field, localValue, externalValue };\n}\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n if (left === right) {\n return true;\n }\n if (typeof left === 'number' && typeof right === 'number') {\n return Math.abs(left - right) < 0.01;\n }\n return false;\n}\n\nfunction stripeInvoiceTaxAmount(invoice: StripeInvoice): number {\n if (typeof invoice.tax === 'number') {\n return invoice.tax;\n }\n return (invoice.total_taxes || []).reduce(\n (total, tax) => total + (tax.amount || 0),\n 0,\n );\n}\n\nconst STRIPE_ZERO_DECIMAL_CURRENCIES = new Set([\n 'BIF',\n 'CLP',\n 'DJF',\n 'GNF',\n 'JPY',\n 'KMF',\n 'KRW',\n 'MGA',\n 'PYG',\n 'RWF',\n 'VND',\n 'VUV',\n 'XAF',\n 'XOF',\n 'XPF',\n]);\nconst STRIPE_THREE_DECIMAL_CURRENCIES = new Set([\n 'BHD',\n 'IQD',\n 'JOD',\n 'KWD',\n 'LYD',\n 'OMR',\n 'TND',\n]);\n\nfunction stripeCurrencyMinorUnitFactor(currency?: string | null): number {\n const normalized = (currency || 'usd').toUpperCase();\n if (STRIPE_ZERO_DECIMAL_CURRENCIES.has(normalized)) {\n return 1;\n }\n if (STRIPE_THREE_DECIMAL_CURRENCIES.has(normalized)) {\n return 1_000;\n }\n return 100;\n}\n\nfunction moneyToStripeMinorUnits(amount: number, currency: string): number {\n return Math.round(amount * stripeCurrencyMinorUnitFactor(currency));\n}\n\nfunction stripeMinorUnitsToMoney(\n amount: number,\n currency?: string | null,\n): number {\n return amount / stripeCurrencyMinorUnitFactor(currency);\n}\n\nfunction centsToMoney(cents: number): number {\n return cents / 100;\n}\n\nfunction toUnixSeconds(date: Date): number {\n return Math.floor(date.getTime() / 1000);\n}\n\nfunction unixToDate(value?: number | null): Date | undefined {\n return value === null || value === undefined\n ? undefined\n : new Date(value * 1000);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -108,7 +108,7 @@ async function getAccountingProvider(userOptions) {
|
|
|
108
108
|
}
|
|
109
109
|
case "stripe": {
|
|
110
110
|
if (!isStripeOptions(options)) throw new Error("Invalid Stripe options");
|
|
111
|
-
const { StripeProvider } = await import("./chunks/stripe-
|
|
111
|
+
const { StripeProvider } = await import("./chunks/stripe-e3yn8cEJ.js");
|
|
112
112
|
return new StripeProvider(options);
|
|
113
113
|
}
|
|
114
114
|
case "paypal": throw new Error("PayPal provider not yet implemented");
|
|
@@ -19,7 +19,9 @@ export declare class StripeProvider implements StripeAccountingProvider {
|
|
|
19
19
|
readonly webhooks: WebhookOperations;
|
|
20
20
|
readonly billing: StripeBillingOperations;
|
|
21
21
|
constructor(options: StripeOptions);
|
|
22
|
-
request<T>(method: 'GET' | 'POST' | 'DELETE', endpoint: string, params?: Record<string, StripeFormValue
|
|
22
|
+
request<T>(method: 'GET' | 'POST' | 'DELETE', endpoint: string, params?: Record<string, StripeFormValue>, options?: {
|
|
23
|
+
idempotencyKey?: string;
|
|
24
|
+
}): Promise<T>;
|
|
23
25
|
private buildUrl;
|
|
24
26
|
}
|
|
25
27
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/stripe/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAGV,eAAe,EAGf,cAAc,EAEd,kBAAkB,EAUlB,iBAAiB,EAGjB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EAMvB,aAAa,EAKb,gBAAgB,EAEhB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAC3E,KAAK,eAAe,GAChB,eAAe,GACf,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/stripe/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAGV,eAAe,EAGf,cAAc,EAEd,kBAAkB,EAUlB,iBAAiB,EAGjB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EAMvB,aAAa,EAKb,gBAAgB,EAEhB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAC3E,KAAK,eAAe,GAChB,eAAe,GACf,eAAe,EAAE,GACjB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAA;CAAE,CAAC;AAgGvC;;GAEG;AACH,qBAAa,cAAe,YAAW,wBAAwB;IAC7D,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAElC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;gBAE9B,OAAO,EAAE,aAAa;IAoB5B,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,EACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACxC,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GACxC,OAAO,CAAC,CAAC,CAAC;IAgFb,OAAO,CAAC,QAAQ;CAejB"}
|
package/dist/types.d.ts
CHANGED
|
@@ -140,7 +140,11 @@ export interface InvoiceLineItemInput {
|
|
|
140
140
|
sku?: string;
|
|
141
141
|
/** Quantity */
|
|
142
142
|
quantity: number;
|
|
143
|
-
/**
|
|
143
|
+
/**
|
|
144
|
+
* Unit price in the currency's major unit (for example, `12.34` USD or
|
|
145
|
+
* `1200` JPY). The Stripe provider converts this value to Stripe's smallest
|
|
146
|
+
* currency unit.
|
|
147
|
+
*/
|
|
144
148
|
unitPrice: number;
|
|
145
149
|
/** Discount amount */
|
|
146
150
|
discount?: number;
|
|
@@ -173,11 +177,11 @@ export interface InvoiceInput {
|
|
|
173
177
|
dueDate: Date;
|
|
174
178
|
/** Line items */
|
|
175
179
|
lineItems: InvoiceLineItemInput[];
|
|
176
|
-
/** Subtotal before tax */
|
|
180
|
+
/** Subtotal before tax, in the currency's major unit. */
|
|
177
181
|
subtotal: number;
|
|
178
|
-
/** Tax amount */
|
|
182
|
+
/** Tax amount in the currency's major unit. Ignored by Stripe when automaticTax is enabled. */
|
|
179
183
|
taxAmount: number;
|
|
180
|
-
/** Total amount */
|
|
184
|
+
/** Total amount in the currency's major unit. */
|
|
181
185
|
totalAmount: number;
|
|
182
186
|
/** Currency code (ISO 4217) */
|
|
183
187
|
currency?: string;
|
|
@@ -187,6 +191,18 @@ export interface InvoiceInput {
|
|
|
187
191
|
memo?: string;
|
|
188
192
|
/** Additional metadata */
|
|
189
193
|
metadata?: Record<string, unknown>;
|
|
194
|
+
/**
|
|
195
|
+
* Stable caller-owned key for replaying the same provider invoice. Stripe
|
|
196
|
+
* invoice-item and invoice requests derive deterministic provider keys from
|
|
197
|
+
* it, and the adapter reconciles tagged provider resources after Stripe's
|
|
198
|
+
* idempotency retention window.
|
|
199
|
+
*/
|
|
200
|
+
idempotencyKey?: string;
|
|
201
|
+
/**
|
|
202
|
+
* Ask Stripe Tax to calculate tax from the synced customer's billing
|
|
203
|
+
* address. The provider-calculated amount is returned by invoice reads.
|
|
204
|
+
*/
|
|
205
|
+
automaticTax?: boolean;
|
|
190
206
|
}
|
|
191
207
|
/**
|
|
192
208
|
* Vendor input for sync operations (AP side)
|
|
@@ -318,6 +334,7 @@ export interface ExternalInvoice extends ExternalRecord {
|
|
|
318
334
|
customerExternalId: string;
|
|
319
335
|
issueDate: Date;
|
|
320
336
|
dueDate: Date;
|
|
337
|
+
/** Monetary values are in the currency's major unit. */
|
|
321
338
|
subtotal: number;
|
|
322
339
|
taxAmount: number;
|
|
323
340
|
totalAmount: number;
|
|
@@ -393,6 +410,8 @@ export interface StripeCheckoutSessionInput {
|
|
|
393
410
|
lineItems: StripeCheckoutLineItem[];
|
|
394
411
|
metadata?: Record<string, string | number | boolean | null | undefined>;
|
|
395
412
|
allowPromotionCodes?: boolean;
|
|
413
|
+
/** Stable caller-owned key reused when creating the same Checkout Session. */
|
|
414
|
+
idempotencyKey?: string;
|
|
396
415
|
}
|
|
397
416
|
export interface StripeCheckoutSession {
|
|
398
417
|
externalId: string;
|
|
@@ -520,6 +539,8 @@ export interface AuditReport<T> {
|
|
|
520
539
|
* Webhook event from provider
|
|
521
540
|
*/
|
|
522
541
|
export interface WebhookEvent {
|
|
542
|
+
/** Verified provider event identifier for durable inbox deduplication. */
|
|
543
|
+
id?: string;
|
|
523
544
|
/** Event type */
|
|
524
545
|
type: string;
|
|
525
546
|
/** Provider */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/accounting",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.90.0",
|
|
4
4
|
"description": "Multi-provider accounting integration for AR/AP sync and audit with QuickBooks, Stripe, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"intuit-oauth": "^4.2.3",
|
|
40
|
-
"@happyvertical/utils": "0.
|
|
40
|
+
"@happyvertical/utils": "0.90.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/node": "25.0.10",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-BhTiF2Xx.js","names":[],"sources":["../../src/providers/stripe/index.ts"],"sourcesContent":["/**\n * Stripe Provider\n *\n * Implements Stripe AR, payment, webhook, and billing operations using the\n * Stripe HTTP API directly. The SDK keeps Stripe as an optional runtime\n * dependency by relying on the platform fetch implementation.\n */\n\nimport { createHmac, randomUUID, timingSafeEqual } from 'node:crypto';\nimport type {\n AccountingProviderType,\n AuditMatch,\n AuditOperations,\n AuditReport,\n BillInput,\n BillOperations,\n CustomerInput,\n CustomerOperations,\n DateRange,\n ExternalBill,\n ExternalCustomer,\n ExternalInvoice,\n ExternalPayment,\n ExternalRecord,\n ExternalVendor,\n FieldDiff,\n InvoiceInput,\n InvoiceOperations,\n ListOptions,\n PaymentInput,\n PaymentOperations,\n StripeAccountingProvider,\n StripeBillingOperations,\n StripeCheckoutLineItem,\n StripeCheckoutSession,\n StripeCheckoutSessionInput,\n StripeCustomerPortalSession,\n StripeCustomerPortalSessionInput,\n StripeOptions,\n StripeSubscriptionStatus,\n StripeSubscriptionStatusResult,\n SyncResult,\n VendorInput,\n VendorOperations,\n WebhookEvent,\n WebhookOperations,\n} from '../../types.js';\n\ntype StripePrimitive = string | number | boolean | Date | null | undefined;\ntype StripeFormValue =\n | StripePrimitive\n | StripeFormValue[]\n | { [key: string]: StripeFormValue };\n\ninterface StripeListResponse<T> {\n object: 'list';\n data: T[];\n has_more?: boolean;\n}\n\ninterface StripeCustomer {\n id: string;\n name?: string | null;\n email?: string | null;\n phone?: string | null;\n address?: StripeAddress | null;\n balance?: number | null;\n currency?: string | null;\n}\n\ninterface StripeAddress {\n line1?: string | null;\n line2?: string | null;\n city?: string | null;\n state?: string | null;\n postal_code?: string | null;\n country?: string | null;\n}\n\ninterface StripeInvoice {\n id: string;\n number?: string | null;\n customer?: string | StripeCustomer | null;\n created?: number | null;\n due_date?: number | null;\n subtotal?: number | null;\n tax?: number | null;\n total?: number | null;\n amount_paid?: number | null;\n amount_remaining?: number | null;\n status?: string | null;\n currency?: string | null;\n}\n\ninterface StripePaymentIntent {\n id: string;\n amount?: number | null;\n currency?: string | null;\n created?: number | null;\n status?: string | null;\n invoice?: string | null;\n payment_method_types?: string[] | null;\n latest_charge?: string | null;\n}\n\ninterface StripeCheckoutSessionResponse {\n id: string;\n url?: string | null;\n customer?: string | null;\n subscription?: string | null;\n payment_intent?: string | null;\n}\n\ninterface StripePortalSessionResponse {\n id: string;\n url: string;\n}\n\ninterface StripeSubscription {\n id: string;\n status: StripeSubscriptionStatus;\n customer: string | StripeCustomer;\n current_period_start?: number | null;\n current_period_end?: number | null;\n cancel_at_period_end?: boolean | null;\n canceled_at?: number | null;\n trial_end?: number | null;\n}\n\ninterface StripeWebhookPayload {\n type?: string | null;\n created?: number | null;\n data?: {\n object?: {\n id?: string | null;\n object?: string | null;\n } | null;\n } | null;\n}\n\n/**\n * Stripe accounting provider.\n */\nexport class StripeProvider implements StripeAccountingProvider {\n readonly type = 'stripe' as const;\n\n private readonly options: StripeOptions;\n private readonly fetchImpl: typeof fetch;\n\n readonly customers: CustomerOperations;\n readonly invoices: InvoiceOperations;\n readonly vendors: VendorOperations;\n readonly bills: BillOperations;\n readonly payments: PaymentOperations;\n readonly audit: AuditOperations;\n readonly webhooks: WebhookOperations;\n readonly billing: StripeBillingOperations;\n\n constructor(options: StripeOptions) {\n this.options = {\n timeout: 30000,\n maxRetries: 3,\n apiBaseUrl: 'https://api.stripe.com',\n webhookTolerance: 300,\n ...options,\n };\n this.fetchImpl = options.fetch || fetch;\n\n this.customers = new StripeCustomerOperations(this);\n this.invoices = new StripeInvoiceOperations(this);\n this.vendors = new UnsupportedVendorOperations();\n this.bills = new UnsupportedBillOperations();\n this.payments = new StripePaymentOperations(this);\n this.audit = new StripeAuditOperations(this);\n this.webhooks = new StripeWebhookOperations(this.options);\n this.billing = new StripeBillingOperationsImpl(this);\n }\n\n async request<T>(\n method: 'GET' | 'POST' | 'DELETE',\n endpoint: string,\n params?: Record<string, StripeFormValue>,\n ): Promise<T> {\n const timeout = this.options.timeout || 30000;\n const maxRetries = this.options.maxRetries || 3;\n const idempotencyKey = method === 'POST' ? `sdk-${randomUUID()}` : null;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const url = this.buildUrl(endpoint, method === 'GET' ? params : {});\n const body =\n method === 'POST' && params\n ? encodeStripeForm(params).toString()\n : undefined;\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.options.secretKey}`,\n Accept: 'application/json',\n };\n if (method === 'POST') {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n if (idempotencyKey) {\n headers['Idempotency-Key'] = idempotencyKey;\n }\n }\n if (this.options.apiVersion) {\n headers['Stripe-Version'] = this.options.apiVersion;\n }\n\n const response = await this.fetchImpl(url, {\n method,\n headers,\n body,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n const error = new Error(\n `Stripe API error (${response.status}): ${errorText}`,\n );\n\n if (response.status < 500 && response.status !== 429) {\n throw error;\n }\n\n lastError = error;\n } else {\n const text = await response.text();\n return (text ? JSON.parse(text) : {}) as T;\n }\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n const statusMatch = lastError.message.match(\n /Stripe API error \\((\\d+)\\)/,\n );\n if (statusMatch) {\n const status = Number.parseInt(statusMatch[1], 10);\n if (status >= 400 && status < 500 && status !== 429) {\n throw lastError;\n }\n }\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (attempt < maxRetries) {\n await sleep(2 ** attempt * 500);\n }\n }\n\n throw lastError || new Error('Stripe request failed after retries');\n }\n\n private buildUrl(\n endpoint: string,\n params?: Record<string, StripeFormValue>,\n ): string {\n const baseUrl = this.options.apiBaseUrl || 'https://api.stripe.com';\n const url = new URL(endpoint, baseUrl);\n\n if (params && Object.keys(params).length > 0) {\n for (const [key, value] of encodeStripeForm(params).entries()) {\n url.searchParams.append(key, value);\n }\n }\n\n return url.toString();\n }\n}\n\nclass StripeCustomerOperations implements CustomerOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async push(customer: CustomerInput): Promise<SyncResult> {\n const response = await this.provider.request<StripeCustomer>(\n 'POST',\n '/v1/customers',\n mapCustomerToStripe(customer),\n );\n\n return {\n action: 'created',\n externalId: response.id,\n syncedAt: new Date(),\n };\n }\n\n async pull(externalId: string): Promise<ExternalCustomer> {\n const customer = await this.provider.request<StripeCustomer>(\n 'GET',\n `/v1/customers/${encodeURIComponent(externalId)}`,\n );\n return mapStripeCustomer(customer);\n }\n\n async list(options: ListOptions = {}): Promise<ExternalCustomer[]> {\n const response = await this.provider.request<\n StripeListResponse<StripeCustomer>\n >('GET', '/v1/customers', mapListOptions(options));\n return response.data.map(mapStripeCustomer);\n }\n\n async sync(customer: CustomerInput): Promise<SyncResult> {\n if (!customer.externalId) {\n return this.push(customer);\n }\n\n await this.provider.request<StripeCustomer>(\n 'POST',\n `/v1/customers/${encodeURIComponent(customer.externalId)}`,\n mapCustomerToStripe(customer),\n );\n\n return {\n action: 'updated',\n externalId: customer.externalId,\n syncedAt: new Date(),\n };\n }\n}\n\nclass StripeInvoiceOperations implements InvoiceOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async push(invoice: InvoiceInput): Promise<SyncResult> {\n if (!invoice.customerExternalId) {\n throw new Error('Stripe invoices require customerExternalId');\n }\n\n for (const lineItem of invoice.lineItems) {\n await this.provider.request('POST', '/v1/invoiceitems', {\n customer: invoice.customerExternalId,\n currency: invoice.currency || 'usd',\n description: lineItem.description,\n quantity: lineItem.quantity,\n unit_amount_decimal: String(Math.round(lineItem.unitPrice * 100)),\n metadata: normalizeMetadata({\n local_sku: lineItem.sku,\n local_discount: lineItem.discount,\n local_tax_rate: lineItem.taxRate,\n }),\n });\n }\n\n const response = await this.provider.request<StripeInvoice>(\n 'POST',\n '/v1/invoices',\n mapInvoiceToStripe(invoice),\n );\n\n return {\n action: 'created',\n externalId: response.id,\n syncedAt: new Date(),\n };\n }\n\n async pull(externalId: string): Promise<ExternalInvoice> {\n const invoice = await this.provider.request<StripeInvoice>(\n 'GET',\n `/v1/invoices/${encodeURIComponent(externalId)}`,\n );\n return mapStripeInvoice(invoice);\n }\n\n async list(options: ListOptions = {}): Promise<ExternalInvoice[]> {\n const response = await this.provider.request<\n StripeListResponse<StripeInvoice>\n >('GET', '/v1/invoices', mapListOptions(options));\n return response.data.map(mapStripeInvoice);\n }\n\n async sync(invoice: InvoiceInput): Promise<SyncResult> {\n if (!invoice.externalId) {\n return this.push(invoice);\n }\n\n await this.provider.request<StripeInvoice>(\n 'POST',\n `/v1/invoices/${encodeURIComponent(invoice.externalId)}`,\n mapInvoiceUpdateToStripe(invoice),\n );\n\n return {\n action: 'updated',\n externalId: invoice.externalId,\n syncedAt: new Date(),\n };\n }\n\n async send(externalId: string): Promise<void> {\n await this.provider.request(\n 'POST',\n `/v1/invoices/${encodeURIComponent(externalId)}/send`,\n );\n }\n\n async void(externalId: string): Promise<void> {\n await this.provider.request(\n 'POST',\n `/v1/invoices/${encodeURIComponent(externalId)}/void`,\n );\n }\n}\n\nclass StripePaymentOperations implements PaymentOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async pull(externalId: string): Promise<ExternalPayment> {\n const paymentIntent = await this.provider.request<StripePaymentIntent>(\n 'GET',\n `/v1/payment_intents/${encodeURIComponent(externalId)}`,\n );\n return mapStripePaymentIntent(paymentIntent);\n }\n\n async list(options: ListOptions = {}): Promise<ExternalPayment[]> {\n const response = await this.provider.request<\n StripeListResponse<StripePaymentIntent>\n >('GET', '/v1/payment_intents', mapListOptions(options));\n return response.data.map(mapStripePaymentIntent);\n }\n}\n\nclass StripeBillingOperationsImpl implements StripeBillingOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async createCheckoutSession(\n input: StripeCheckoutSessionInput,\n ): Promise<StripeCheckoutSession> {\n const response = await this.provider.request<StripeCheckoutSessionResponse>(\n 'POST',\n '/v1/checkout/sessions',\n mapCheckoutSessionToStripe(input),\n );\n\n return {\n externalId: response.id,\n url: response.url || null,\n customerExternalId: response.customer || undefined,\n subscriptionExternalId: response.subscription || undefined,\n paymentIntentExternalId: response.payment_intent || undefined,\n raw: response,\n };\n }\n\n async createCustomerPortalSession(\n input: StripeCustomerPortalSessionInput,\n ): Promise<StripeCustomerPortalSession> {\n const response = await this.provider.request<StripePortalSessionResponse>(\n 'POST',\n '/v1/billing_portal/sessions',\n {\n customer: input.customerExternalId,\n return_url: input.returnUrl,\n configuration: input.configurationExternalId,\n },\n );\n\n return {\n externalId: response.id,\n url: response.url,\n raw: response,\n };\n }\n\n async retrieveSubscriptionStatus(\n subscriptionExternalId: string,\n ): Promise<StripeSubscriptionStatusResult> {\n const subscription = await this.provider.request<StripeSubscription>(\n 'GET',\n `/v1/subscriptions/${encodeURIComponent(subscriptionExternalId)}`,\n );\n\n return mapStripeSubscription(subscription);\n }\n\n async listCustomerSubscriptions(\n customerExternalId: string,\n ): Promise<StripeSubscriptionStatusResult[]> {\n const response = await this.provider.request<\n StripeListResponse<StripeSubscription>\n >('GET', '/v1/subscriptions', {\n customer: customerExternalId,\n status: 'all',\n limit: 100,\n });\n\n return response.data.map(mapStripeSubscription);\n }\n}\n\nclass UnsupportedVendorOperations implements VendorOperations {\n async push(_vendor: VendorInput): Promise<SyncResult> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async pull(_externalId: string): Promise<ExternalVendor> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async list(_options?: ListOptions): Promise<ExternalVendor[]> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async sync(_vendor: VendorInput): Promise<SyncResult> {\n throw new Error('Stripe does not support vendor operations');\n }\n}\n\nclass UnsupportedBillOperations implements BillOperations {\n async push(_bill: BillInput): Promise<SyncResult> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async pull(_externalId: string): Promise<ExternalBill> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async list(_options?: ListOptions): Promise<ExternalBill[]> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async sync(_bill: BillInput): Promise<SyncResult> {\n throw new Error('Stripe does not support bill operations');\n }\n}\n\nclass StripeAuditOperations implements AuditOperations {\n constructor(private readonly provider: StripeProvider) {}\n\n async reconcileCustomers(\n locals: CustomerInput[],\n ): Promise<AuditReport<CustomerInput>> {\n const externals = await this.provider.customers.list({ limit: 100 });\n return reconcileRecords('stripe', locals, externals, compareCustomer);\n }\n\n async reconcileInvoices(\n locals: InvoiceInput[],\n dateRange?: DateRange,\n ): Promise<AuditReport<InvoiceInput>> {\n const externals = await this.provider.invoices.list({\n limit: 100,\n startDate: dateRange?.start,\n endDate: dateRange?.end,\n });\n return reconcileRecords('stripe', locals, externals, compareInvoice);\n }\n\n async reconcileVendors(\n _locals: VendorInput[],\n ): Promise<AuditReport<VendorInput>> {\n throw new Error('Stripe does not support vendor operations');\n }\n\n async reconcileBills(_locals: BillInput[]): Promise<AuditReport<BillInput>> {\n throw new Error('Stripe does not support bill operations');\n }\n\n async reconcilePayments(\n locals: PaymentInput[],\n dateRange?: DateRange,\n ): Promise<AuditReport<PaymentInput>> {\n const externals = await this.provider.payments.list({\n limit: 100,\n startDate: dateRange?.start,\n endDate: dateRange?.end,\n });\n return reconcileRecords('stripe', locals, externals, comparePayment);\n }\n}\n\nclass StripeWebhookOperations implements WebhookOperations {\n constructor(private readonly options: StripeOptions) {}\n\n verify(payload: string, signature: string, secret: string): boolean {\n const endpointSecret = secret || this.options.webhookSecret;\n if (!endpointSecret) {\n throw new Error(\n 'Stripe webhook secret not provided. Pass it as the secret parameter or configure webhookSecret in options.',\n );\n }\n\n const parsed = parseStripeSignatureHeader(signature);\n if (!parsed.timestamp || parsed.signatures.length === 0) {\n return false;\n }\n\n const tolerance = this.options.webhookTolerance ?? 300;\n const timestamp = Number.parseInt(parsed.timestamp, 10);\n if (\n !Number.isFinite(timestamp) ||\n Math.abs(Date.now() / 1000 - timestamp) > tolerance\n ) {\n return false;\n }\n\n const signedPayload = `${parsed.timestamp}.${payload}`;\n const expected = createHmac('sha256', endpointSecret)\n .update(signedPayload)\n .digest('hex');\n\n return parsed.signatures.some((value) =>\n constantTimeEqualHex(value, expected),\n );\n }\n\n parse(payload: string): WebhookEvent {\n let event: StripeWebhookPayload;\n try {\n event = JSON.parse(payload) as StripeWebhookPayload;\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unknown JSON parse error';\n throw new Error(`Invalid Stripe webhook payload: ${message}`);\n }\n\n const resource = event?.data?.object;\n return {\n type: event?.type || 'unknown',\n provider: 'stripe',\n timestamp: unixToDate(event?.created) || new Date(),\n payload: event,\n resourceType: mapStripeResourceType(\n resource?.object || undefined,\n event?.type || undefined,\n ),\n resourceId: typeof resource?.id === 'string' ? resource.id : undefined,\n };\n }\n}\n\nfunction encodeStripeForm(params: Record<string, StripeFormValue>) {\n const form = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n appendStripeFormValue(form, key, value);\n }\n\n return form;\n}\n\nfunction appendStripeFormValue(\n form: URLSearchParams,\n key: string,\n value: StripeFormValue,\n): void {\n if (value === undefined || value === null) {\n return;\n }\n\n if (value instanceof Date) {\n form.append(key, String(toUnixSeconds(value)));\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n appendStripeFormValue(form, `${key}[${index}]`, item);\n });\n return;\n }\n\n if (typeof value === 'object') {\n for (const [childKey, childValue] of Object.entries(value)) {\n appendStripeFormValue(form, `${key}[${childKey}]`, childValue);\n }\n return;\n }\n\n form.append(key, String(value));\n}\n\nfunction mapCustomerToStripe(\n customer: CustomerInput,\n): Record<string, StripeFormValue> {\n const stripeCustomer: Record<string, StripeFormValue> = {\n name: customer.name,\n email: customer.email,\n phone: customer.phone,\n address: customer.billingAddress\n ? {\n line1: customer.billingAddress.street1,\n line2: customer.billingAddress.street2,\n city: customer.billingAddress.city,\n state: customer.billingAddress.state,\n postal_code: customer.billingAddress.postalCode,\n country: customer.billingAddress.country,\n }\n : undefined,\n metadata: normalizeMetadata({\n local_id: customer.id,\n payment_terms: customer.paymentTerms,\n ...customer.metadata,\n }),\n };\n\n if (customer.taxExempt !== undefined) {\n stripeCustomer.tax_exempt = customer.taxExempt ? 'exempt' : 'none';\n }\n\n return stripeCustomer;\n}\n\nfunction mapInvoiceToStripe(\n invoice: InvoiceInput,\n): Record<string, StripeFormValue> {\n return {\n customer: invoice.customerExternalId,\n collection_method: 'send_invoice',\n due_date: invoice.dueDate,\n auto_advance: false,\n pending_invoice_items_behavior: 'include',\n metadata: normalizeMetadata({\n local_id: invoice.id,\n invoice_number: invoice.invoiceNumber,\n reference: invoice.reference,\n memo: invoice.memo,\n tax_amount: invoice.taxAmount,\n subtotal: invoice.subtotal,\n total_amount: invoice.totalAmount,\n ...invoice.metadata,\n }),\n };\n}\n\nfunction mapInvoiceUpdateToStripe(\n invoice: InvoiceInput,\n): Record<string, StripeFormValue> {\n return {\n due_date: invoice.dueDate,\n metadata: normalizeMetadata({\n local_id: invoice.id,\n invoice_number: invoice.invoiceNumber,\n reference: invoice.reference,\n memo: invoice.memo,\n ...invoice.metadata,\n }),\n };\n}\n\nfunction mapCheckoutSessionToStripe(\n input: StripeCheckoutSessionInput,\n): Record<string, StripeFormValue> {\n return {\n mode: input.mode || 'subscription',\n success_url: input.successUrl,\n cancel_url: input.cancelUrl,\n customer: input.customerExternalId,\n customer_email: input.customerExternalId ? undefined : input.customerEmail,\n client_reference_id: input.clientReferenceId,\n allow_promotion_codes: input.allowPromotionCodes,\n line_items: input.lineItems.map(mapCheckoutLineItem),\n metadata: normalizeMetadata(input.metadata || {}),\n };\n}\n\nfunction mapCheckoutLineItem(\n lineItem: StripeCheckoutLineItem,\n): Record<string, StripeFormValue> {\n if (lineItem.price) {\n return {\n price: lineItem.price,\n quantity: lineItem.quantity || 1,\n };\n }\n\n if (!lineItem.priceData) {\n throw new Error('Stripe checkout line item requires price or priceData');\n }\n\n const productData = lineItem.priceData.product\n ? undefined\n : { name: lineItem.priceData.productName || 'Subscription' };\n\n return {\n quantity: lineItem.quantity || 1,\n price_data: {\n currency: lineItem.priceData.currency,\n unit_amount: lineItem.priceData.unitAmount,\n product: lineItem.priceData.product,\n product_data: productData,\n recurring: lineItem.priceData.recurring\n ? {\n interval: lineItem.priceData.recurring.interval,\n interval_count: lineItem.priceData.recurring.intervalCount,\n }\n : undefined,\n },\n };\n}\n\nfunction mapListOptions(options: ListOptions): Record<string, StripeFormValue> {\n return {\n limit: options.limit,\n starting_after:\n typeof options.offset === 'string' ? options.offset : undefined,\n created: {\n gte: options.startDate,\n lte: options.endDate,\n },\n status: options.status,\n };\n}\n\nfunction mapStripeCustomer(customer: StripeCustomer): ExternalCustomer {\n return {\n externalId: customer.id,\n provider: 'stripe',\n syncedAt: new Date(),\n name: customer.name || '',\n email: customer.email || undefined,\n phone: customer.phone || undefined,\n billingAddress: customer.address\n ? {\n street1: customer.address.line1 || undefined,\n street2: customer.address.line2 || undefined,\n city: customer.address.city || undefined,\n state: customer.address.state || undefined,\n postalCode: customer.address.postal_code || undefined,\n country: customer.address.country || undefined,\n }\n : undefined,\n balance:\n customer.balance === null || customer.balance === undefined\n ? undefined\n : centsToMoney(customer.balance),\n currency: customer.currency || undefined,\n raw: customer,\n };\n}\n\nfunction mapStripeInvoice(invoice: StripeInvoice): ExternalInvoice {\n return {\n externalId: invoice.id,\n provider: 'stripe',\n syncedAt: new Date(),\n invoiceNumber: invoice.number || invoice.id,\n customerExternalId:\n typeof invoice.customer === 'string'\n ? invoice.customer\n : invoice.customer?.id || '',\n issueDate: unixToDate(invoice.created) || new Date(),\n dueDate:\n unixToDate(invoice.due_date) || unixToDate(invoice.created) || new Date(),\n subtotal: centsToMoney(invoice.subtotal || 0),\n taxAmount: centsToMoney(invoice.tax || 0),\n totalAmount: centsToMoney(invoice.total || 0),\n amountPaid: centsToMoney(invoice.amount_paid || 0),\n balance: centsToMoney(invoice.amount_remaining || 0),\n status: mapStripeInvoiceStatus(invoice.status, invoice.due_date),\n currency: invoice.currency || 'usd',\n raw: invoice,\n };\n}\n\nfunction mapStripePaymentIntent(\n paymentIntent: StripePaymentIntent,\n): ExternalPayment {\n return {\n externalId: paymentIntent.id,\n provider: 'stripe',\n syncedAt: new Date(),\n amount: centsToMoney(paymentIntent.amount || 0),\n currency: paymentIntent.currency || 'usd',\n paidAt: unixToDate(paymentIntent.created) || new Date(),\n method: paymentIntent.payment_method_types?.[0],\n transactionId: paymentIntent.latest_charge || paymentIntent.id,\n invoiceExternalIds: paymentIntent.invoice\n ? [paymentIntent.invoice]\n : undefined,\n status: mapStripePaymentStatus(paymentIntent.status),\n raw: paymentIntent,\n };\n}\n\nfunction mapStripeSubscription(\n subscription: StripeSubscription,\n): StripeSubscriptionStatusResult {\n return {\n externalId: subscription.id,\n status: subscription.status,\n customerExternalId:\n typeof subscription.customer === 'string'\n ? subscription.customer\n : subscription.customer.id,\n currentPeriodStart: unixToDate(subscription.current_period_start),\n currentPeriodEnd: unixToDate(subscription.current_period_end),\n cancelAtPeriodEnd: Boolean(subscription.cancel_at_period_end),\n canceledAt: unixToDate(subscription.canceled_at),\n trialEnd: unixToDate(subscription.trial_end),\n raw: subscription,\n };\n}\n\nfunction mapStripeInvoiceStatus(\n status?: string | null,\n dueDate?: number | null,\n): ExternalInvoice['status'] {\n switch (status) {\n case 'draft':\n return 'draft';\n case 'paid':\n return 'paid';\n case 'void':\n return 'voided';\n case 'open':\n if (dueDate && dueDate * 1000 < Date.now()) {\n return 'overdue';\n }\n return 'sent';\n default:\n return 'sent';\n }\n}\n\nfunction mapStripePaymentStatus(\n status?: string | null,\n): ExternalPayment['status'] {\n switch (status) {\n case 'succeeded':\n return 'completed';\n case 'processing':\n case 'requires_action':\n case 'requires_capture':\n case 'requires_confirmation':\n return 'pending';\n case 'canceled':\n case 'requires_payment_method':\n return 'failed';\n default:\n return 'pending';\n }\n}\n\nfunction mapStripeResourceType(\n object?: string,\n eventType?: string,\n): WebhookEvent['resourceType'] | undefined {\n if (object === 'customer' || eventType?.startsWith('customer.')) {\n return 'customer';\n }\n if (object === 'invoice' || eventType?.startsWith('invoice.')) {\n return 'invoice';\n }\n if (\n object === 'payment_intent' ||\n object === 'charge' ||\n eventType?.startsWith('payment_intent.') ||\n eventType?.startsWith('charge.')\n ) {\n return 'payment';\n }\n return undefined;\n}\n\nfunction normalizeMetadata(\n metadata: Record<string, unknown>,\n): Record<string, string> {\n const normalized: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n if (value !== undefined && value !== null) {\n normalized[key] = String(value);\n }\n }\n\n return normalized;\n}\n\nfunction parseStripeSignatureHeader(signature: string): {\n timestamp?: string;\n signatures: string[];\n} {\n const parts = signature.split(',').map((part) => part.trim());\n const parsed: { timestamp?: string; signatures: string[] } = {\n signatures: [],\n };\n\n for (const part of parts) {\n const separatorIndex = part.indexOf('=');\n if (separatorIndex === -1) {\n continue;\n }\n\n const key = part.slice(0, separatorIndex);\n const value = part.slice(separatorIndex + 1);\n if (key === 't') {\n parsed.timestamp = value;\n }\n if (key === 'v1' && value) {\n parsed.signatures.push(value);\n }\n }\n\n return parsed;\n}\n\nfunction constantTimeEqualHex(left: string, right: string): boolean {\n try {\n const leftBuffer = Buffer.from(left, 'hex');\n const rightBuffer = Buffer.from(right, 'hex');\n return (\n leftBuffer.length === rightBuffer.length &&\n timingSafeEqual(leftBuffer, rightBuffer)\n );\n } catch {\n return false;\n }\n}\n\nfunction reconcileRecords<TLocal extends { externalId?: string }>(\n provider: AccountingProviderType,\n locals: TLocal[],\n externals: ExternalRecord[],\n compare: (local: TLocal, external: ExternalRecord) => FieldDiff[],\n): AuditReport<TLocal> {\n const externalById = new Map(\n externals.map((external) => [external.externalId, external]),\n );\n const matched: AuditMatch<TLocal>[] = [];\n const discrepancies: AuditReport<TLocal>['discrepancies'] = [];\n const localOnly: TLocal[] = [];\n const seenExternalIds = new Set<string>();\n\n for (const local of locals) {\n const external = local.externalId\n ? externalById.get(local.externalId)\n : undefined;\n\n if (!external) {\n localOnly.push(local);\n continue;\n }\n\n seenExternalIds.add(external.externalId);\n const differences = compare(local, external);\n if (differences.length === 0) {\n matched.push({ local, external, status: 'identical' });\n } else {\n discrepancies.push({ local, external, differences });\n }\n }\n\n const externalOnly = externals.filter(\n (external) => !seenExternalIds.has(external.externalId),\n );\n\n return {\n provider,\n auditedAt: new Date(),\n matched,\n localOnly,\n externalOnly,\n discrepancies,\n summary: {\n total: locals.length + externalOnly.length,\n matched: matched.length,\n localOnly: localOnly.length,\n externalOnly: externalOnly.length,\n discrepancies: discrepancies.length,\n },\n };\n}\n\nfunction compareCustomer(\n local: CustomerInput,\n external: ExternalRecord,\n): FieldDiff[] {\n const customer = external as ExternalCustomer;\n return [\n compareField('name', local.name, customer.name),\n compareField('email', local.email, customer.email),\n ].filter((diff): diff is FieldDiff => Boolean(diff));\n}\n\nfunction compareInvoice(\n local: InvoiceInput,\n external: ExternalRecord,\n): FieldDiff[] {\n const invoice = external as ExternalInvoice;\n return [\n compareField('totalAmount', local.totalAmount, invoice.totalAmount),\n compareField('currency', local.currency || 'usd', invoice.currency),\n ].filter((diff): diff is FieldDiff => Boolean(diff));\n}\n\nfunction comparePayment(\n local: PaymentInput,\n external: ExternalRecord,\n): FieldDiff[] {\n const payment = external as ExternalPayment;\n return [\n compareField('amount', local.amount, payment.amount),\n compareField('currency', local.currency || 'usd', payment.currency),\n ].filter((diff): diff is FieldDiff => Boolean(diff));\n}\n\nfunction compareField(\n field: string,\n localValue: unknown,\n externalValue: unknown,\n): FieldDiff | null {\n if (valuesEqual(localValue, externalValue)) {\n return null;\n }\n return { field, localValue, externalValue };\n}\n\nfunction valuesEqual(left: unknown, right: unknown): boolean {\n if (left === right) {\n return true;\n }\n if (typeof left === 'number' && typeof right === 'number') {\n return Math.abs(left - right) < 0.01;\n }\n return false;\n}\n\nfunction centsToMoney(cents: number): number {\n return cents / 100;\n}\n\nfunction toUnixSeconds(date: Date): number {\n return Math.floor(date.getTime() / 1000);\n}\n\nfunction unixToDate(value?: number | null): Date | undefined {\n return value === null || value === undefined\n ? undefined\n : new Date(value * 1000);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"mappings":"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"}
|