@arnaudjnn/billing-tools 0.15.0 → 0.17.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.
Files changed (48) hide show
  1. package/README.md +37 -0
  2. package/dist/adapters/workos-org.d.ts +5 -0
  3. package/dist/adapters/workos-org.d.ts.map +1 -1
  4. package/dist/adapters/workos-org.js +27 -0
  5. package/dist/adapters/workos-org.js.map +1 -1
  6. package/dist/agent-auth/index.d.ts +3 -2
  7. package/dist/agent-auth/index.d.ts.map +1 -1
  8. package/dist/agent-auth/index.js +11 -2
  9. package/dist/agent-auth/index.js.map +1 -1
  10. package/dist/auth.d.ts +1 -0
  11. package/dist/auth.d.ts.map +1 -1
  12. package/dist/auth.js +1 -1
  13. package/dist/auth.js.map +1 -1
  14. package/dist/billing.d.ts +11 -1
  15. package/dist/billing.d.ts.map +1 -1
  16. package/dist/billing.js +31 -1
  17. package/dist/billing.js.map +1 -1
  18. package/dist/create-billing.d.ts +17 -0
  19. package/dist/create-billing.d.ts.map +1 -1
  20. package/dist/create-billing.js +52 -2
  21. package/dist/create-billing.js.map +1 -1
  22. package/dist/index.d.ts +5 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/metering.d.ts +38 -0
  27. package/dist/metering.d.ts.map +1 -0
  28. package/dist/metering.js +58 -0
  29. package/dist/metering.js.map +1 -0
  30. package/dist/oauth-proxy/index.d.ts +51 -0
  31. package/dist/oauth-proxy/index.d.ts.map +1 -0
  32. package/dist/oauth-proxy/index.js +385 -0
  33. package/dist/oauth-proxy/index.js.map +1 -0
  34. package/dist/plans.d.ts +44 -4
  35. package/dist/plans.d.ts.map +1 -1
  36. package/dist/plans.js +65 -11
  37. package/dist/plans.js.map +1 -1
  38. package/dist/sync.d.ts.map +1 -1
  39. package/dist/sync.js +27 -4
  40. package/dist/sync.js.map +1 -1
  41. package/dist/topup.d.ts +43 -0
  42. package/dist/topup.d.ts.map +1 -0
  43. package/dist/topup.js +80 -0
  44. package/dist/topup.js.map +1 -0
  45. package/dist/types.d.ts +6 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js.map +1 -1
  48. package/package.json +1 -1
package/dist/plans.d.ts CHANGED
@@ -1,20 +1,52 @@
1
+ /** One seat type within a plan (e.g. `standard` vs `premium`). Each type has
2
+ * its own recurring per-seat price and included-token allowance, so a plan's
3
+ * subscription carries one line item per seat type (quantity = members of that
4
+ * type). Introduced for the Claude-style Standard/Premium seat model. */
5
+ export interface SeatTypeDef {
6
+ /** Per-seat recurring price (cents). 0 = free (no Stripe price). */
7
+ price: {
8
+ monthly: number;
9
+ yearly: number;
10
+ };
11
+ /** Included tokens granted per seat of THIS type, per billing cycle. */
12
+ includedTokens: number;
13
+ /** Optional cap on seats of this type (null/undefined = unlimited). */
14
+ seats?: number | null;
15
+ /** Optional display label. */
16
+ label?: string;
17
+ }
1
18
  export interface PlanDef {
2
19
  /** Max members per workspace. null = unlimited. */
3
20
  seats: number | null;
4
- /** Included tokens granted per seat, per billing cycle. */
21
+ /** Included tokens granted per seat, per billing cycle (flat model). */
5
22
  tokensPerSeat: number;
6
23
  /** Recurring price in the smallest currency unit (cents). 0 = free (no Stripe price). */
7
24
  price: {
8
25
  monthly: number;
9
26
  yearly: number;
10
27
  };
28
+ /** Optional multi-seat-type pricing. When present, `ensurePlans` mints one
29
+ * Stripe price per (plan, seatType, interval), the subscription carries one
30
+ * line item per seat type, and included tokens sum per type
31
+ * (`includedTokensByType`). When ABSENT the flat {seats, tokensPerSeat,
32
+ * price} model applies unchanged — existing consumers are unaffected. */
33
+ seatTypes?: Record<string, SeatTypeDef>;
34
+ /** How usage is metered against the plan's seats (default `per_seat`):
35
+ * • `per_seat` — each seat has its own per-cycle pack (user seats capped
36
+ * personally; the API seat is a shared pool + top-up).
37
+ * • `global` — pay per seat, but NO per-seat cap: all usage draws one
38
+ * committed workspace token pool (e.g. an Enterprise annual commitment). */
39
+ allowanceMode?: "per_seat" | "global";
11
40
  }
