@fantastic.dev/better-stripe 0.9.0 → 0.10.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/CHANGELOG.md +12 -0
- package/MIGRATION.md +26 -0
- package/README.md +38 -1
- package/dist/client/apiVersion.d.ts +6 -0
- package/dist/client/apiVersion.d.ts.map +1 -0
- package/dist/client/apiVersion.js +13 -0
- package/dist/client/apiVersion.js.map +1 -0
- package/dist/client/billing/checkout.d.ts +1 -0
- package/dist/client/billing/checkout.d.ts.map +1 -1
- package/dist/client/billing/checkout.js +5 -1
- package/dist/client/billing/checkout.js.map +1 -1
- package/dist/client/billing/providerReads.d.ts +18 -0
- package/dist/client/billing/providerReads.d.ts.map +1 -0
- package/dist/client/billing/providerReads.js +15 -0
- package/dist/client/billing/providerReads.js.map +1 -0
- package/dist/client/billing/subscriptions.d.ts +1 -1
- package/dist/client/billing/subscriptions.d.ts.map +1 -1
- package/dist/client/billing/subscriptions.js.map +1 -1
- package/dist/client/connect/payoutSnapshot.d.ts +28 -0
- package/dist/client/connect/payoutSnapshot.d.ts.map +1 -0
- package/dist/client/connect/payoutSnapshot.js +81 -0
- package/dist/client/connect/payoutSnapshot.js.map +1 -0
- package/dist/client/connect/transfers.d.ts.map +1 -1
- package/dist/client/connect/transfers.js +13 -32
- package/dist/client/connect/transfers.js.map +1 -1
- package/dist/client/core/accounts.d.ts +12 -23
- package/dist/client/core/accounts.d.ts.map +1 -1
- package/dist/client/core/accounts.js +5 -1
- package/dist/client/core/accounts.js.map +1 -1
- package/dist/client/core/idempotency.d.ts +5 -0
- package/dist/client/core/idempotency.d.ts.map +1 -0
- package/dist/client/core/idempotency.js +10 -0
- package/dist/client/core/idempotency.js.map +1 -0
- package/dist/client/index.d.ts +39 -37
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +47 -56
- package/dist/client/index.js.map +1 -1
- package/dist/client/previewRoutes.d.ts +9 -0
- package/dist/client/previewRoutes.d.ts.map +1 -0
- package/dist/client/previewRoutes.js +15 -0
- package/dist/client/previewRoutes.js.map +1 -0
- package/dist/client/settlement/allocation.d.ts +30 -0
- package/dist/client/settlement/allocation.d.ts.map +1 -0
- package/dist/client/settlement/allocation.js +71 -0
- package/dist/client/settlement/allocation.js.map +1 -0
- package/dist/client/settlement/commissions.d.ts +27 -0
- package/dist/client/settlement/commissions.d.ts.map +1 -0
- package/dist/client/settlement/commissions.js +69 -0
- package/dist/client/settlement/commissions.js.map +1 -0
- package/dist/client/settlement/execution.d.ts +27 -0
- package/dist/client/settlement/execution.d.ts.map +1 -0
- package/dist/client/settlement/execution.js +70 -0
- package/dist/client/settlement/execution.js.map +1 -0
- package/dist/client/settlement/reconciliation.d.ts +10 -0
- package/dist/client/settlement/reconciliation.d.ts.map +1 -0
- package/dist/client/settlement/reconciliation.js +73 -0
- package/dist/client/settlement/reconciliation.js.map +1 -0
- package/dist/client/settlement/settleSale.d.ts +21 -0
- package/dist/client/settlement/settleSale.d.ts.map +1 -0
- package/dist/client/settlement/settleSale.js +27 -0
- package/dist/client/settlement/settleSale.js.map +1 -0
- package/dist/client/settlement/verifiedSale.d.ts +25 -0
- package/dist/client/settlement/verifiedSale.d.ts.map +1 -0
- package/dist/client/settlement/verifiedSale.js +100 -0
- package/dist/client/settlement/verifiedSale.js.map +1 -0
- package/dist/client/types/options.d.ts +3 -0
- package/dist/client/types/options.d.ts.map +1 -1
- package/dist/client/utils/webhookEndpoints.d.ts +12 -8
- package/dist/client/utils/webhookEndpoints.d.ts.map +1 -1
- package/dist/client/utils/webhookEndpoints.js +41 -2
- package/dist/client/utils/webhookEndpoints.js.map +1 -1
- package/dist/client/webhooks/asyncHooks.d.ts +5 -0
- package/dist/client/webhooks/asyncHooks.d.ts.map +1 -0
- package/dist/client/webhooks/asyncHooks.js +20 -0
- package/dist/client/webhooks/asyncHooks.js.map +1 -0
- package/dist/client/webhooks/v2.d.ts.map +1 -1
- package/dist/client/webhooks/v2.js +10 -7
- package/dist/client/webhooks/v2.js.map +1 -1
- package/dist/component/_generated/component.d.ts +80 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/lib/stripeFactory.d.ts +3 -2
- package/dist/component/lib/stripeFactory.d.ts.map +1 -1
- package/dist/component/lib/stripeFactory.js +6 -5
- package/dist/component/lib/stripeFactory.js.map +1 -1
- package/dist/component/schema.d.ts +67 -0
- package/dist/component/schema.js +4 -0
- package/dist/component/schema.js.map +1 -1
- package/dist/component/settlement/mutations.d.ts +47 -0
- package/dist/component/settlement/mutations.d.ts.map +1 -0
- package/dist/component/settlement/mutations.js +104 -0
- package/dist/component/settlement/mutations.js.map +1 -0
- package/dist/component/settlement/queries.d.ts +29 -0
- package/dist/component/settlement/queries.d.ts.map +1 -0
- package/dist/component/settlement/queries.js +35 -0
- package/dist/component/settlement/queries.js.map +1 -0
- package/dist/component/settlement/schema.d.ts +99 -0
- package/dist/component/settlement/schema.d.ts.map +1 -0
- package/dist/component/settlement/schema.js +35 -0
- package/dist/component/settlement/schema.js.map +1 -0
- package/dist/react/workflows/Checkout.d.ts +3 -1
- package/dist/react/workflows/Checkout.d.ts.map +1 -1
- package/dist/react/workflows/Checkout.js +3 -2
- package/dist/react/workflows/Checkout.js.map +1 -1
- package/dist/react/workflows/Payouts.d.ts +3 -18
- package/dist/react/workflows/Payouts.d.ts.map +1 -1
- package/dist/react/workflows/Payouts.js +2 -2
- package/dist/react/workflows/Payouts.js.map +1 -1
- package/docs/accounts-v2-preview.md +132 -0
- package/docs/react-workflows.md +5 -2
- package/docs/settlement.md +158 -0
- package/package.json +3 -1
- package/src/client/apiVersion.ts +20 -0
- package/src/client/billing/checkout-idempotency.test.ts +82 -0
- package/src/client/billing/checkout.ts +6 -1
- package/src/client/billing/providerReads.test.ts +60 -0
- package/src/client/billing/providerReads.ts +30 -0
- package/src/client/billing/subscriptions.ts +1 -8
- package/src/client/connect/payoutSnapshot.test.ts +91 -0
- package/src/client/connect/payoutSnapshot.ts +130 -0
- package/src/client/connect/transfers.test.ts +15 -4
- package/src/client/connect/transfers.ts +13 -42
- package/src/client/core/account-idempotency.test.ts +78 -0
- package/src/client/core/accounts.ts +18 -25
- package/src/client/core/idempotency.test.ts +10 -0
- package/src/client/core/idempotency.ts +11 -0
- package/src/client/customer-preview-thin.test.ts +41 -0
- package/src/client/customer-preview-webhooks.test.ts +150 -0
- package/src/client/customer-preview.test.ts +185 -0
- package/src/client/index.ts +115 -119
- package/src/client/previewRoutes.ts +26 -0
- package/src/client/settlement/allocation.test.ts +98 -0
- package/src/client/settlement/allocation.ts +110 -0
- package/src/client/settlement/commissions.test.ts +103 -0
- package/src/client/settlement/commissions.ts +125 -0
- package/src/client/settlement/execution.test.ts +186 -0
- package/src/client/settlement/execution.ts +134 -0
- package/src/client/settlement/reconciliation.ts +119 -0
- package/src/client/settlement/settleSale.ts +59 -0
- package/src/client/settlement/verifiedSale.test.ts +139 -0
- package/src/client/settlement/verifiedSale.ts +159 -0
- package/src/client/stripe-version.test.ts +10 -4
- package/src/client/types/options.ts +3 -0
- package/src/client/utils/webhookEndpoints.ts +70 -15
- package/src/client/webhooks/asyncHooks.ts +38 -0
- package/src/client/webhooks/processors.test.ts +9 -9
- package/src/client/webhooks/v2.ts +14 -10
- package/src/component/_generated/api.ts +4 -0
- package/src/component/_generated/component.ts +100 -0
- package/src/component/lib/stripeFactory.ts +13 -5
- package/src/component/schema.ts +8 -0
- package/src/component/settlement/mutations.ts +119 -0
- package/src/component/settlement/queries.ts +38 -0
- package/src/component/settlement/schema.ts +45 -0
- package/src/component/settlement-claims.test.ts +77 -0
- package/src/react/components/EmbeddedDisputes.render.test.tsx +2 -2
- package/src/react/index.payment-element.test.ts +22 -37
- package/src/react/workflows/Checkout.test.tsx +30 -0
- package/src/react/workflows/Checkout.tsx +10 -3
- package/src/react/workflows/Payouts.test.tsx +33 -0
- package/src/react/workflows/Payouts.tsx +21 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commissions.js","sourceRoot":"","sources":["../../../src/client/settlement/commissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type Stripe from "stripe";
|
|
2
|
+
import type { SplitTransfer } from "../core/fees.js";
|
|
3
|
+
import type { Component, RunCtx } from "../helpers.js";
|
|
4
|
+
export type ResolvedSettlement = {
|
|
5
|
+
sourceChargeId: string;
|
|
6
|
+
paymentIntentId?: string;
|
|
7
|
+
sourceInvoiceId?: string;
|
|
8
|
+
gross: number;
|
|
9
|
+
currency: string;
|
|
10
|
+
processingFee: number;
|
|
11
|
+
platformNet: number;
|
|
12
|
+
adjustmentAmount?: number;
|
|
13
|
+
transfers: SplitTransfer[];
|
|
14
|
+
paymentId?: string;
|
|
15
|
+
};
|
|
16
|
+
export type SettlementResult = ResolvedSettlement & {
|
|
17
|
+
status: "settled";
|
|
18
|
+
executedTransfers: {
|
|
19
|
+
stripeTransferId: string;
|
|
20
|
+
destinationAccountId: string;
|
|
21
|
+
role: string;
|
|
22
|
+
amount: number;
|
|
23
|
+
}[];
|
|
24
|
+
};
|
|
25
|
+
/** Shared transfer engine for webhook splits and verified, host-resolved allocations. */
|
|
26
|
+
export declare function executeResolvedTransfers(stripe: Stripe, component: Component, ctx: RunCtx, opts: ResolvedSettlement): Promise<SettlementResult>;
|
|
27
|
+
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/execution.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG;IAClD,MAAM,EAAE,SAAS,CAAC;IAClB,iBAAiB,EAAE;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;CACL,CAAC;AAQF,yFAAyF;AACzF,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAyF3B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { sourceTransfers, matchingTransfer, recordSettlementTransfer, } from "./reconciliation.js";
|
|
2
|
+
import { runMutationOrThrow } from "../helpers.js";
|
|
3
|
+
import { componentRef } from "../webhooks/helpers.js";
|
|
4
|
+
/** Shared transfer engine for webhook splits and verified, host-resolved allocations. */
|
|
5
|
+
export async function executeResolvedTransfers(stripe, component, ctx, opts) {
|
|
6
|
+
const saved = (await runMutationOrThrow(ctx, componentRef(component, "settlement/mutations/reserveSettlementAllocation"), opts));
|
|
7
|
+
const claim = {
|
|
8
|
+
sourceChargeId: saved.sourceChargeId,
|
|
9
|
+
paymentIntentId: saved.paymentIntentId,
|
|
10
|
+
sourceInvoiceId: saved.sourceInvoiceId,
|
|
11
|
+
gross: saved.gross,
|
|
12
|
+
currency: saved.currency,
|
|
13
|
+
processingFee: saved.processingFee,
|
|
14
|
+
platformNet: saved.platformNet,
|
|
15
|
+
adjustmentAmount: saved.adjustmentAmount,
|
|
16
|
+
transfers: saved.transfers,
|
|
17
|
+
paymentId: saved.paymentId,
|
|
18
|
+
};
|
|
19
|
+
const existing = ((await ctx.runQuery(componentRef(component, "connect/queries/listTransfersByCharge"), { sourceChargeId: claim.sourceChargeId })) ?? []);
|
|
20
|
+
let provider = await sourceTransfers(stripe, claim.sourceChargeId);
|
|
21
|
+
if (claim.transfers.some((leg) => leg.amount > 0 &&
|
|
22
|
+
!existing.some((t) => t.destinationAccountId === leg.destinationAccountId &&
|
|
23
|
+
t.role === leg.role) &&
|
|
24
|
+
!matchingTransfer(provider, claim, leg))) {
|
|
25
|
+
provider = [
|
|
26
|
+
...new Map([
|
|
27
|
+
...provider,
|
|
28
|
+
...(await sourceTransfers(stripe, claim.sourceChargeId, true)),
|
|
29
|
+
].map((t) => [t.id, t])).values(),
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
const executedTransfers = [];
|
|
33
|
+
for (const leg of claim.transfers) {
|
|
34
|
+
if (leg.amount === 0)
|
|
35
|
+
continue;
|
|
36
|
+
const recorded = existing.find((t) => t.destinationAccountId === leg.destinationAccountId &&
|
|
37
|
+
t.role === leg.role);
|
|
38
|
+
if (recorded &&
|
|
39
|
+
(recorded.amount !== leg.amount || recorded.currency !== claim.currency))
|
|
40
|
+
throw new Error("Recorded transfer conflicts with immutable settlement.");
|
|
41
|
+
let transferId = recorded?.stripeTransferId;
|
|
42
|
+
if (!transferId) {
|
|
43
|
+
const recovered = matchingTransfer(provider, claim, leg);
|
|
44
|
+
const transfer = recovered ??
|
|
45
|
+
(await stripe.transfers.create({
|
|
46
|
+
amount: leg.amount,
|
|
47
|
+
currency: claim.currency,
|
|
48
|
+
destination: leg.destinationAccountId,
|
|
49
|
+
source_transaction: claim.sourceChargeId,
|
|
50
|
+
transfer_group: claim.sourceChargeId,
|
|
51
|
+
metadata: {
|
|
52
|
+
bsRole: leg.role,
|
|
53
|
+
bsSourceCharge: claim.sourceChargeId,
|
|
54
|
+
},
|
|
55
|
+
}, {
|
|
56
|
+
idempotencyKey: `bs_split_${claim.sourceChargeId}_${leg.destinationAccountId}_${leg.role}`,
|
|
57
|
+
}));
|
|
58
|
+
transferId = transfer.id;
|
|
59
|
+
await recordSettlementTransfer(component, ctx, claim, leg, transfer);
|
|
60
|
+
}
|
|
61
|
+
executedTransfers.push({
|
|
62
|
+
stripeTransferId: transferId,
|
|
63
|
+
destinationAccountId: leg.destinationAccountId,
|
|
64
|
+
role: leg.role,
|
|
65
|
+
amount: leg.amount,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return { ...claim, status: "settled", executedTransfers };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../../src/client/settlement/execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type Stripe from "stripe";
|
|
2
|
+
import type { SplitTransfer } from "../core/fees.js";
|
|
3
|
+
import type { Component, RunCtx } from "../helpers.js";
|
|
4
|
+
import type { ResolvedSettlement } from "./execution.js";
|
|
5
|
+
export declare function sourceTransfers(stripe: Stripe, sourceChargeId: string, legacy?: boolean): Promise<Stripe.Transfer[]>;
|
|
6
|
+
export declare function matchingTransfer(provider: Stripe.Transfer[], claim: ResolvedSettlement, leg: SplitTransfer): Stripe.Transfer;
|
|
7
|
+
export declare function recordSettlementTransfer(component: Component, ctx: RunCtx, claim: ResolvedSettlement, leg: SplitTransfer, transfer: Stripe.Transfer): Promise<void>;
|
|
8
|
+
/** Recover provider-success/ledger-failure legs before sizing refunds or disputes. */
|
|
9
|
+
export declare function recoverSettlementTransfers(stripe: Stripe, component: Component, ctx: RunCtx, sourceChargeId: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=reconciliation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciliation.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/reconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,UAAQ,GACb,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAwB5B;AACD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAC3B,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,aAAa,mBAwBnB;AACD,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ,iBAkB1B;AACD,sFAAsF;AACtF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,iBA0BvB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { runMutationOrThrow } from "../helpers.js";
|
|
2
|
+
import { componentRef } from "../webhooks/helpers.js";
|
|
3
|
+
export async function sourceTransfers(stripe, sourceChargeId, legacy = false) {
|
|
4
|
+
const rows = [];
|
|
5
|
+
let cursor;
|
|
6
|
+
const charge = legacy ? await stripe.charges.retrieve(sourceChargeId) : null;
|
|
7
|
+
const created = charge && charge.created <= Math.floor(Date.now() / 1000)
|
|
8
|
+
? { gte: charge.created }
|
|
9
|
+
: undefined;
|
|
10
|
+
for (let page = 0; page < 100; page++) {
|
|
11
|
+
const batch = await stripe.transfers.list({
|
|
12
|
+
...(legacy ? { created } : { transfer_group: sourceChargeId }),
|
|
13
|
+
limit: 100,
|
|
14
|
+
starting_after: cursor,
|
|
15
|
+
});
|
|
16
|
+
rows.push(...batch.data);
|
|
17
|
+
if (!batch.has_more)
|
|
18
|
+
return rows;
|
|
19
|
+
const next = batch.data[batch.data.length - 1]?.id;
|
|
20
|
+
if (!next || next === cursor)
|
|
21
|
+
throw new Error("Settlement transfer reconciliation did not advance.");
|
|
22
|
+
cursor = next;
|
|
23
|
+
}
|
|
24
|
+
throw new Error("Settlement transfer reconciliation exceeded its page bound; review before retrying.");
|
|
25
|
+
}
|
|
26
|
+
export function matchingTransfer(provider, claim, leg) {
|
|
27
|
+
const matches = provider.filter((t) => (typeof t.destination === "string"
|
|
28
|
+
? t.destination
|
|
29
|
+
: t.destination?.id) === leg.destinationAccountId &&
|
|
30
|
+
(t.metadata.bsRole ?? t.metadata.role) === leg.role &&
|
|
31
|
+
(t.metadata.bsSourceCharge ?? t.metadata.storeSaleChargeId) ===
|
|
32
|
+
claim.sourceChargeId);
|
|
33
|
+
if (matches.length > 1 ||
|
|
34
|
+
matches.some((t) => t.amount !== leg.amount ||
|
|
35
|
+
t.currency !== claim.currency ||
|
|
36
|
+
t.source_transaction !== claim.sourceChargeId))
|
|
37
|
+
throw new Error("Provider transfers conflict with claimed settlement; manual review required.");
|
|
38
|
+
return matches[0];
|
|
39
|
+
}
|
|
40
|
+
export async function recordSettlementTransfer(component, ctx, claim, leg, transfer) {
|
|
41
|
+
await runMutationOrThrow(ctx, componentRef(component, "connect/mutations/upsertTransfer"), {
|
|
42
|
+
stripeTransferId: transfer.id,
|
|
43
|
+
sourceChargeId: claim.sourceChargeId,
|
|
44
|
+
sourceInvoiceId: claim.sourceInvoiceId,
|
|
45
|
+
destinationAccountId: leg.destinationAccountId,
|
|
46
|
+
amount: leg.amount,
|
|
47
|
+
currency: claim.currency,
|
|
48
|
+
role: leg.role,
|
|
49
|
+
status: "paid",
|
|
50
|
+
paymentId: claim.paymentId,
|
|
51
|
+
reversedAmount: transfer.amount_reversed ?? 0,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/** Recover provider-success/ledger-failure legs before sizing refunds or disputes. */
|
|
55
|
+
export async function recoverSettlementTransfers(stripe, component, ctx, sourceChargeId) {
|
|
56
|
+
const claim = (await ctx.runQuery(componentRef(component, "settlement/queries/getSettlementAllocation"), { sourceChargeId }));
|
|
57
|
+
if (!claim || typeof claim.sourceChargeId !== "string")
|
|
58
|
+
return;
|
|
59
|
+
let provider = await sourceTransfers(stripe, sourceChargeId);
|
|
60
|
+
if (claim.transfers.some((leg) => leg.amount > 0 && !matchingTransfer(provider, claim, leg)))
|
|
61
|
+
provider = [
|
|
62
|
+
...new Map([
|
|
63
|
+
...provider,
|
|
64
|
+
...(await sourceTransfers(stripe, sourceChargeId, true)),
|
|
65
|
+
].map((t) => [t.id, t])).values(),
|
|
66
|
+
];
|
|
67
|
+
for (const leg of claim.transfers) {
|
|
68
|
+
const transfer = matchingTransfer(provider, claim, leg);
|
|
69
|
+
if (transfer)
|
|
70
|
+
await recordSettlementTransfer(component, ctx, claim, leg, transfer);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=reconciliation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciliation.js","sourceRoot":"","sources":["../../../src/client/settlement/reconciliation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type Stripe from "stripe";
|
|
2
|
+
import type { SplitTransfer } from "../core/fees.js";
|
|
3
|
+
import type { Component, RunCtx } from "../helpers.js";
|
|
4
|
+
import { getVerifiedSale, type VerifiedSaleOptions } from "./verifiedSale.js";
|
|
5
|
+
import { type SettlementResult } from "./execution.js";
|
|
6
|
+
export type SettleSaleOptions = VerifiedSaleOptions & {
|
|
7
|
+
allocation: {
|
|
8
|
+
gross: number;
|
|
9
|
+
currency: string;
|
|
10
|
+
processingFee: number;
|
|
11
|
+
platformNet: number;
|
|
12
|
+
adjustmentAmount?: number;
|
|
13
|
+
transfers: SplitTransfer[];
|
|
14
|
+
};
|
|
15
|
+
paymentId?: string;
|
|
16
|
+
onSettled?: (result: SettlementResult) => Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
export declare function settleSale(stripe: Stripe, component: Component, ctx: RunCtx, opts: SettleSaleOptions): Promise<SettlementResult | Exclude<Awaited<ReturnType<typeof getVerifiedSale>>, {
|
|
19
|
+
status: "ready";
|
|
20
|
+
}>>;
|
|
21
|
+
//# sourceMappingURL=settleSale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settleSale.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/settleSale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AACxB,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,aAAa,EAAE,CAAC;KAC5B,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzD,CAAC;AACF,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,iBAAiB,GACtB,OAAO,CACN,gBAAgB,GAChB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAC5E,CA4BA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { componentRef } from "../webhooks/helpers.js";
|
|
2
|
+
import { throwStripeError } from "../errors.js";
|
|
3
|
+
import { getVerifiedSale } from "./verifiedSale.js";
|
|
4
|
+
import { executeResolvedTransfers, } from "./execution.js";
|
|
5
|
+
export async function settleSale(stripe, component, ctx, opts) {
|
|
6
|
+
const sale = await getVerifiedSale(stripe, opts);
|
|
7
|
+
if (sale.status !== "ready")
|
|
8
|
+
return sale;
|
|
9
|
+
const prior = (await ctx.runQuery(componentRef(component, "settlement/queries/getSettlementAllocation"), {
|
|
10
|
+
sourceChargeId: sale.chargeId,
|
|
11
|
+
}));
|
|
12
|
+
const allocation = prior ?? opts.allocation;
|
|
13
|
+
if (allocation.gross !== sale.gross ||
|
|
14
|
+
allocation.currency !== sale.currency ||
|
|
15
|
+
allocation.processingFee !== sale.processingFee)
|
|
16
|
+
throwStripeError("INVALID_CONFIGURATION", "Allocation must use verified payment currency, gross and actual processing cost.");
|
|
17
|
+
const result = await executeResolvedTransfers(stripe, component, ctx, {
|
|
18
|
+
...opts.allocation,
|
|
19
|
+
sourceChargeId: sale.chargeId,
|
|
20
|
+
paymentIntentId: sale.paymentIntentId,
|
|
21
|
+
sourceInvoiceId: sale.invoiceId,
|
|
22
|
+
paymentId: opts.paymentId,
|
|
23
|
+
});
|
|
24
|
+
await opts.onSettled?.(result);
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=settleSale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settleSale.js","sourceRoot":"","sources":["../../../src/client/settlement/settleSale.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAA4B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EACL,wBAAwB,GAEzB,MAAM,gBAAgB,CAAC;AAaxB,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,SAAoB,EACpB,GAAW,EACX,IAAuB;IAKvB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,QAAQ,CAC/B,YAAY,CAAC,SAAS,EAAE,4CAA4C,CAAC,EACrE;QACE,cAAc,EAAE,IAAI,CAAC,QAAQ;KAC9B,CACF,CAA4B,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;IAC5C,IACE,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;QAC/B,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;QACrC,UAAU,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa;QAE/C,gBAAgB,CACd,uBAAuB,EACvB,kFAAkF,CACnF,CAAC;IACJ,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE;QACpE,GAAG,IAAI,CAAC,UAAU;QAClB,cAAc,EAAE,IAAI,CAAC,QAAQ;QAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,eAAe,EAAE,IAAI,CAAC,SAAS;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type Stripe from "stripe";
|
|
2
|
+
export type VerifiedSaleOptions = {
|
|
3
|
+
paymentIntentId: string;
|
|
4
|
+
subscriptionId?: string;
|
|
5
|
+
invoiceId?: string;
|
|
6
|
+
};
|
|
7
|
+
export type VerifiedSale = {
|
|
8
|
+
status: "pending" | "not_payable";
|
|
9
|
+
reason: string;
|
|
10
|
+
retryable: boolean;
|
|
11
|
+
} | {
|
|
12
|
+
status: "ready";
|
|
13
|
+
paymentIntentId: string;
|
|
14
|
+
chargeId: string;
|
|
15
|
+
gross: number;
|
|
16
|
+
processingFee: number;
|
|
17
|
+
currency: string;
|
|
18
|
+
metadata: Record<string, string>;
|
|
19
|
+
invoiceId?: string;
|
|
20
|
+
subscriptionId?: string;
|
|
21
|
+
stripePriceId?: string;
|
|
22
|
+
stripeProductId?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function getVerifiedSale(stripe: Stripe, opts: VerifiedSaleOptions): Promise<VerifiedSale>;
|
|
25
|
+
//# sourceMappingURL=verifiedSale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifiedSale.d.ts","sourceRoot":"","sources":["../../../src/client/settlement/verifiedSale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,SAAS,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GACzE;IACE,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAGN,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,YAAY,CAAC,CAmIvB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { isBetterStripeError, throwStripeError } from "../errors.js";
|
|
2
|
+
const id = (value) => typeof value === "string" ? value : value?.id;
|
|
3
|
+
export async function getVerifiedSale(stripe, opts) {
|
|
4
|
+
try {
|
|
5
|
+
const payment = await stripe.paymentIntents.retrieve(opts.paymentIntentId, {
|
|
6
|
+
expand: ["latest_charge.balance_transaction"],
|
|
7
|
+
});
|
|
8
|
+
if (payment.status === "processing")
|
|
9
|
+
return {
|
|
10
|
+
status: "pending",
|
|
11
|
+
reason: "payment_processing",
|
|
12
|
+
retryable: true,
|
|
13
|
+
};
|
|
14
|
+
if (payment.status !== "succeeded")
|
|
15
|
+
return {
|
|
16
|
+
status: "not_payable",
|
|
17
|
+
reason: "payment_not_succeeded",
|
|
18
|
+
retryable: false,
|
|
19
|
+
};
|
|
20
|
+
const charge = payment.latest_charge;
|
|
21
|
+
if (!charge || typeof charge === "string")
|
|
22
|
+
return {
|
|
23
|
+
status: "pending",
|
|
24
|
+
reason: "charge_unavailable",
|
|
25
|
+
retryable: true,
|
|
26
|
+
};
|
|
27
|
+
if (charge.amount_refunded > 0 || charge.disputed)
|
|
28
|
+
return {
|
|
29
|
+
status: "not_payable",
|
|
30
|
+
reason: "charge_refunded_or_disputed",
|
|
31
|
+
retryable: false,
|
|
32
|
+
};
|
|
33
|
+
const balance = charge.balance_transaction;
|
|
34
|
+
if (!balance || typeof balance === "string")
|
|
35
|
+
return {
|
|
36
|
+
status: "pending",
|
|
37
|
+
reason: "processing_fee_unavailable",
|
|
38
|
+
retryable: true,
|
|
39
|
+
};
|
|
40
|
+
if (balance.currency !== payment.currency ||
|
|
41
|
+
charge.currency !== payment.currency)
|
|
42
|
+
throwStripeError("INVALID_CONFIGURATION", "Settlement currency must match the payment and processing currency.");
|
|
43
|
+
if (![payment.amount_received, balance.fee].every(Number.isSafeInteger) ||
|
|
44
|
+
balance.fee < 0 ||
|
|
45
|
+
balance.fee > payment.amount_received ||
|
|
46
|
+
charge.amount !== payment.amount_received)
|
|
47
|
+
throwStripeError("INVALID_CONFIGURATION", "Unsupported payment or processing amounts.");
|
|
48
|
+
if (opts.subscriptionId && !opts.invoiceId)
|
|
49
|
+
throwStripeError("INVALID_CONFIGURATION", "Subscription settlement requires a paid invoice.");
|
|
50
|
+
const invoice = opts.invoiceId
|
|
51
|
+
? await stripe.invoices.retrieve(opts.invoiceId)
|
|
52
|
+
: null;
|
|
53
|
+
if (invoice && invoice.status !== "paid")
|
|
54
|
+
return { status: "pending", reason: "invoice_not_paid", retryable: true };
|
|
55
|
+
const subscriptionId = id(invoice?.parent?.subscription_details?.subscription);
|
|
56
|
+
if (invoice &&
|
|
57
|
+
(invoice.currency !== payment.currency ||
|
|
58
|
+
(opts.subscriptionId && subscriptionId !== opts.subscriptionId)))
|
|
59
|
+
throwStripeError("INVALID_CONFIGURATION", "Invoice currency or subscription does not match settlement.");
|
|
60
|
+
if (invoice) {
|
|
61
|
+
if (invoice.amount_paid !== payment.amount_received)
|
|
62
|
+
throwStripeError("INVALID_CONFIGURATION", "Partial invoice payments require an explicitly resolved invoice allocation.");
|
|
63
|
+
const linked = await stripe.invoicePayments.list({
|
|
64
|
+
invoice: invoice.id,
|
|
65
|
+
limit: 100,
|
|
66
|
+
status: "paid",
|
|
67
|
+
payment: { type: "payment_intent", payment_intent: payment.id },
|
|
68
|
+
});
|
|
69
|
+
if (!linked.data.some((row) => row.status === "paid" &&
|
|
70
|
+
id(row.payment.payment_intent) === payment.id))
|
|
71
|
+
throwStripeError("INVALID_CONFIGURATION", "Payment does not belong to this paid invoice.");
|
|
72
|
+
}
|
|
73
|
+
const subscription = subscriptionId
|
|
74
|
+
? await stripe.subscriptions.retrieve(subscriptionId)
|
|
75
|
+
: null;
|
|
76
|
+
if (subscription && subscription.items.data.length !== 1)
|
|
77
|
+
throwStripeError("INVALID_CONFIGURATION", "Resolve multi-price subscription allocations explicitly.");
|
|
78
|
+
const price = subscription?.items.data[0]?.price;
|
|
79
|
+
const metadata = subscription?.metadata ?? payment.metadata;
|
|
80
|
+
return {
|
|
81
|
+
status: "ready",
|
|
82
|
+
paymentIntentId: payment.id,
|
|
83
|
+
chargeId: charge.id,
|
|
84
|
+
gross: payment.amount_received,
|
|
85
|
+
processingFee: balance.fee,
|
|
86
|
+
currency: payment.currency,
|
|
87
|
+
metadata,
|
|
88
|
+
invoiceId: invoice?.id,
|
|
89
|
+
subscriptionId,
|
|
90
|
+
stripePriceId: price?.id ?? metadata.stripePriceId,
|
|
91
|
+
stripeProductId: id(price?.product) ?? metadata.stripeProductId,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (isBetterStripeError(error))
|
|
96
|
+
throw error;
|
|
97
|
+
throwStripeError("STRIPE_API_ERROR", "Could not retrieve verified sale context.");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=verifiedSale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifiedSale.js","sourceRoot":"","sources":["../../../src/client/settlement/verifiedSale.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SupportedStripeApiVersion } from "../apiVersion.js";
|
|
1
2
|
import type { StripeEventHandler, StripeEventHandlers, StripeWebhookEvent } from "./events.js";
|
|
2
3
|
import type { AsyncHooks, SyncTriggers, WebhookHandlerRefs } from "./triggers.js";
|
|
3
4
|
/**
|
|
@@ -31,6 +32,8 @@ export type PlatformFeeConfig = {
|
|
|
31
32
|
*/
|
|
32
33
|
export type FeeOverride = PlatformFeeConfig;
|
|
33
34
|
export type BetterStripeOptions = {
|
|
35
|
+
/** Defaults to GA. Non-Connect Accounts v2 customers require explicit preview opt-in. */
|
|
36
|
+
stripeApiVersion?: SupportedStripeApiVersion;
|
|
34
37
|
STRIPE_SECRET_KEY?: string;
|
|
35
38
|
/** Sync triggers — run in the same transaction as component DB writes */
|
|
36
39
|
triggers?: SyncTriggers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/client/types/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAMvB;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAM5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/client/types/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAMvB;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAM5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,yDAAyD;IACzD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACpC,CAAC;AAMF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;IAC1D;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;CACjD,CAAC"}
|
|
@@ -11,6 +11,8 @@ export type BetterStripeWebhookEvent = (typeof BETTER_STRIPE_WEBHOOK_EVENTS)[num
|
|
|
11
11
|
* These are thin events — the webhook handler fetches full data from the API.
|
|
12
12
|
*/
|
|
13
13
|
export declare const BETTER_STRIPE_V2_WEBHOOK_EVENTS: readonly ["v2.core.account.updated", "v2.core.account.created", "v2.core.account[requirements].updated", "v2.core.account[identity].updated", "v2.core.account[configuration.merchant].updated", "v2.core.account[configuration.merchant].capability_status_updated", "v2.core.account[configuration.customer].updated", "v2.core.account[configuration.recipient].updated", "v2.core.account[defaults].updated", "v2.core.account_person.created", "v2.core.account_person.updated", "v2.core.account_link.returned"];
|
|
14
|
+
/** Minimal customer lifecycle subscription for non-Connect preview merchants. */
|
|
15
|
+
export declare const BETTER_STRIPE_CUSTOMER_ACCOUNT_EVENTS: readonly ["v2.core.account.created", "v2.core.account[configuration.customer].updated", "v2.core.account[identity].updated"];
|
|
14
16
|
export type BetterStripeV2WebhookEvent = (typeof BETTER_STRIPE_V2_WEBHOOK_EVENTS)[number];
|
|
15
17
|
/**
|
|
16
18
|
* All events (V1 + V2) that better-stripe processes.
|
|
@@ -27,10 +29,17 @@ export declare function listWebhookEndpoints(stripe: Stripe, _ctx: RunCtx, opts?
|
|
|
27
29
|
description: string | undefined;
|
|
28
30
|
livemode: boolean;
|
|
29
31
|
}[]>;
|
|
30
|
-
export
|
|
32
|
+
export type WebhookEndpointOptions = {
|
|
31
33
|
url: string;
|
|
32
34
|
description?: string;
|
|
33
35
|
enabledEvents?: string[];
|
|
36
|
+
};
|
|
37
|
+
export type EventDestinationOptions = WebhookEndpointOptions & {
|
|
38
|
+
name?: string;
|
|
39
|
+
eventPayload?: "snapshot" | "thin";
|
|
40
|
+
};
|
|
41
|
+
export declare function createWebhookEndpoint(stripe: Stripe, _ctx: RunCtx, opts: WebhookEndpointOptions & {
|
|
42
|
+
apiVersion?: string;
|
|
34
43
|
}): Promise<{
|
|
35
44
|
id: string;
|
|
36
45
|
secret: string;
|
|
@@ -66,13 +75,8 @@ export declare function listEventDestinations(stripe: Stripe, _ctx: RunCtx, opts
|
|
|
66
75
|
*
|
|
67
76
|
* Defaults to a thin destination with V2 account events if no overrides given.
|
|
68
77
|
*/
|
|
69
|
-
export declare function setupEventDestination(stripe: Stripe, _ctx: RunCtx, opts: {
|
|
70
|
-
|
|
71
|
-
name?: string;
|
|
72
|
-
description?: string;
|
|
73
|
-
enabledEvents?: string[];
|
|
74
|
-
/** 'snapshot' for V1 events, 'thin' for V2 events. Defaults to 'thin'. */
|
|
75
|
-
eventPayload?: "snapshot" | "thin";
|
|
78
|
+
export declare function setupEventDestination(stripe: Stripe, _ctx: RunCtx, opts: EventDestinationOptions & {
|
|
79
|
+
apiVersion?: string;
|
|
76
80
|
}): Promise<{
|
|
77
81
|
id: string;
|
|
78
82
|
secret: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhookEndpoints.d.ts","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhookEndpoints.d.ts","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { STRIPE_CUSTOMER_PREVIEW_API_VERSION } from "../apiVersion.js";
|
|
2
|
+
import { throwStripeError } from "../errors.js";
|
|
1
3
|
// =============================================================================
|
|
2
4
|
// Webhook endpoint management
|
|
3
5
|
// =============================================================================
|
|
@@ -63,6 +65,12 @@ export const BETTER_STRIPE_V2_WEBHOOK_EVENTS = [
|
|
|
63
65
|
"v2.core.account_person.updated",
|
|
64
66
|
"v2.core.account_link.returned",
|
|
65
67
|
];
|
|
68
|
+
/** Minimal customer lifecycle subscription for non-Connect preview merchants. */
|
|
69
|
+
export const BETTER_STRIPE_CUSTOMER_ACCOUNT_EVENTS = [
|
|
70
|
+
"v2.core.account.created",
|
|
71
|
+
"v2.core.account[configuration.customer].updated",
|
|
72
|
+
"v2.core.account[identity].updated",
|
|
73
|
+
];
|
|
66
74
|
/**
|
|
67
75
|
* All events (V1 + V2) that better-stripe processes.
|
|
68
76
|
* Use with setupEventDestination() for complete webhook coverage.
|
|
@@ -93,6 +101,11 @@ export async function createWebhookEndpoint(stripe, _ctx, opts) {
|
|
|
93
101
|
}
|
|
94
102
|
const endpoint = await stripe.webhookEndpoints.create({
|
|
95
103
|
url: opts.url,
|
|
104
|
+
...(opts.apiVersion
|
|
105
|
+
? {
|
|
106
|
+
api_version: opts.apiVersion,
|
|
107
|
+
}
|
|
108
|
+
: {}),
|
|
96
109
|
enabled_events: (opts.enabledEvents ??
|
|
97
110
|
BETTER_STRIPE_WEBHOOK_EVENTS),
|
|
98
111
|
description: opts.description ?? "Created by better-stripe createWebhookEndpoint",
|
|
@@ -132,7 +145,9 @@ export async function setupEventDestination(stripe, _ctx, opts) {
|
|
|
132
145
|
const payloadType = opts.eventPayload ?? "thin";
|
|
133
146
|
const events = opts.enabledEvents ??
|
|
134
147
|
(payloadType === "thin"
|
|
135
|
-
?
|
|
148
|
+
? opts.apiVersion === STRIPE_CUSTOMER_PREVIEW_API_VERSION
|
|
149
|
+
? [...BETTER_STRIPE_CUSTOMER_ACCOUNT_EVENTS]
|
|
150
|
+
: [...BETTER_STRIPE_V2_WEBHOOK_EVENTS]
|
|
136
151
|
: [...BETTER_STRIPE_WEBHOOK_EVENTS]);
|
|
137
152
|
const name = opts.name ??
|
|
138
153
|
(payloadType === "thin" ? "better-stripe-v2" : "better-stripe");
|
|
@@ -145,6 +160,21 @@ export async function setupEventDestination(stripe, _ctx, opts) {
|
|
|
145
160
|
include: ["webhook_endpoint.url"],
|
|
146
161
|
});
|
|
147
162
|
const match = existing.data.find((d) => d.webhook_endpoint?.url === opts.url && d.event_payload === payloadType);
|
|
163
|
+
if (match &&
|
|
164
|
+
payloadType === "snapshot" &&
|
|
165
|
+
opts.apiVersion &&
|
|
166
|
+
match.snapshot_api_version !== opts.apiVersion)
|
|
167
|
+
throwStripeError("INVALID_CONFIGURATION", "Existing snapshot destination API version differs. Create a replacement destination with the selected version and configure its signing secret before retiring the old destination.");
|
|
168
|
+
if (match && opts.apiVersion === STRIPE_CUSTOMER_PREVIEW_API_VERSION) {
|
|
169
|
+
const scopes = new Set((match.events_from ?? []).map((scope) => scope === "self"
|
|
170
|
+
? "@self"
|
|
171
|
+
: scope === "other_accounts"
|
|
172
|
+
? "@accounts"
|
|
173
|
+
: scope));
|
|
174
|
+
const required = payloadType === "thin" ? ["@self", "@accounts"] : ["@self"];
|
|
175
|
+
if (required.some((scope) => !scopes.has(scope)))
|
|
176
|
+
throwStripeError("INVALID_CONFIGURATION", "Existing destination event scope differs. Create a replacement with the customer preview scopes before retiring the old destination.");
|
|
177
|
+
}
|
|
148
178
|
if (match) {
|
|
149
179
|
const updated = await stripe.v2.core.eventDestinations.update(match.id, {
|
|
150
180
|
name,
|
|
@@ -170,7 +200,16 @@ export async function setupEventDestination(stripe, _ctx, opts) {
|
|
|
170
200
|
type: "webhook_endpoint",
|
|
171
201
|
event_payload: payloadType,
|
|
172
202
|
enabled_events: events,
|
|
173
|
-
|
|
203
|
+
...(payloadType === "snapshot" && opts.apiVersion
|
|
204
|
+
? { snapshot_api_version: opts.apiVersion }
|
|
205
|
+
: {}),
|
|
206
|
+
events_from: opts.apiVersion === STRIPE_CUSTOMER_PREVIEW_API_VERSION
|
|
207
|
+
? payloadType === "thin"
|
|
208
|
+
? ["@self", "@accounts"]
|
|
209
|
+
: ["@self"]
|
|
210
|
+
: payloadType === "thin"
|
|
211
|
+
? ["self", "other_accounts"]
|
|
212
|
+
: ["self"],
|
|
174
213
|
webhook_endpoint: { url: opts.url },
|
|
175
214
|
include: ["webhook_endpoint.signing_secret", "webhook_endpoint.url"],
|
|
176
215
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhookEndpoints.js","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webhookEndpoints.js","sourceRoot":"","sources":["../../../src/client/utils/webhookEndpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AsyncHooks, AsyncHookCtx } from "../types.js";
|
|
2
|
+
import type { AsyncHookName } from "../types/triggers.js";
|
|
3
|
+
/** Route async webhook hooks through the shared public callback contract. */
|
|
4
|
+
export declare function buildAsyncHookRoutes(hooks: AsyncHooks | undefined): Record<AsyncHookName, ((ctx: AsyncHookCtx, doc: unknown) => Promise<void>) | undefined>;
|
|
5
|
+
//# sourceMappingURL=asyncHooks.d.ts.map
|