@arnaudjnn/billing-tools 0.26.2 → 0.27.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/dist/checkout.d.ts +22 -2
- package/dist/checkout.d.ts.map +1 -1
- package/dist/checkout.js +17 -0
- package/dist/checkout.js.map +1 -1
- package/package.json +1 -1
package/dist/checkout.d.ts
CHANGED
|
@@ -26,9 +26,29 @@ export declare function createSeatSubscription(opts: {
|
|
|
26
26
|
customerId?: string;
|
|
27
27
|
email?: string;
|
|
28
28
|
currency?: string;
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
29
|
+
/**
|
|
30
|
+
* Let Stripe compute the tax itself (Stripe Tax).
|
|
31
|
+
*
|
|
32
|
+
* CAVEAT: this requires the customer to ALREADY have a recognised address when
|
|
33
|
+
* the subscription is created — "The customer's location isn't recognized" —
|
|
34
|
+
* which a pay-then-provision flow doesn't have, because the address is
|
|
35
|
+
* collected by the form that the client secret mounts. Use it only when you
|
|
36
|
+
* collect a country BEFORE calling this; otherwise use `vat` below.
|
|
37
|
+
*/
|
|
31
38
|
automaticTax?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Apply a FIXED tax rate instead, so the invoice total matches a figure the UI
|
|
41
|
+
* already showed. Deterministic and needs no address up front, which is what a
|
|
42
|
+
* signup checkout needs; the trade is that it applies the same rate to
|
|
43
|
+
* everyone, so it's right for a single-country product and wrong for
|
|
44
|
+
* cross-border B2B (no reverse charge). Move to Stripe Tax once you collect the
|
|
45
|
+
* country first.
|
|
46
|
+
*/
|
|
47
|
+
vat?: {
|
|
48
|
+
percent: number;
|
|
49
|
+
country: string;
|
|
50
|
+
displayName?: string;
|
|
51
|
+
};
|
|
32
52
|
metadata?: Record<string, string>;
|
|
33
53
|
}): Promise<SeatSubscriptionResult>;
|
|
34
54
|
//# sourceMappingURL=checkout.d.ts.map
|
package/dist/checkout.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgB/D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAgB/D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAoElC"}
|
package/dist/checkout.js
CHANGED
|
@@ -29,6 +29,22 @@ export async function createSeatSubscription(opts) {
|
|
|
29
29
|
}
|
|
30
30
|
const customerId = opts.customerId ??
|
|
31
31
|
(await stripe.customers.create({ email: opts.email, metadata: opts.metadata })).id;
|
|
32
|
+
// Reuse a matching rate rather than creating one per checkout: Stripe tax
|
|
33
|
+
// rates are immutable and accumulate forever otherwise.
|
|
34
|
+
let defaultTaxRates;
|
|
35
|
+
if (opts.vat) {
|
|
36
|
+
const { percent, country, displayName } = opts.vat;
|
|
37
|
+
const existing = (await stripe.taxRates.list({ active: true, limit: 100 })).data.find((r) => r.percentage === percent && r.country === country && r.inclusive === false);
|
|
38
|
+
defaultTaxRates = [
|
|
39
|
+
existing?.id ??
|
|
40
|
+
(await stripe.taxRates.create({
|
|
41
|
+
display_name: displayName ?? "VAT",
|
|
42
|
+
percentage: percent,
|
|
43
|
+
country,
|
|
44
|
+
inclusive: false,
|
|
45
|
+
})).id,
|
|
46
|
+
];
|
|
47
|
+
}
|
|
32
48
|
const subscription = await stripe.subscriptions.create({
|
|
33
49
|
customer: customerId,
|
|
34
50
|
items,
|
|
@@ -36,6 +52,7 @@ export async function createSeatSubscription(opts) {
|
|
|
36
52
|
// Keep the card on file, so renewals don't re-prompt.
|
|
37
53
|
payment_settings: { save_default_payment_method: "on_subscription" },
|
|
38
54
|
...(opts.automaticTax ? { automatic_tax: { enabled: true } } : {}),
|
|
55
|
+
...(defaultTaxRates ? { default_tax_rates: defaultTaxRates } : {}),
|
|
39
56
|
metadata: opts.metadata,
|
|
40
57
|
// `confirmation_secret`, not the older `latest_invoice.payment_intent`: on
|
|
41
58
|
// current Stripe API versions the invoice exposes the secret directly and the
|
package/dist/checkout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA0BpE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arnaudjnn/billing-tools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
4
|
"description": "The get-paid engine for Stripe + WorkOS apps, for humans and AI agents. Drop-in API-key auth, token/credit + subscription billing, auth.md agent registration, and MPP machine payments, as MCP tools, a REST API, and a CLI. Framework-agnostic, storage-pluggable.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Arnaud Jeannin",
|