12
41
  export type PlansConfig = Record<string, PlanDef>;
13
42
  export type BillingInterval = "monthly" | "yearly";
14
- export declare const lookupKeyFor: (plan: string, interval: BillingInterval) => string;
43
+ export declare const DEFAULT_SEAT_TYPES: Record<string, SeatTypeDef>;
44
+ export declare const lookupKeyFor: (plan: string, interval: BillingInterval, seatType?: string) => string;
15
45
  export interface EnsuredPrice {
16
46
  plan: string;
17
47
  interval: BillingInterval;
48
+ /** Set only for seat-typed plans. */
49
+ seatType?: string;
18
50
  priceId: string;
19
51
  productId: string;
20
52
  amount: number;
@@ -28,11 +60,19 @@ export declare function ensurePlans(plans: PlansConfig, opts?: {
28
60
  }): Promise<EnsuredPrice[]>;
29
61
  /** Resolve the current Stripe price id for a plan + interval (via lookup_key).
30
62
  * Returns null for a free/absent price. */
31
- export declare function planPriceId(plan: string, interval: BillingInterval): Promise<string | null>;
63
+ export declare function planPriceId(plan: string, interval: BillingInterval, seatType?: string): Promise<string | null>;
32
64
  /** Reverse-map a Stripe price id → plan key (via the price's metadata). */
33
65
  export declare function planForPriceId(priceId: string): Promise<string | null>;
66
+ /** Reverse-map a Stripe price id → its seat type (via metadata), or null for a
67
+ * flat (non-seat-typed) price. */
68
+ export declare function seatTypeForPriceId(priceId: string): Promise<string | null>;
34
69
  /** Seat limit for a plan (null = unlimited, undefined plan = null). */
35
70
  export declare function seatLimit(plans: PlansConfig, plan: string): number | null;
36
- /** Included tokens for `seatCount` members on a plan (per cycle). */
71
+ /** Included tokens for `seatCount` members on a plan (per cycle, flat model). */
37
72
  export declare function includedTokens(plans: PlansConfig, plan: string, seatCount: number): number;
73
+ /** Included tokens for a seat-typed plan given member counts per seat type
74
+ * (per cycle): Σ seatTypes[t].includedTokens × counts[t]. Falls back to the
75
+ * flat `includedTokens` (over the total member count) for plans without seat
76
+ * types, so callers can use it uniformly. */
77
+ export declare function includedTokensByType(plans: PlansConfig, plan: string | null, counts: Record<string, number>): number;
38
78
  //# sourceMappingURL=plans.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,OAAO;IACtB,mDAAmD;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AASnD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,UAAU,eAAe,KAAG,MAChD,CAAC;AAExB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAsBD;;kFAEkF;AAClF,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CAsDzB;AAwBD;4CAC4C;AAC5C,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,2EAA2E;AAC3E,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO5E;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,MAAM,CAIR"}
1
+ {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"AAWA;;;0EAG0E;AAC1E,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,wEAAwE;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,mDAAmD;IACnD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C;;;;8EAI0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxC;;;;oFAIgF;IAChF,aAAa,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACvC;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAClD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,CAAC;AAQnD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAI1D,CAAC;AASF,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,UAAU,eAAe,EACzB,WAAW,MAAM,KAChB,MAAgF,CAAC;AAEpF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAsBD;;kFAEkF;AAClF,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,YAAY,EAAE,CAAC,CAmEzB;AAwBD;4CAC4C;AAC5C,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAED,2EAA2E;AAC3E,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO5E;AAED;mCACmC;AACnC,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOhF;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,MAAM,CAIR;AAED;;;8CAG8C;AAC9C,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAYR"}
package/dist/plans.js CHANGED
@@ -1,11 +1,22 @@
1
1
  import { getStripe } from "./billing.js";
2
+ // Library DEFAULT seat types, priced in USD (the lib's default currency — see
3
+ // ensurePlans `opts.currency ?? "usd"`). Consumers use these as-is or override
4
+ // (scartoffie, for instance, sets currency "eur" and its own EUR amounts).
5
+ // Amounts are cents; `yearly` is the annual total per seat. The `api` seat is
6
+ // the shared agent/API pool (≈ 5× a premium seat). `includedTokens` are example
7
+ // packs — tune per product.
8
+ export const DEFAULT_SEAT_TYPES = {
9
+ standard: { label: "Standard", price: { monthly: 2500, yearly: 24000 }, includedTokens: 1000 }, // $25/mo · $20/mo annually
10
+ premium: { label: "Premium", price: { monthly: 12500, yearly: 120000 }, includedTokens: 5000 }, // $125/mo · $100/mo annually
11
+ api: { label: "API", price: { monthly: 62500, yearly: 600000 }, includedTokens: 25000, seats: 1 }, // ≈ 5× premium, one per workspace
12
+ };
2
13
  const INTERVALS = ["monthly", "yearly"];
3
14
  const STRIPE_INTERVAL = {
4
15
  monthly: "month",
5
16
  yearly: "year",
6
17
  };
7
18
  const MANAGED_BY = "billing-tools";
8
- export const lookupKeyFor = (plan, interval) => `${plan}_${interval}`;
19
+ export const lookupKeyFor = (plan, interval, seatType) => (seatType ? `${plan}_${seatType}_${interval}` : `${plan}_${interval}`);
9
20
  const cap = (s) => s.charAt(0).toUpperCase() + s.slice(1);
10
21
  /** The single managed Stripe product for a plan (reuse across price versions),
11
22
  * discovered via any existing managed price's product. */
@@ -32,11 +43,25 @@ export async function ensurePlans(plans, opts = {}) {
32
43
  const wanted = new Set();
33
44
  for (const [plan, def] of Object.entries(plans)) {
34
45
  let productId = await findPlanProduct(stripe, plan);
35
- for (const interval of INTERVALS) {
36
- const amount = def.price[interval];
46
+ // One spec per Stripe price to ensure. Flat plans: one per interval.
47
+ // Seat-typed plans: one per (seatType, interval). One managed product per
48
+ // plan holds all of a plan's prices.
49
+ const specs = [];
50
+ if (def.seatTypes) {
51
+ for (const [seatType, st] of Object.entries(def.seatTypes)) {
52
+ for (const interval of INTERVALS) {
53
+ specs.push({ interval, amount: st.price[interval], seatType });
54
+ }
55
+ }
56
+ }
57
+ else {
58
+ for (const interval of INTERVALS)
59
+ specs.push({ interval, amount: def.price[interval] });
60
+ }
61
+ for (const { interval, amount, seatType } of specs) {
37
62
  if (!amount || amount <= 0)
38
- continue; // free interval — no Stripe price
39
- const lookupKey = lookupKeyFor(plan, interval);
63
+ continue; // free interval/seat — no Stripe price
64
+ const lookupKey = lookupKeyFor(plan, interval, seatType);
40
65
  wanted.add(lookupKey);
41
66
  const existing = (await stripe.prices.list({ lookup_keys: [lookupKey], active: true, limit: 1 })).data[0];
42
67
  const matches = existing &&
@@ -46,7 +71,7 @@ export async function ensurePlans(plans, opts = {}) {
46
71
  if (existing && matches) {
47
72
  productId =
48
73
  typeof existing.product === "string" ? existing.product : existing.product.id;
49
- result.push({ plan, interval, priceId: existing.id, productId, amount, lookupKey });
74
+ result.push({ plan, interval, seatType, priceId: existing.id, productId, amount, lookupKey });
50
75
  continue;
51
76
  }
52
77
  if (!productId) {
@@ -65,11 +90,11 @@ export async function ensurePlans(plans, opts = {}) {
65
90
  recurring: { interval: STRIPE_INTERVAL[interval] },
66
91
  lookup_key: lookupKey,
67
92
  transfer_lookup_key: true,
68
- metadata: { managedBy: MANAGED_BY, plan, interval },
93
+ metadata: { managedBy: MANAGED_BY, plan, interval, ...(seatType ? { seatType } : {}) },
69
94
  });
70
95
  if (existing)
71
96
  await stripe.prices.update(existing.id, { active: false });
72
- result.push({ plan, interval, priceId: created.id, productId, amount, lookupKey });
97
+ result.push({ plan, interval, seatType, priceId: created.id, productId, amount, lookupKey });
73
98
  }
74
99
  }
75
100
  await archiveOrphans(stripe, wanted);
@@ -100,9 +125,9 @@ async function archiveOrphans(stripe, wanted) {
100
125
  }
101
126
  /** Resolve the current Stripe price id for a plan + interval (via lookup_key).
102
127
  * Returns null for a free/absent price. */
103
- export async function planPriceId(plan, interval) {
128
+ export async function planPriceId(plan, interval, seatType) {
104
129
  const r = await getStripe().prices.list({
105
- lookup_keys: [lookupKeyFor(plan, interval)],
130
+ lookup_keys: [lookupKeyFor(plan, interval, seatType)],
106
131
  active: true,
107
132
  limit: 1,
108
133
  });
@@ -118,15 +143,44 @@ export async function planForPriceId(priceId) {
118
143
  return null;
119
144
  }
120
145
  }
146
+ /** Reverse-map a Stripe price id → its seat type (via metadata), or null for a
147
+ * flat (non-seat-typed) price. */
148
+ export async function seatTypeForPriceId(priceId) {
149
+ try {
150
+ const price = await getStripe().prices.retrieve(priceId);
151
+ return price.metadata?.seatType ?? null;
152
+ }
153
+ catch {
154
+ return null;
155
+ }
156
+ }
121
157
  /** Seat limit for a plan (null = unlimited, undefined plan = null). */
122
158
  export function seatLimit(plans, plan) {
123
159
  return plans[plan]?.seats ?? null;
124
160
  }
125
- /** Included tokens for `seatCount` members on a plan (per cycle). */
161
+ /** Included tokens for `seatCount` members on a plan (per cycle, flat model). */
126
162
  export function includedTokens(plans, plan, seatCount) {
127
163
  const def = plans[plan];
128
164
  if (!def)
129
165
  return 0;
130
166
  return def.tokensPerSeat * Math.max(1, seatCount);
131
167
  }
168
+ /** Included tokens for a seat-typed plan given member counts per seat type
169
+ * (per cycle): Σ seatTypes[t].includedTokens × counts[t]. Falls back to the
170
+ * flat `includedTokens` (over the total member count) for plans without seat
171
+ * types, so callers can use it uniformly. */
172
+ export function includedTokensByType(plans, plan, counts) {
173
+ const def = plan ? plans[plan] : undefined;
174
+ if (!def)
175
+ return 0;
176
+ if (!def.seatTypes) {
177
+ const total = Object.values(counts).reduce((a, b) => a + b, 0);
178
+ return includedTokens(plans, plan, total);
179
+ }
180
+ let sum = 0;
181
+ for (const [type, st] of Object.entries(def.seatTypes)) {
182
+ sum += st.includedTokens * (counts[type] ?? 0);
183
+ }
184
+ return sum;
185
+ }
132
186
  //# sourceMappingURL=plans.js.map
package/dist/plans.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAajE;wEACwE;AACxE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB;kFAC8E;IAC9E,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QACN;8CACsC;QACtC,aAAa,CAAC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD;;mFAE2E;QAC3E,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC;CACH;AA6CD,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,OAAO,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD;;;;8DAI0D;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,GAAG,MAAM,IAAI,CAAC;CACnF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CA4IvE;AAED;;;;sCAIsC;AACtC,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7B,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAmBzC"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAajE;wEACwE;AACxE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB;kFAC8E;IAC9E,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QACN;8CACsC;QACtC,aAAa,CAAC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD;;mFAE2E;QAC3E,eAAe,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAChD,CAAC;CACH;AA6CD,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,OAAO,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD;;;;8DAI0D;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,GAAG,MAAM,IAAI,CAAC;CACnF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAmKvE;AAED;;;;sCAIsC;AACtC,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7B,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAmBzC"}
package/dist/sync.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { pollStripeEvents, pollWorkOSEvents } from "./events.js";
2
2
  import { creditTokens, getStripe } from "./billing.js";
3
- import { includedTokens, planForPriceId } from "./plans.js";
3
+ import { includedTokens, includedTokensByType, planForPriceId, } from "./plans.js";
4
4
  const CURSOR_TABLE = "billing_sync_cursors";
5
5
  // A CursorStore backed by a self-managed table via the app's query executor.
6
6
  function queryCursorStore(query) {
@@ -79,16 +79,39 @@ export function createBillingSync(opts) {
79
79
  const orgId = sub.metadata?.org_id;
80
80
  if (!orgId)
81
81
  return;
82
+ // All line items of a subscription share one plan (only the seat type
83
+ // varies), so the first item resolves the plan.
82
84
  const priceId = sub.items?.data?.[0]?.price?.id;
83
85
  const plan = priceId ? await planForPriceId(priceId) : null;
84
86
  if (!plan)
85
87
  return; // unknown price → no grant
86
- const seats = await opts.adapter.memberCount(orgId);
87
- const tokens = includedTokens(opts.plans, plan, seats);
88
+ const planDef = opts.plans[plan];
89
+ // Seat-typed plan → grant from the PURCHASED seats (one line item per
90
+ // seat type, quantity = seats of that type read off the price metadata),
91
+ // so tokens track what's actually paid for. Flat plan → per active member.
92
+ let tokens;
93
+ let seatSummary;
94
+ if (planDef?.seatTypes) {
95
+ const counts = {};
96
+ for (const item of sub.items.data) {
97
+ const seatType = item.price?.metadata?.seatType;
98
+ if (!seatType)
99
+ continue;
100
+ counts[seatType] = (counts[seatType] ?? 0) + (item.quantity ?? 0);
101
+ }
102
+ tokens = includedTokensByType(opts.plans, plan, counts);
103
+ const totalSeats = Object.values(counts).reduce((a, b) => a + b, 0);
104
+ seatSummary = `${totalSeats} seat${totalSeats === 1 ? "" : "s"}`;
105
+ }
106
+ else {
107
+ const seats = await opts.adapter.memberCount(orgId);
108
+ tokens = includedTokens(opts.plans, plan, seats);
109
+ seatSummary = `${seats} seat${seats === 1 ? "" : "s"}`;
110
+ }
88
111
  if (tokens > 0) {
89
112
  // Idempotency key on the invoice id: an overlapping/replayed poll grants
90
113
  // the per-cycle tokens exactly once.
91
- await creditTokens(invoice.customer, tokens, `Included tokens: ${plan} (${seats} seat${seats === 1 ? "" : "s"})`, currency, `credit:invoice:${invoice.id}`);
114
+ await creditTokens(invoice.customer, tokens, `Included tokens: ${plan} (${seatSummary})`, currency, `credit:invoice:${invoice.id}`);
92
115
  }
93
116
  }
94
117
  if (event.type === "invoice.payment_failed") {
package/dist/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,cAAc,GAEf,MAAM,YAAY,CAAC;AAIpB,MAAM,YAAY,GAAG,sBAAsB,CAAC;AA0C5C,6EAA6E;AAC7E,SAAS,gBAAgB,CAAC,KAAkB;IAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,KAAK,CACT,8BAA8B,YAAY,wFAAwF,EAClI,EAAE,CACH,CAAC;QACF,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,MAAM;YACd,MAAM,MAAM,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,sBAAsB,YAAY,oBAAoB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACxF,OAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAA6B,IAAI,IAAI,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM;YACtB,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO;YAC5B,MAAM,MAAM,EAAE,CAAC;YACf,MAAM,KAAK,CACT,eAAe,YAAY;4EACyC,EACpE,CAAC,MAAM,EAAE,MAAM,CAAC,CACjB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG;IACnB,+BAA+B;IAC/B,+BAA+B;IAC/B,+BAA+B;IAC/B,cAAc;IACd,wBAAwB;CACzB,CAAC;AACF,MAAM,aAAa,GAAG;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,cAAc;IACd,cAAc;CACf,CAAC;AAaF,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3D,KAAK,UAAU,YAAY,CAAC,KAAmB;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAA+D,CAAC;YACvF,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,KAAK,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;gBACnD,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;oBACxC,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,UAAU;oBAClB,cAAc,EAAE,IAAI;oBACpB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBACxC,IAAI,EAAE,IAAI,IAAI,SAAS;gBACvB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,cAAc,EAAE,GAAG,CAAC,EAAE;gBACtB,SAAS,EAAE,GAAG,CAAC,kBAAkB;oBAC/B,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;oBACvD,CAAC,CAAC,IAAI;aACT,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAI1B,CAAC;YACF,IAAI,OAAO,CAAC,cAAc,KAAK,qBAAqB,IAAI,OAAO,CAAC,cAAc,KAAK,oBAAoB;gBAAE,OAAO;YAChH,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO;YACvD,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,sEAAsE;YACtE,gDAAgD;YAChD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,2BAA2B;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjC,sEAAsE;YACtE,yEAAyE;YACzE,2EAA2E;YAC3E,IAAI,MAAc,CAAC;YACnB,IAAI,WAAmB,CAAC;YACxB,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;gBACvB,MAAM,MAAM,GAA2B,EAAE,CAAC;gBAC1C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBAChD,IAAI,CAAC,QAAQ;wBAAE,SAAS;oBACxB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;gBACpE,CAAC;gBACD,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpE,WAAW,GAAG,GAAG,UAAU,QAAQ,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACpD,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACjD,WAAW,GAAG,GAAG,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACzD,CAAC;YAED,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,yEAAyE;gBACzE,qCAAqC;gBACrC,MAAM,YAAY,CAChB,OAAO,CAAC,QAAQ,EAChB,MAAM,EACN,oBAAoB,IAAI,KAAK,WAAW,GAAG,EAC3C,QAAQ,EACR,kBAAkB,OAAO,CAAC,EAAE,EAAE,CAC/B,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAA2D,CAAC;YACvF,IAAI,CAAC,OAAO,CAAC,YAAY;gBAAE,OAAO,CAAC,kDAAkD;YACrF,MAAM,GAAG,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAE1E,CAAC;YACF,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE;gBACxC,MAAM,EAAE,UAAU;gBAClB,cAAc,EAAE,GAAG,CAAC,EAAE;gBACtB,SAAS,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;aACjG,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,KAAuC;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,EAAE;YAAE,OAAO;QACtB,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,sBAAsB;gBACzB,MAAM,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAA+B,CAAC,CAAC;gBAC7E,MAAM;YACR,KAAK,sBAAsB;gBACzB,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAA+B,CAAC,CAAC;gBAC9E,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3C,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,MAAM,CAAC,GAAG,MAAM,gBAAgB,CAAC;YAC/B,KAAK,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,gBAAgB,CAAC;YAC/B,KAAK,EAAE,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,SAAS,KAAK,CAAC,OAAgE,EAAE;QAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,OAAO,IAAI,OAAO;gBAAE,OAAO,CAAC,gBAAgB;YAChD,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,OAAO,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;oBAC7B,OAAO,CAAC,KAAK,CAAC,kBAAmB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;oBAAS,CAAC;gBACT,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC7C,mDAAmD;QAClD,MAAiC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC7C,KAAK,IAAI,EAAE,CAAC,CAAC,uBAAuB;QACpC,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,IAAI,CAAC;YACf,aAAa,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED;;;;sCAIsC;AACtC,MAAM,UAAU,eAAe,CAC7B,IAAiB,EACjB,OAA4B,EAAE;IAE9B,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,GACR,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACrF,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE;oBAC7D,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { BillingAdapter, ResolvedConfig } from "./types.js";
2
+ export interface TopUpRequest {
3
+ id: string;
4
+ memberId: string;
5
+ amount: number;
6
+ cycle: string;
7
+ status: "pending" | "approved" | "denied";
8
+ createdAt: string;
9
+ }
10
+ /** A user requests extra tokens for the current cycle (owner must approve). */
11
+ export declare function requestTopUp(adapter: BillingAdapter, orgId: string, req: {
12
+ id: string;
13
+ memberId: string;
14
+ amount: number;
15
+ cycle: string;
16
+ createdAt: string;
17
+ }): Promise<void>;
18
+ export declare function listTopUpRequests(adapter: BillingAdapter, orgId: string): Promise<TopUpRequest[]>;
19
+ /** Owner/admin approves a request → adds its amount to the member's cycle grant. */
20
+ export declare function approveTopUp(adapter: BillingAdapter, orgId: string, actingUserId: string, requestId: string): Promise<{
21
+ ok: boolean;
22
+ reason?: "forbidden" | "not_found";
23
+ }>;
24
+ export declare function denyTopUp(adapter: BillingAdapter, orgId: string, actingUserId: string, requestId: string): Promise<{
25
+ ok: boolean;
26
+ reason?: "forbidden" | "not_found";
27
+ }>;
28
+ /** A member's approved extra allowance for a cycle. The consumer reads this and
29
+ * passes it into `meterUsage` as `extraAllowance` so the meter adds it to the
30
+ * seat pack. */
31
+ export declare function extraAllowance(adapter: BillingAdapter, orgId: string, memberId: string, cycle: string): Promise<number>;
32
+ /** Enable/disable auto-top-up (auto-reload) for the shared reserve — admin only.
33
+ * The card itself is added via the Stripe billing portal / a saved payment
34
+ * method; this just sets the reload threshold + target. */
35
+ export declare function setAutoTopUp(adapter: BillingAdapter, _config: ResolvedConfig, orgId: string, actingUserId: string, opts: {
36
+ threshold: number;
37
+ reloadTo: number;
38
+ enabled: boolean;
39
+ }): Promise<{
40
+ ok: boolean;
41
+ reason?: "forbidden" | "no_billing";
42
+ }>;
43
+ //# sourceMappingURL=topup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topup.d.ts","sourceRoot":"","sources":["../src/topup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAYjE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAmBD,+EAA+E;AAC/E,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtF,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAEvG;AAED,oFAAoF;AACpF,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAAA;CAAE,CAAC,CAY9D;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAAA;CAAE,CAAC,CAQ9D;AAED;;iBAEiB;AACjB,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;4DAE4D;AAC5D,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC9D,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,YAAY,CAAA;CAAE,CAAC,CAM/D"}
package/dist/topup.js ADDED
@@ -0,0 +1,80 @@
1
+ import { getBillingCustomerId, setAutoReloadSettings } from "./billing.js";
2
+ // Top-up + admin helpers, stored entirely in the org's WorkOS metadata via the
3
+ // adapter (no new database). Two things live here:
4
+ // • User-seat top-up requests → owner/admin approval → a per-member EXTRA
5
+ // ALLOWANCE for the current cycle that the meter adds on top of the seat pack.
6
+ // • Admin-gated auto-top-up (auto-reload) for the shared reserve.
7
+ const REQUESTS_KEY = "topUpRequests"; // org metadata → JSON TopUpRequest[]
8
+ const GRANTS_KEY = "topUpGrants"; // org metadata → JSON { [memberId]: { [cycle]: tokens } }
9
+ const MAX_STORED_REQUESTS = 50;
10
+ async function readJson(adapter, orgId, key, fallback) {
11
+ const md = (await adapter.getOrgMetadata?.(orgId)) ?? {};
12
+ const raw = md[key];
13
+ if (!raw)
14
+ return fallback;
15
+ try {
16
+ return JSON.parse(raw);
17
+ }
18
+ catch {
19
+ return fallback;
20
+ }
21
+ }
22
+ async function writeJson(adapter, orgId, key, value) {
23
+ await adapter.setOrgMetadata?.(orgId, { [key]: JSON.stringify(value) });
24
+ }
25
+ /** A user requests extra tokens for the current cycle (owner must approve). */
26
+ export async function requestTopUp(adapter, orgId, req) {
27
+ const list = await readJson(adapter, orgId, REQUESTS_KEY, []);
28
+ list.push({ ...req, status: "pending" });
29
+ await writeJson(adapter, orgId, REQUESTS_KEY, list.slice(-MAX_STORED_REQUESTS));
30
+ }
31
+ export async function listTopUpRequests(adapter, orgId) {
32
+ return readJson(adapter, orgId, REQUESTS_KEY, []);
33
+ }
34
+ /** Owner/admin approves a request → adds its amount to the member's cycle grant. */
35
+ export async function approveTopUp(adapter, orgId, actingUserId, requestId) {
36
+ if (!(await adapter.isAdmin?.(orgId, actingUserId)))
37
+ return { ok: false, reason: "forbidden" };
38
+ const list = await readJson(adapter, orgId, REQUESTS_KEY, []);
39
+ const req = list.find((r) => r.id === requestId);
40
+ if (!req || req.status !== "pending")
41
+ return { ok: false, reason: "not_found" };
42
+ req.status = "approved";
43
+ const grants = await readJson(adapter, orgId, GRANTS_KEY, {});
44
+ grants[req.memberId] = grants[req.memberId] ?? {};
45
+ grants[req.memberId][req.cycle] = (grants[req.memberId][req.cycle] ?? 0) + req.amount;
46
+ await writeJson(adapter, orgId, REQUESTS_KEY, list);
47
+ await writeJson(adapter, orgId, GRANTS_KEY, grants);
48
+ return { ok: true };
49
+ }
50
+ export async function denyTopUp(adapter, orgId, actingUserId, requestId) {
51
+ if (!(await adapter.isAdmin?.(orgId, actingUserId)))
52
+ return { ok: false, reason: "forbidden" };
53
+ const list = await readJson(adapter, orgId, REQUESTS_KEY, []);
54
+ const req = list.find((r) => r.id === requestId);
55
+ if (!req || req.status !== "pending")
56
+ return { ok: false, reason: "not_found" };
57
+ req.status = "denied";
58
+ await writeJson(adapter, orgId, REQUESTS_KEY, list);
59
+ return { ok: true };
60
+ }
61
+ /** A member's approved extra allowance for a cycle. The consumer reads this and
62
+ * passes it into `meterUsage` as `extraAllowance` so the meter adds it to the
63
+ * seat pack. */
64
+ export async function extraAllowance(adapter, orgId, memberId, cycle) {
65
+ const grants = await readJson(adapter, orgId, GRANTS_KEY, {});
66
+ return grants[memberId]?.[cycle] ?? 0;
67
+ }
68
+ /** Enable/disable auto-top-up (auto-reload) for the shared reserve — admin only.
69
+ * The card itself is added via the Stripe billing portal / a saved payment
70
+ * method; this just sets the reload threshold + target. */
71
+ export async function setAutoTopUp(adapter, _config, orgId, actingUserId, opts) {
72
+ if (!(await adapter.isAdmin?.(orgId, actingUserId)))
73
+ return { ok: false, reason: "forbidden" };
74
+ const customerId = await getBillingCustomerId(adapter, orgId);
75
+ if (!customerId)
76
+ return { ok: false, reason: "no_billing" };
77
+ await setAutoReloadSettings(customerId, opts.threshold, opts.reloadTo, opts.enabled);
78
+ return { ok: true };
79
+ }
80
+ //# sourceMappingURL=topup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topup.js","sourceRoot":"","sources":["../src/topup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG3E,+EAA+E;AAC/E,mDAAmD;AACnD,4EAA4E;AAC5E,mFAAmF;AACnF,oEAAoE;AAEpE,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,qCAAqC;AAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,0DAA0D;AAC5F,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAa/B,KAAK,UAAU,QAAQ,CAAI,OAAuB,EAAE,KAAa,EAAE,GAAW,EAAE,QAAW;IACzF,MAAM,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAuB,EAAE,KAAa,EAAE,GAAW,EAAE,KAAc;IAC1F,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,KAAa,EACb,GAAuF;IAEvF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAiB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAuB,EAAE,KAAa;IAC5E,OAAO,QAAQ,CAAiB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,KAAa,EACb,YAAoB,EACpB,SAAiB;IAEjB,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAiB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChF,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;IACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAS,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;IACtF,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAuB,EACvB,KAAa,EACb,YAAoB,EACpB,SAAiB;IAEjB,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC/F,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAiB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAChF,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;IACtB,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;iBAEiB;AACjB,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,KAAa,EACb,QAAgB,EAChB,KAAa;IAEb,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAS,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;4DAE4D;AAC5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,OAAuB,EACvB,KAAa,EACb,YAAoB,EACpB,IAA+D;IAE/D,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC/F,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC5D,MAAM,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -52,6 +52,12 @@ export interface BillingAdapter {
52
52
  }): Promise<{
53
53
  orgId: string;
54
54
  }>;
55
+ /** Read the org's free-form metadata map (small key→string store). */
56
+ getOrgMetadata?(orgId: string): Promise<Record<string, string>>;
57
+ /** Merge a patch into the org metadata (null value = delete the key). */
58
+ setOrgMetadata?(orgId: string, patch: Record<string, string | null>): Promise<void>;
59
+ /** Whether a user is an admin/owner of the org (gates auto-top-up + approvals). */
60
+ isAdmin?(orgId: string, userId: string): Promise<boolean>;
55
61
  }
56
62
  export interface BillingConfig {
57
63
  /** Welcome credit granted on first Stripe customer creation. Default 100. */
@@ -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/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,mBAAmB;AA0DnB,MAAM,UAAU,aAAa,CAAC,CAAgB;IAC5C,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG;QAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;QAC7B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;mDAMmD;AACnD,MAAM,UAAU,sBAAsB,CACpC,UAA0B,EAC1B,MAAM,GAAG,sBAAsB;IAE/B,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACvC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,mBAAmB;AAsEnB,MAAM,UAAU,aAAa,CAAC,CAAgB;IAC5C,OAAO;QACL,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG;QAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,KAAK;QAC7B,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;mDAMmD;AACnD,MAAM,UAAU,sBAAsB,CACpC,UAA0B,EAC1B,MAAM,GAAG,sBAAsB;IAE/B,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACvC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arnaudjnn/billing-tools",
3
- "version": "0.15.0",
3
+ "version": "0.17.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",