@whooshbang/contract-mock 2.0.0-rc.6 → 2.0.0-rc.7

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 CHANGED
@@ -5,6 +5,12 @@ recorded here.
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## 2.0.0-rc.7
9
+
10
+ ### Changed
11
+
12
+ - Deterministic in-app card, credit purchase, receipt address, invoice history and Team and Agency subscription-change scenarios through the rc.7 contract, including undoing a scheduled change (FXO-2941).
13
+
8
14
  ## 2.0.0-rc.6
9
15
 
10
16
  ### Added
package/dist/billing.d.ts CHANGED
@@ -1,13 +1,10 @@
1
- import type { AutoTopUpSettings, UpdateAutoTopUpSettingsRequest, AutoTopUpSetup, BillingAccount, BillingEntitlements, BillingProjectSlots, ContractValidator, CreateSubscriptionCheckoutRequest, Problem, ProblemCode, Project, ProjectAttribution, SubscriptionCheckout, SubscriptionChange, WalletCheckout } from "@whooshbang/contracts";
1
+ import type { AutoTopUpSettings, UpdateAutoTopUpSettingsRequest, BillingAccount, BillingEntitlements, BillingInvoiceCollection, BillingProjectSlots, CardSetup, ContractValidator, CreditPurchase, Problem, ProblemCode, Project, ProjectAttribution, SubscriptionChange, SubscriptionSelection } from "@whooshbang/contracts";
2
2
  import type { Hono } from "hono";
3
3
  import type { ContractMockBillingOptions, OrganizationScope } from "./types.js";
4
- interface CheckoutState {
5
- readonly organizationId: string;
6
- readonly resource: WalletCheckout | SubscriptionCheckout;
7
- readonly purchaseCents?: number;
8
- readonly selection?: CreateSubscriptionCheckoutRequest;
9
- readonly selectedOffers?: BillingEntitlements["offers"];
10
- applied: boolean;
4
+ interface ChangeState {
5
+ organizationId: string;
6
+ resource: SubscriptionChange;
7
+ selectedOffers: BillingEntitlements["offers"];
11
8
  }
12
9
  /** Local, isolated financial fixtures. All state resets with the mock. The
13
10
  * production service independently verifies Stripe objects and signatures. */
@@ -15,18 +12,17 @@ export declare class MockBillingState {
15
12
  private readonly options;
16
13
  readonly cardSetups: Map<string, {
17
14
  organizationId: string;
18
- revision: number;
19
- resource: AutoTopUpSetup;
20
- applied: boolean;
15
+ resource: CardSetup;
21
16
  }>;
22
- private readonly automaticSettings;
23
- private readonly accounts;
24
- readonly checkouts: Map<string, CheckoutState>;
25
- readonly changes: Map<string, {
17
+ readonly purchases: Map<string, {
26
18
  organizationId: string;
27
- resource: SubscriptionChange;
28
- selectedOffers: BillingEntitlements["offers"];
19
+ resource: CreditPurchase;
20
+ createdAt: string;
29
21
  }>;
22
+ private readonly automaticSettings;
23
+ private readonly accounts;
24
+ readonly changes: Map<string, ChangeState>;
25
+ private readonly invoices;
30
26
  readonly attribution: Map<string, boolean>;
31
27
  readonly replays: Map<string, {
32
28
  fingerprint: string;
@@ -36,19 +32,26 @@ export declare class MockBillingState {
36
32
  }>;
37
33
  readonly offers: BillingEntitlements["offers"];
38
34
  private sequence;
39
- readAutoTopUp(organizationId: string): AutoTopUpSettings;
40
- autoTopUpRevision(organizationId: string): number;
41
- updateAutoTopUp(organizationId: string, input: UpdateAutoTopUpSettingsRequest): AutoTopUpSettings;
42
- createCardSetup(organizationId: string): AutoTopUpSetup | null;
43
- reconcileCardSetup(organizationId: string, id: string): "applied" | "unpaid" | "ignored";
44
35
  constructor(options?: ContractMockBillingOptions);
36
+ private id;
45
37
  private account;
46
- readAccount(organizationId: string): BillingAccount;
38
+ private record;
39
+ private outcome;
40
+ readAccount(organizationId: string, now?: string): BillingAccount;
41
+ setReceiptEmail(organizationId: string, email: string | null): void;
42
+ createCardSetup(organizationId: string): CardSetup;
43
+ reconcileCardSetup(organizationId: string, id: string): CardSetup | null;
44
+ createCreditPurchase(organizationId: string, purchaseCents: number, now: string): CreditPurchase | "card_required";
45
+ settlePurchase(organizationId: string, id: string): CreditPurchase | null;
46
+ listInvoices(organizationId: string, page: number, limit: number): BillingInvoiceCollection;
47
+ readAutoTopUp(organizationId: string): AutoTopUpSettings;
48
+ updateAutoTopUp(organizationId: string, input: UpdateAutoTopUpSettingsRequest): AutoTopUpSettings;
47
49
  private changeOffers;
48
50
  private selectionTotal;
49
- createChange(organizationId: string, selection: CreateSubscriptionCheckoutRequest, now: string): SubscriptionChange | null;
51
+ createChange(organizationId: string, selection: SubscriptionSelection, now: string): SubscriptionChange | null;
52
+ private apply;
50
53
  settleChange(organizationId: string, id: string, now: string): SubscriptionChange | null;
51
- confirmChange(organizationId: string, id: string, charge: string, now: string): SubscriptionChange | null;
54
+ confirmChange(organizationId: string, id: string, charge: string, now: string): SubscriptionChange | "card_required" | null;
52
55
  readEntitlements(organizationId: string, now: string): BillingEntitlements;
53
56
  readAttribution(organizationId: string, projectId: string, now: string): ProjectAttribution;
54
57
  readSlots(organizationId: string, projects: readonly Project[], now: string): BillingProjectSlots;
@@ -58,8 +61,6 @@ export declare class MockBillingState {
58
61
  * answers never call this function, so retries and later failures do not debit. */
59
62
  hasCoreFunding(organizationId: string, now: string): boolean;
60
63
  fundLive(organizationId: string, sharedEmail: boolean, now: string): "wallet_insufficient" | "email_credit_insufficient" | null;
61
- createCheckout(organizationId: string, selection: number | CreateSubscriptionCheckoutRequest): CheckoutState | null;
62
- reconcile(checkout: CheckoutState, now: string): "applied" | "unpaid" | "ignored";
63
64
  }
64
65
  interface BillingHooks {
65
66
  state(): MockBillingState;
@@ -71,7 +72,7 @@ interface BillingHooks {
71
72
  reply<T>(body: T, validator: ContractValidator<T>, status?: number): Response;
72
73
  read<T>(request: Request, validator: ContractValidator<T>): Promise<T | Response>;
73
74
  }
74
- /** Register only published public resources. Synthetic vendor completion is
75
- * driven by a programmatic fixture, never a caller-supplied payment flag. */
75
+ /** Register only published public resources. Synthetic card completion and
76
+ * charge outcomes are programmatic fixtures, never caller-supplied flags. */
76
77
  export declare function addMockBillingRoutes(app: Hono, hooks: BillingHooks): void;
77
78
  export {};
package/dist/billing.js CHANGED
@@ -1,4 +1,4 @@
1
- import { validateAutoTopUpSettings, validateUpdateAutoTopUpSettingsRequest, validateAutoTopUpSetup, validateReconcileAutoTopUpSetupResult, validateAssignBillingProjectSlotsRequest, validateBillingAccount, validateBillingEntitlements, validateSubscriptionChange, validateConfirmSubscriptionChangeRequest, validateBillingPortalSession, validateBillingProjectSlots, validateCreateSubscriptionCheckoutRequest, validateCreateWalletCheckoutRequest, validateProjectAttribution, validateReconcileSubscriptionCheckoutResult, validateReconcileWalletCheckoutResult, validateSubscriptionCheckout, validateUpdateProjectAttributionRequest, validateWalletCheckout, } from "@whooshbang/contracts";
1
+ import { validateAutoTopUpSettings, validateUpdateAutoTopUpSettingsRequest, validateAssignBillingProjectSlotsRequest, validateBillingAccount, validateBillingEntitlements, validateBillingInvoiceCollection, validateCardSetup, validateConfirmSubscriptionChangeRequest, validateCreateCreditPurchaseRequest, validateCreditPurchase, validateBillingProjectSlots, validateProjectAttribution, validateSubscriptionChange, validateSubscriptionSelection, validateUpdateBillingReceiptEmailRequest, validateUpdateProjectAttributionRequest, } from "@whooshbang/contracts";
2
2
  const packs = [
3
3
  { purchase_cents: 500, core_credit_usd: "5.000000" },
4
4
  { purchase_cents: 1000, core_credit_usd: "10.000000" },
@@ -24,6 +24,12 @@ const defaultOffers = [
24
24
  hide_attribution: false,
25
25
  },
26
26
  ];
27
+ const mockCard = {
28
+ brand: "visa",
29
+ last_four: "4242",
30
+ exp_month: 12,
31
+ exp_year: 2034,
32
+ };
27
33
  function microUsd(value) {
28
34
  if (value.length > 40 || !/^-?(0|[1-9][0-9]*)\.[0-9]{6}$/u.test(value))
29
35
  throw new TypeError("Mock billing credit must be an exact USD decimal string.");
@@ -55,114 +61,15 @@ function nextMonth(now) {
55
61
  export class MockBillingState {
56
62
  options;
57
63
  cardSetups = new Map();
64
+ purchases = new Map();
58
65
  automaticSettings = new Map();
59
66
  accounts = new Map();
60
- checkouts = new Map();
61
67
  changes = new Map();
68
+ invoices = new Map();
62
69
  attribution = new Map();
63
70
  replays = new Map();
64
71
  offers;
65
72
  sequence = 0;
66
- readAutoTopUp(organizationId) {
67
- const known = this.automaticSettings.get(organizationId);
68
- if (known)
69
- return structuredClone(known.resource);
70
- const resource = {
71
- enabled: false,
72
- purchase_cents: 500,
73
- trigger_cents: 100,
74
- monthly_cap_cents: 0,
75
- available: true,
76
- monthly_reserved_cents: 0,
77
- state: "disabled",
78
- saved_card: null,
79
- pending_setup_id: null,
80
- };
81
- this.automaticSettings.set(organizationId, { revision: 0, resource });
82
- return structuredClone(resource);
83
- }
84
- autoTopUpRevision(organizationId) {
85
- this.readAutoTopUp(organizationId);
86
- return this.automaticSettings.get(organizationId)?.revision ?? 0;
87
- }
88
- updateAutoTopUp(organizationId, input) {
89
- const previous = this.readAutoTopUp(organizationId);
90
- const known = this.automaticSettings.get(organizationId);
91
- if (!known)
92
- throw new Error("Automatic billing fixture is missing.");
93
- if (previous.enabled === input.enabled &&
94
- previous.purchase_cents === input.purchase_cents &&
95
- previous.trigger_cents === input.trigger_cents &&
96
- previous.monthly_cap_cents === input.monthly_cap_cents)
97
- return previous;
98
- known.revision++;
99
- known.resource = {
100
- ...previous,
101
- ...input,
102
- pending_setup_id: null,
103
- state: !input.enabled
104
- ? "disabled"
105
- : previous.saved_card
106
- ? "ready"
107
- : "needs_card",
108
- };
109
- return structuredClone(known.resource);
110
- }
111
- createCardSetup(organizationId) {
112
- const settings = this.readAutoTopUp(organizationId);
113
- if (!settings.enabled)
114
- return null;
115
- if (settings.pending_setup_id)
116
- return structuredClone(this.cardSetups.get(settings.pending_setup_id)?.resource ?? null);
117
- const known = this.automaticSettings.get(organizationId);
118
- if (!known)
119
- throw new Error("Automatic billing fixture is missing.");
120
- const id = `auto_top_up_setup_${(++this.sequence).toString(16).padStart(32, "0")}`;
121
- const resource = {
122
- id,
123
- status: "open",
124
- checkout_url: `https://checkout.mock.whooshbang.test/${id}`,
125
- };
126
- this.cardSetups.set(id, {
127
- organizationId,
128
- revision: known.revision,
129
- resource,
130
- applied: false,
131
- });
132
- known.resource.pending_setup_id = id;
133
- return structuredClone(resource);
134
- }
135
- reconcileCardSetup(organizationId, id) {
136
- const setup = this.cardSetups.get(id);
137
- const settings = this.automaticSettings.get(organizationId);
138
- if (!setup || setup.organizationId !== organizationId || !settings)
139
- return "ignored";
140
- if (setup.applied)
141
- return "applied";
142
- if (setup.resource.status === "expired")
143
- return "ignored";
144
- const outcome = this.options.autoTopUpSetupOutcome?.({ id, organizationId }) ?? "ready";
145
- if (outcome === "unpaid")
146
- return "unpaid";
147
- if (outcome === "expired") {
148
- setup.resource.status = "expired";
149
- setup.resource.checkout_url = null;
150
- if (settings.resource.pending_setup_id === id)
151
- settings.resource.pending_setup_id = null;
152
- return "unpaid";
153
- }
154
- setup.resource.status = "complete";
155
- setup.resource.checkout_url = null;
156
- if (!settings.resource.enabled ||
157
- settings.revision !== setup.revision ||
158
- settings.resource.pending_setup_id !== id)
159
- return "ignored";
160
- settings.resource.saved_card = { brand: "visa", last_four: "4242" };
161
- settings.resource.state = "ready";
162
- settings.resource.pending_setup_id = null;
163
- setup.applied = true;
164
- return "applied";
165
- }
166
73
  constructor(options = {}) {
167
74
  this.options = options;
168
75
  this.offers = structuredClone(options.offers ?? defaultOffers);
@@ -197,10 +104,14 @@ export class MockBillingState {
197
104
  account.starter = microUsd(seed.starterCreditUsd ?? "2.000000");
198
105
  if (account.starter < 0n || account.starter > 2000000n)
199
106
  throw new TypeError("Mock starter credit must be between zero and the once-only $2 grant.");
200
- account.hasCustomer = account.purchased > 0n;
201
107
  account.hasPaidWallet = account.purchased > 0n;
108
+ if (seed.card)
109
+ account.card = structuredClone(mockCard);
202
110
  }
203
111
  }
112
+ id(prefix) {
113
+ return `${prefix}_${(++this.sequence).toString(16).padStart(32, "0")}`;
114
+ }
204
115
  account(organizationId) {
205
116
  let account = this.accounts.get(organizationId);
206
117
  if (!account) {
@@ -208,20 +119,30 @@ export class MockBillingState {
208
119
  purchased: 0n,
209
120
  bonus: 0n,
210
121
  starter: 2000000n,
211
- hasCustomer: false,
212
122
  hasPaidWallet: false,
213
123
  hasSubscription: false,
124
+ card: null,
125
+ receiptEmail: null,
214
126
  selection: null,
215
- pendingCheckout: null,
216
127
  requestedProjects: null,
128
+ createdAt: null,
217
129
  paid: null,
218
130
  };
219
131
  this.accounts.set(organizationId, account);
220
132
  }
221
133
  return account;
222
134
  }
223
- readAccount(organizationId) {
135
+ record(organizationId, invoice) {
136
+ const list = this.invoices.get(organizationId) ?? [];
137
+ list.unshift(invoice);
138
+ this.invoices.set(organizationId, list);
139
+ }
140
+ outcome(id, kind, organizationId) {
141
+ return this.options.chargeOutcome?.({ id, kind, organizationId }) ?? "paid";
142
+ }
143
+ readAccount(organizationId, now) {
224
144
  const account = this.account(organizationId);
145
+ account.createdAt ??= now ?? null;
225
146
  const core = positive(account.purchased + account.bonus + account.starter);
226
147
  return {
227
148
  currency: "USD",
@@ -232,10 +153,177 @@ export class MockBillingState {
232
153
  available_email_credit_usd: usd(least(core, positive(account.purchased) + account.starter)),
233
154
  core_price_per_1000_usd: "3.000000",
234
155
  shared_email_price_per_1000_usd: "1.000000",
235
- checkout_available: true,
156
+ purchases_available: true,
236
157
  packs: structuredClone([...packs]),
158
+ card: account.card ? structuredClone(account.card) : null,
159
+ receipt_email: account.receiptEmail,
160
+ };
161
+ }
162
+ setReceiptEmail(organizationId, email) {
163
+ this.account(organizationId).receiptEmail = email;
164
+ }
165
+ createCardSetup(organizationId) {
166
+ const id = this.id("card_setup");
167
+ const resource = {
168
+ id,
169
+ status: "open",
170
+ client_secret: `seti_mock_${id}_secret`,
171
+ publishable_key: "pk_test_WhooshBangContractMock",
172
+ card: null,
173
+ };
174
+ this.cardSetups.set(id, { organizationId, resource });
175
+ return structuredClone(resource);
176
+ }
177
+ reconcileCardSetup(organizationId, id) {
178
+ const setup = this.cardSetups.get(id);
179
+ if (!setup || setup.organizationId !== organizationId)
180
+ return null;
181
+ if (setup.resource.status !== "open")
182
+ return structuredClone(setup.resource);
183
+ const outcome = this.options.cardOutcome?.({ id, organizationId }) ?? "ready";
184
+ if (outcome === "open")
185
+ return structuredClone(setup.resource);
186
+ setup.resource.client_secret = null;
187
+ setup.resource.publishable_key = null;
188
+ if (outcome === "expired") {
189
+ setup.resource.status = "expired";
190
+ return structuredClone(setup.resource);
191
+ }
192
+ const account = this.account(organizationId);
193
+ account.card = structuredClone(mockCard);
194
+ setup.resource.status = "complete";
195
+ setup.resource.card = structuredClone(mockCard);
196
+ const settings = this.readAutoTopUp(organizationId);
197
+ if (settings.enabled)
198
+ this.automaticSettings.set(organizationId, {
199
+ ...settings,
200
+ state: "ready",
201
+ card: structuredClone(mockCard),
202
+ });
203
+ return structuredClone(setup.resource);
204
+ }
205
+ createCreditPurchase(organizationId, purchaseCents, now) {
206
+ const account = this.account(organizationId);
207
+ if (!account.card)
208
+ return "card_required";
209
+ const pack = packs.find((candidate) => candidate.purchase_cents === purchaseCents);
210
+ if (!pack)
211
+ throw new Error("Unknown mock credit pack.");
212
+ const id = this.id("credit_purchase");
213
+ const resource = {
214
+ id,
215
+ purchase_cents: pack.purchase_cents,
216
+ credit_usd: pack.core_credit_usd,
217
+ status: "processing",
218
+ failure: null,
219
+ client_secret: null,
220
+ publishable_key: null,
221
+ card: structuredClone(account.card),
222
+ };
223
+ this.purchases.set(id, { organizationId, resource, createdAt: now });
224
+ return this.settlePurchase(organizationId, id) ?? resource;
225
+ }
226
+ settlePurchase(organizationId, id) {
227
+ const purchase = this.purchases.get(id);
228
+ if (!purchase || purchase.organizationId !== organizationId)
229
+ return null;
230
+ const resource = purchase.resource;
231
+ if (resource.status === "paid" || resource.status === "failed")
232
+ return structuredClone(resource);
233
+ const outcome = this.outcome(id, "credit", organizationId);
234
+ if (outcome === "requires_action") {
235
+ resource.status = "requires_action";
236
+ resource.client_secret = `pi_mock_${id}_secret`;
237
+ resource.publishable_key = "pk_test_WhooshBangContractMock";
238
+ return structuredClone(resource);
239
+ }
240
+ resource.client_secret = null;
241
+ resource.publishable_key = null;
242
+ if (outcome === "declined") {
243
+ resource.status = "failed";
244
+ resource.failure = "card_declined";
245
+ return structuredClone(resource);
246
+ }
247
+ const account = this.account(organizationId);
248
+ const cash = BigInt(resource.purchase_cents) * 10000n;
249
+ account.purchased += cash;
250
+ account.bonus += microUsd(resource.credit_usd) - cash;
251
+ account.hasPaidWallet = true;
252
+ resource.status = "paid";
253
+ this.record(organizationId, {
254
+ id,
255
+ kind: "credit",
256
+ created_at: purchase.createdAt,
257
+ amount_usd: usd(cash),
258
+ status: "paid",
259
+ purchase_cents: resource.purchase_cents,
260
+ items: [],
261
+ period_start: null,
262
+ period_end: null,
263
+ document_url: `https://receipts.mock.whooshbang.test/${id}`,
264
+ document_kind: "receipt",
265
+ });
266
+ return structuredClone(resource);
267
+ }
268
+ listInvoices(organizationId, page, limit) {
269
+ const account = this.account(organizationId);
270
+ const welcome = {
271
+ id: "welcome_credit",
272
+ kind: "welcome_credit",
273
+ created_at: account.createdAt ?? "2026-01-01T00:00:00.000Z",
274
+ amount_usd: "0.000000",
275
+ status: "free",
276
+ purchase_cents: null,
277
+ items: [],
278
+ period_start: null,
279
+ period_end: null,
280
+ document_url: null,
281
+ document_kind: null,
282
+ };
283
+ const all = [
284
+ ...(this.invoices.get(organizationId) ?? []),
285
+ welcome,
286
+ ];
287
+ const items = all.slice((page - 1) * limit, page * limit);
288
+ return {
289
+ items: structuredClone(items),
290
+ page,
291
+ page_size: limit,
292
+ total: all.length,
237
293
  };
238
294
  }
295
+ readAutoTopUp(organizationId) {
296
+ const card = this.account(organizationId).card;
297
+ const known = this.automaticSettings.get(organizationId);
298
+ if (known)
299
+ return structuredClone({
300
+ ...known,
301
+ card: card ? structuredClone(card) : null,
302
+ state: !known.enabled ? "disabled" : card ? known.state : "needs_card",
303
+ });
304
+ return {
305
+ enabled: false,
306
+ purchase_cents: 500,
307
+ trigger_cents: 100,
308
+ monthly_cap_cents: 0,
309
+ available: true,
310
+ monthly_reserved_cents: 0,
311
+ state: "disabled",
312
+ card: card ? structuredClone(card) : null,
313
+ last_purchase: null,
314
+ };
315
+ }
316
+ updateAutoTopUp(organizationId, input) {
317
+ const previous = this.readAutoTopUp(organizationId);
318
+ const card = this.account(organizationId).card;
319
+ const resource = {
320
+ ...previous,
321
+ ...input,
322
+ state: !input.enabled ? "disabled" : card ? "ready" : "needs_card",
323
+ };
324
+ this.automaticSettings.set(organizationId, resource);
325
+ return structuredClone(resource);
326
+ }
239
327
  changeOffers(selection) {
240
328
  const kinds = [
241
329
  ...(selection.plan !== "payg" ? [selection.plan] : []),
@@ -253,20 +341,44 @@ export class MockBillingState {
253
341
  BigInt(offer.kind === "project" ? selection.additional_projects : 1), 0n);
254
342
  }
255
343
  createChange(organizationId, selection, now) {
256
- const account = this.account(organizationId), paid = account.paid, old = account.selection;
257
- if (!account.hasSubscription ||
258
- !paid ||
259
- paid.end <= now ||
260
- !old ||
261
- [...this.changes.values()].some((change) => change.organizationId === organizationId &&
262
- !["applied", "expired"].includes(change.resource.status)))
344
+ const account = this.account(organizationId), paid = account.paid && account.paid.end > now ? account.paid : null, old = account.selection;
345
+ if ([...this.changes.values()].some((change) => change.organizationId === organizationId &&
346
+ !["applied", "expired"].includes(change.resource.status)))
347
+ return null;
348
+ const offers = this.changeOffers(selection);
349
+ if (!offers)
263
350
  return null;
264
- const offers = this.changeOffers(selection), oldOffers = this.changeOffers(old);
265
- if (!offers ||
266
- !oldOffers ||
267
- JSON.stringify(selection) === JSON.stringify(old))
351
+ const targetTotal = this.selectionTotal(selection, offers);
352
+ const expires = new Date(Date.parse(now) + 23 * 60 * 60 * 1000).toISOString();
353
+ if (!account.hasSubscription || !paid || !old) {
354
+ if (offers.length === 0)
355
+ return null;
356
+ const id = this.id("subscription_change");
357
+ const resource = {
358
+ id,
359
+ kind: "start",
360
+ status: "reserved",
361
+ selection: structuredClone(selection),
362
+ monthly_price_usd: usd(targetTotal),
363
+ charge_now_usd: usd(targetTotal),
364
+ unused_time_credit_usd: null,
365
+ effective_at: null,
366
+ expires_at: expires,
367
+ client_secret: null,
368
+ publishable_key: null,
369
+ failure: null,
370
+ };
371
+ this.changes.set(id, {
372
+ organizationId,
373
+ resource,
374
+ selectedOffers: offers,
375
+ });
376
+ return structuredClone(resource);
377
+ }
378
+ const oldOffers = this.changeOffers(old);
379
+ if (!oldOffers || JSON.stringify(selection) === JSON.stringify(old))
268
380
  return null;
269
- const targetTotal = this.selectionTotal(selection, offers), oldTotal = this.selectionTotal(old, oldOffers);
381
+ const oldTotal = this.selectionTotal(old, oldOffers);
270
382
  const base = offers.find((offer) => offer.kind === selection.plan);
271
383
  const capacity = (base?.included_projects ?? 1) + selection.additional_projects;
272
384
  const upgrade = targetTotal > oldTotal &&
@@ -284,7 +396,7 @@ export class MockBillingState {
284
396
  10000n) *
285
397
  10000n
286
398
  : 0n;
287
- const id = `subscription_change_${(++this.sequence).toString(16).padStart(32, "0")}`;
399
+ const id = this.id("subscription_change");
288
400
  const resource = {
289
401
  id,
290
402
  kind: upgrade ? "upgrade" : "boundary",
@@ -294,12 +406,35 @@ export class MockBillingState {
294
406
  charge_now_usd: upgrade ? usd(targetTotal - credit) : "0.000000",
295
407
  unused_time_credit_usd: upgrade ? usd(credit) : null,
296
408
  effective_at: upgrade ? null : paid.end,
297
- expires_at: new Date(Date.parse(now) + 23 * 60 * 60 * 1000).toISOString(),
298
- payment_url: null,
409
+ expires_at: expires,
410
+ client_secret: null,
411
+ publishable_key: null,
412
+ failure: null,
299
413
  };
300
414
  this.changes.set(id, { organizationId, resource, selectedOffers: offers });
301
415
  return structuredClone(resource);
302
416
  }
417
+ apply(change, start) {
418
+ const account = this.account(change.organizationId), selection = change.resource.selection;
419
+ const base = change.selectedOffers.find((offer) => offer.kind === selection.plan);
420
+ if (change.selectedOffers.length === 0) {
421
+ account.hasSubscription = false;
422
+ account.selection = null;
423
+ account.paid = null;
424
+ return;
425
+ }
426
+ account.hasSubscription = true;
427
+ account.selection = structuredClone(selection);
428
+ account.paid = {
429
+ start,
430
+ end: nextMonth(start),
431
+ plan: selection.plan,
432
+ capacity: (base?.included_projects ?? 1) + selection.additional_projects,
433
+ hide: base?.hide_attribution ?? selection.hide_attribution,
434
+ liveRemaining: BigInt(base?.live_notifications ?? "0"),
435
+ emailRemaining: BigInt(base?.shared_emails ?? "0"),
436
+ };
437
+ }
303
438
  settleChange(organizationId, id, now) {
304
439
  const change = this.changes.get(id);
305
440
  if (!change || change.organizationId !== organizationId)
@@ -307,36 +442,50 @@ export class MockBillingState {
307
442
  const resource = change.resource;
308
443
  if (resource.status === "reserved" && now >= resource.expires_at)
309
444
  resource.status = "expired";
310
- if (resource.status === "pending" ||
311
- (resource.status === "scheduled" &&
312
- resource.effective_at &&
313
- now >= resource.effective_at)) {
314
- const outcome = this.options.checkoutOutcome?.({
315
- id,
316
- kind: "subscription",
317
- organizationId,
318
- }) ?? "paid";
319
- if (outcome === "expired") {
320
- resource.status = "expired";
321
- resource.payment_url = null;
445
+ if (resource.status === "scheduled" &&
446
+ resource.effective_at &&
447
+ now >= resource.effective_at) {
448
+ this.apply(change, resource.effective_at);
449
+ resource.status = "applied";
450
+ }
451
+ if (resource.status === "pending") {
452
+ const outcome = this.outcome(id, "subscription", organizationId);
453
+ if (outcome === "requires_action") {
454
+ resource.client_secret = `pi_mock_${id}_secret`;
455
+ resource.publishable_key = "pk_test_WhooshBangContractMock";
456
+ resource.failure = null;
322
457
  }
323
- else if (outcome === "paid") {
324
- const account = this.account(organizationId), selection = resource.selection;
325
- const base = change.selectedOffers.find((offer) => offer.kind === selection.plan);
326
- const start = resource.kind === "boundary" ? (resource.effective_at ?? now) : now;
327
- account.selection = structuredClone(selection);
328
- account.paid = {
329
- start,
330
- end: nextMonth(start),
331
- plan: selection.plan,
332
- capacity: (base?.included_projects ?? 1) + selection.additional_projects,
333
- hide: base?.hide_attribution ?? selection.hide_attribution,
334
- liveRemaining: BigInt(base?.live_notifications ?? "0"),
335
- emailRemaining: BigInt(base?.shared_emails ?? "0"),
336
- };
458
+ else if (outcome === "declined") {
459
+ resource.client_secret = null;
460
+ resource.publishable_key = null;
461
+ resource.failure = "card_declined";
462
+ }
463
+ else {
464
+ this.apply(change, now);
337
465
  resource.status = "applied";
338
- resource.effective_at = start;
339
- resource.payment_url = null;
466
+ resource.effective_at = now;
467
+ resource.client_secret = null;
468
+ resource.publishable_key = null;
469
+ resource.failure = null;
470
+ const items = change.selectedOffers.map((offer) => ({
471
+ kind: offer.kind,
472
+ quantity: offer.kind === "project"
473
+ ? resource.selection.additional_projects
474
+ : 1,
475
+ }));
476
+ this.record(organizationId, {
477
+ id: `in_mock_${id}`,
478
+ kind: "recurring",
479
+ created_at: now,
480
+ amount_usd: resource.charge_now_usd ?? "0.000000",
481
+ status: "paid",
482
+ purchase_cents: null,
483
+ items,
484
+ period_start: now,
485
+ period_end: nextMonth(now),
486
+ document_url: `https://invoices.mock.whooshbang.test/${id}.pdf`,
487
+ document_kind: "invoice",
488
+ });
340
489
  }
341
490
  }
342
491
  return structuredClone(resource);
@@ -347,10 +496,11 @@ export class MockBillingState {
347
496
  if (!resource || !change || resource.charge_now_usd !== charge)
348
497
  return null;
349
498
  if (change.resource.status === "reserved") {
499
+ if (change.resource.kind !== "boundary" &&
500
+ !this.account(organizationId).card)
501
+ return "card_required";
350
502
  change.resource.status =
351
- change.resource.kind === "upgrade" ? "pending" : "scheduled";
352
- if (change.resource.kind === "upgrade")
353
- change.resource.payment_url = `https://invoice.mock.whooshbang.test/${id}`;
503
+ change.resource.kind === "boundary" ? "scheduled" : "pending";
354
504
  }
355
505
  return this.settleChange(organizationId, id, now);
356
506
  }
@@ -371,11 +521,10 @@ export class MockBillingState {
371
521
  live_notifications_remaining: String(paid?.liveRemaining ?? 0n),
372
522
  shared_emails_remaining: String(paid?.emailRemaining ?? 0n),
373
523
  allowance_period_end: paid && paid.plan !== "payg" ? paid.end : null,
374
- recurring_checkout_available: this.offers.length > 0,
524
+ recurring_available: this.offers.length > 0,
375
525
  offers: structuredClone(this.offers),
376
- pending_subscription_checkout_id: account.pendingCheckout,
377
- subscription_management_available: account.hasCustomer,
378
526
  has_subscription: account.hasSubscription,
527
+ payment_issue: null,
379
528
  };
380
529
  }
381
530
  readAttribution(organizationId, projectId, now) {
@@ -442,100 +591,10 @@ export class MockBillingState {
442
591
  paid.emailRemaining -= 1n;
443
592
  return null;
444
593
  }
445
- createCheckout(organizationId, selection) {
446
- const account = this.account(organizationId);
447
- let offers;
448
- if (typeof selection !== "number") {
449
- if (account.hasSubscription || account.pendingCheckout)
450
- return null;
451
- const kinds = [
452
- ...(selection.plan !== "payg" ? [selection.plan] : []),
453
- ...(selection.plan === "payg" && selection.hide_attribution
454
- ? ["attribution"]
455
- : []),
456
- ...(selection.additional_projects > 0 ? ["project"] : []),
457
- ];
458
- offers = this.offers.filter((offer) => kinds.includes(offer.kind));
459
- if (offers.length !== kinds.length)
460
- return null;
461
- }
462
- this.sequence += 1;
463
- const kind = typeof selection === "number" ? "checkout" : "subscription_checkout";
464
- const id = `${kind}_${this.sequence.toString(16).padStart(32, "0")}`;
465
- const checkout = {
466
- organizationId,
467
- resource: {
468
- id,
469
- status: "open",
470
- checkout_url: `https://checkout.mock.whooshbang.test/${id}`,
471
- },
472
- applied: false,
473
- ...(typeof selection === "number"
474
- ? { purchaseCents: selection }
475
- : {
476
- selection: structuredClone(selection),
477
- selectedOffers: structuredClone(offers ?? []),
478
- }),
479
- };
480
- account.hasCustomer = true;
481
- if (typeof selection !== "number")
482
- account.pendingCheckout = id;
483
- this.checkouts.set(id, checkout);
484
- return checkout;
485
- }
486
- reconcile(checkout, now) {
487
- if (checkout.applied)
488
- return "applied";
489
- if (checkout.resource.status === "expired")
490
- return "ignored";
491
- const outcome = this.options.checkoutOutcome?.({
492
- id: checkout.resource.id,
493
- kind: checkout.purchaseCents !== undefined ? "wallet" : "subscription",
494
- organizationId: checkout.organizationId,
495
- }) ?? "paid";
496
- if (outcome === "unpaid")
497
- return "unpaid";
498
- const account = this.account(checkout.organizationId);
499
- if (outcome === "expired") {
500
- checkout.resource.status = "expired";
501
- checkout.resource.checkout_url = null;
502
- if (account.pendingCheckout === checkout.resource.id)
503
- account.pendingCheckout = null;
504
- return "ignored";
505
- }
506
- if (checkout.purchaseCents !== undefined) {
507
- const pack = packs.find((pack) => pack.purchase_cents === checkout.purchaseCents);
508
- if (!pack)
509
- throw new Error("Unknown mock wallet pack.");
510
- const cash = BigInt(pack.purchase_cents) * 10000n;
511
- account.purchased += cash;
512
- account.hasPaidWallet = true;
513
- account.bonus += microUsd(pack.core_credit_usd) - cash;
514
- }
515
- else if (checkout.selection) {
516
- const selection = checkout.selection;
517
- const base = checkout.selectedOffers?.find((offer) => offer.kind === selection.plan);
518
- account.hasSubscription = true;
519
- account.selection = structuredClone(selection);
520
- account.pendingCheckout = null;
521
- account.paid = {
522
- start: now,
523
- end: nextMonth(now),
524
- plan: selection.plan,
525
- capacity: (base?.included_projects ?? 1) + selection.additional_projects,
526
- hide: base?.hide_attribution ?? selection.hide_attribution,
527
- liveRemaining: BigInt(base?.live_notifications ?? "0"),
528
- emailRemaining: BigInt(base?.shared_emails ?? "0"),
529
- };
530
- }
531
- checkout.applied = true;
532
- checkout.resource.status = "complete";
533
- checkout.resource.checkout_url = null;
534
- return "applied";
535
- }
536
594
  }
537
- /** Register only published public resources. Synthetic vendor completion is
538
- * driven by a programmatic fixture, never a caller-supplied payment flag. */
595
+ const cardRequiredDetail = "Add a card first. It becomes the one card for credit, automatic top-up, plans and add-ons.";
596
+ /** Register only published public resources. Synthetic card completion and
597
+ * charge outcomes are programmatic fixtures, never caller-supplied flags. */
539
598
  export function addMockBillingRoutes(app, hooks) {
540
599
  app.use("/v1/projects/:projectId/attribution", async (context, next) => {
541
600
  await next();
@@ -552,10 +611,7 @@ export function addMockBillingRoutes(app, hooks) {
552
611
  const responseBodies = new WeakMap();
553
612
  const mutate = (request, organizationId, operation, body, status, action) => {
554
613
  const key = request.headers.get("idempotency-key");
555
- if (!key ||
556
- key.length < 8 ||
557
- key.length > 255 ||
558
- !/^[\u0021-\u007e]+$/u.test(key))
614
+ if (!key || key.length < 8 || key.length > 255 || !/^[!-~]+$/u.test(key))
559
615
  return hooks.fail("idempotency_key_required", 400);
560
616
  const mapKey = `${organizationId}\u0000${operation}\u0000${key}`;
561
617
  const fingerprint = hooks.fingerprint(body);
@@ -570,7 +626,7 @@ export function addMockBillingRoutes(app, hooks) {
570
626
  ? prior.body.id
571
627
  : undefined;
572
628
  const fresh = typeof id === "string"
573
- ? (state.checkouts.get(id)?.resource ??
629
+ ? (state.purchases.get(id)?.resource ??
574
630
  state.cardSetups.get(id)?.resource ??
575
631
  state.changes.get(id)?.resource)
576
632
  : undefined;
@@ -622,41 +678,53 @@ export function addMockBillingRoutes(app, hooks) {
622
678
  return hooks.fail("request_invalid", 400);
623
679
  return hooks.reply(hooks.state().updateAutoTopUp(org, body), validateAutoTopUpSettings);
624
680
  });
625
- app.post("/v1/billing/auto-top-up/setups", (context) => {
681
+ app.post("/v1/billing/card-setups", (context) => {
626
682
  const org = hooks.authorize(context.req.raw, "billing:write", true);
627
683
  if (org instanceof Response)
628
684
  return org;
629
- return mutate(context.req.raw, org, "createAutoTopUpSetup", { settings_revision: hooks.state().autoTopUpRevision(org) }, 201, () => {
630
- const setup = hooks.state().createCardSetup(org);
631
- return setup
632
- ? replayable(setup, validateAutoTopUpSetup, 201)
633
- : hooks.fail("request_invalid", 400);
634
- });
685
+ return mutate(context.req.raw, org, "createCardSetup", {}, 201, () => replayable(hooks.state().createCardSetup(org), validateCardSetup, 201));
635
686
  });
636
- app.post("/v1/billing/auto-top-up/setups/:setupId/reconcile", (context) => {
687
+ app.post("/v1/billing/card-setups/:setupId/reconcile", (context) => {
637
688
  const org = hooks.authorize(context.req.raw, "billing:write", true);
638
689
  if (org instanceof Response)
639
690
  return org;
640
- const id = context.req.param("setupId");
641
- if (hooks.state().cardSetups.get(id)?.organizationId !== org)
642
- return hooks.fail("resource_not_found", 404);
643
- const outcome = hooks.state().reconcileCardSetup(org, id);
644
- return hooks.reply({ outcome, settings: hooks.state().readAutoTopUp(org) }, validateReconcileAutoTopUpSetupResult);
645
- });
646
- app.post("/v1/billing/auto-top-up/setups/:setupId/resume", (context) => {
647
- const org = hooks.authorize(context.req.raw, "billing:write", true);
648
- if (org instanceof Response)
649
- return org;
650
- const setup = hooks.state().cardSetups.get(context.req.param("setupId"));
651
- return setup?.organizationId === org
652
- ? hooks.reply(setup.resource, validateAutoTopUpSetup)
691
+ const setup = hooks
692
+ .state()
693
+ .reconcileCardSetup(org, context.req.param("setupId"));
694
+ return setup
695
+ ? hooks.reply(setup, validateCardSetup)
653
696
  : hooks.fail("resource_not_found", 404);
654
697
  });
655
698
  app.get("/v1/billing", (context) => {
656
699
  const org = hooks.authorize(context.req.raw, "billing:read", true);
657
700
  return org instanceof Response
658
701
  ? org
659
- : hooks.reply(hooks.state().readAccount(org), validateBillingAccount);
702
+ : hooks.reply(hooks.state().readAccount(org, hooks.now()), validateBillingAccount);
703
+ });
704
+ app.put("/v1/billing/receipt-email", async (context) => {
705
+ const org = hooks.authorize(context.req.raw, "billing:write", true);
706
+ if (org instanceof Response)
707
+ return org;
708
+ const body = await hooks.read(context.req.raw, validateUpdateBillingReceiptEmailRequest);
709
+ if (body instanceof Response)
710
+ return body;
711
+ hooks.state().setReceiptEmail(org, body.email);
712
+ return hooks.reply(hooks.state().readAccount(org, hooks.now()), validateBillingAccount);
713
+ });
714
+ app.get("/v1/billing/invoices", (context) => {
715
+ const org = hooks.authorize(context.req.raw, "billing:read", true);
716
+ if (org instanceof Response)
717
+ return org;
718
+ const url = new URL(context.req.url);
719
+ const page = Number(url.searchParams.get("page") ?? "1");
720
+ const limit = Number(url.searchParams.get("limit") ?? "50");
721
+ if (!Number.isSafeInteger(page) ||
722
+ page < 1 ||
723
+ !Number.isSafeInteger(limit) ||
724
+ limit < 1 ||
725
+ limit > 100)
726
+ return hooks.fail("request_invalid", 400);
727
+ return hooks.reply(hooks.state().listInvoices(org, page, limit), validateBillingInvoiceCollection);
660
728
  });
661
729
  app.get("/v1/billing/entitlements", (context) => {
662
730
  const org = hooks.authorize(context.req.raw, "billing:read", true);
@@ -664,46 +732,45 @@ export function addMockBillingRoutes(app, hooks) {
664
732
  ? org
665
733
  : hooks.reply(hooks.state().readEntitlements(org, hooks.now()), validateBillingEntitlements);
666
734
  });
667
- app.post("/v1/billing/wallet-checkouts", async (context) => {
735
+ app.post("/v1/billing/credit-purchases", async (context) => {
668
736
  const org = hooks.authorize(context.req.raw, "billing:write", true);
669
737
  if (org instanceof Response)
670
738
  return org;
671
- const body = await hooks.read(context.req.raw, validateCreateWalletCheckoutRequest);
739
+ const body = await hooks.read(context.req.raw, validateCreateCreditPurchaseRequest);
672
740
  if (body instanceof Response)
673
741
  return body;
674
- return mutate(context.req.raw, org, "createWalletCheckout", body, 201, () => {
675
- const checkout = hooks.state().createCheckout(org, body.purchase_cents);
676
- if (!checkout)
677
- return hooks.fail("scope_forbidden", 403, "billing_purchases_unavailable");
678
- return replayable(checkout.resource, validateWalletCheckout, 201);
742
+ return mutate(context.req.raw, org, "createCreditPurchase", body, 201, () => {
743
+ const purchase = hooks
744
+ .state()
745
+ .createCreditPurchase(org, body.purchase_cents, hooks.now());
746
+ return purchase === "card_required"
747
+ ? hooks.fail("request_invalid", 400, "billing_card_required", cardRequiredDetail)
748
+ : replayable(purchase, validateCreditPurchase, 201);
679
749
  });
680
750
  });
681
- app.post("/v1/billing/wallet-checkouts/:checkoutId/reconcile", (context) => {
751
+ app.post("/v1/billing/credit-purchases/:purchaseId/reconcile", (context) => {
682
752
  const org = hooks.authorize(context.req.raw, "billing:write", true);
683
753
  if (org instanceof Response)
684
754
  return org;
685
- const checkout = hooks
755
+ const purchase = hooks
686
756
  .state()
687
- .checkouts.get(context.req.param("checkoutId"));
688
- if (!checkout ||
689
- checkout.organizationId !== org ||
690
- checkout.purchaseCents === undefined)
691
- return hooks.fail("resource_not_found", 404);
692
- const outcome = hooks.state().reconcile(checkout, hooks.now());
693
- return hooks.reply({ outcome, account: hooks.state().readAccount(org) }, validateReconcileWalletCheckoutResult);
757
+ .settlePurchase(org, context.req.param("purchaseId"));
758
+ return purchase
759
+ ? hooks.reply(purchase, validateCreditPurchase)
760
+ : hooks.fail("resource_not_found", 404);
694
761
  });
695
762
  app.post("/v1/billing/subscription-changes", async (context) => {
696
763
  const org = hooks.authorize(context.req.raw, "billing:write", true);
697
764
  if (org instanceof Response)
698
765
  return org;
699
- const body = await hooks.read(context.req.raw, validateCreateSubscriptionCheckoutRequest);
766
+ const body = await hooks.read(context.req.raw, validateSubscriptionSelection);
700
767
  if (body instanceof Response)
701
768
  return body;
702
769
  return mutate(context.req.raw, org, "createSubscriptionChange", body, 201, () => {
703
770
  const resource = hooks.state().createChange(org, body, hooks.now());
704
771
  return resource
705
772
  ? replayable(resource, validateSubscriptionChange, 201)
706
- : hooks.fail("request_invalid", 400, "subscription_change_unavailable", "Choose a different recurring selection after finishing any pending change.");
773
+ : hooks.fail("request_invalid", 400, "subscription_change_unavailable", "Choose a different plan or add-ons after finishing any pending change.");
707
774
  });
708
775
  });
709
776
  app.get("/v1/billing/subscription-changes/:changeId", (context) => {
@@ -730,6 +797,8 @@ export function addMockBillingRoutes(app, hooks) {
730
797
  const resource = hooks
731
798
  .state()
732
799
  .confirmChange(org, id, body.approved_charge_now_usd, hooks.now());
800
+ if (resource === "card_required")
801
+ return hooks.fail("request_invalid", 400, "billing_card_required", cardRequiredDetail);
733
802
  return resource
734
803
  ? hooks.reply(resource, validateSubscriptionChange)
735
804
  : hooks.fail("request_invalid", 400, "subscription_change_quote_changed", "Confirm the saved immediate charge.");
@@ -742,66 +811,12 @@ export function addMockBillingRoutes(app, hooks) {
742
811
  if (!change || change.organizationId !== org)
743
812
  return hooks.fail("resource_not_found", 404);
744
813
  if (change.resource.status !== "reserved" &&
745
- change.resource.status !== "expired")
814
+ change.resource.status !== "expired" &&
815
+ change.resource.status !== "scheduled")
746
816
  return hooks.fail("request_invalid", 400, "subscription_change_dispatched", "Refresh this saved change.");
747
817
  change.resource.status = "expired";
748
818
  return hooks.reply(change.resource, validateSubscriptionChange);
749
819
  });
750
- app.post("/v1/billing/subscription-checkouts", async (context) => {
751
- const org = hooks.authorize(context.req.raw, "billing:write", true);
752
- if (org instanceof Response)
753
- return org;
754
- const body = await hooks.read(context.req.raw, validateCreateSubscriptionCheckoutRequest);
755
- if (body instanceof Response)
756
- return body;
757
- return mutate(context.req.raw, org, "createSubscriptionCheckout", body, 201, () => {
758
- const entitlements = hooks.state().readEntitlements(org, hooks.now());
759
- if (entitlements.has_subscription ||
760
- entitlements.pending_subscription_checkout_id)
761
- return hooks.fail("request_invalid", 400, "subscription_already_exists", "Finish the saved subscription Checkout or manage the existing subscription before starting another.");
762
- const checkout = hooks.state().createCheckout(org, body);
763
- if (!checkout)
764
- return hooks.fail("scope_forbidden", 403, "billing_purchases_unavailable", "The selected recurring offer is not available.");
765
- return replayable(checkout.resource, validateSubscriptionCheckout, 201);
766
- });
767
- });
768
- app.post("/v1/billing/subscription-checkouts/:checkoutId/reconcile", (context) => {
769
- const org = hooks.authorize(context.req.raw, "billing:write", true);
770
- if (org instanceof Response)
771
- return org;
772
- const checkout = hooks
773
- .state()
774
- .checkouts.get(context.req.param("checkoutId"));
775
- if (!checkout || checkout.organizationId !== org || !checkout.selection)
776
- return hooks.fail("resource_not_found", 404);
777
- const outcome = hooks.state().reconcile(checkout, hooks.now());
778
- return hooks.reply({
779
- outcome,
780
- entitlements: hooks.state().readEntitlements(org, hooks.now()),
781
- }, validateReconcileSubscriptionCheckoutResult);
782
- });
783
- app.post("/v1/billing/subscription-checkouts/:checkoutId/resume", (context) => {
784
- const org = hooks.authorize(context.req.raw, "billing:write", true);
785
- if (org instanceof Response)
786
- return org;
787
- const checkout = hooks
788
- .state()
789
- .checkouts.get(context.req.param("checkoutId"));
790
- if (!checkout || checkout.organizationId !== org || !checkout.selection)
791
- return hooks.fail("resource_not_found", 404);
792
- return hooks.reply(checkout.resource, validateSubscriptionCheckout);
793
- });
794
- app.post("/v1/billing/portal-sessions", (context) => {
795
- const org = hooks.authorize(context.req.raw, "billing:write", true);
796
- if (org instanceof Response)
797
- return org;
798
- return mutate(context.req.raw, org, "createBillingPortalSession", {}, 201, () => {
799
- if (!hooks.state().readEntitlements(org, hooks.now())
800
- .subscription_management_available)
801
- return hooks.fail("resource_not_found", 404);
802
- return replayable({ portal_url: "https://billing.mock.whooshbang.test/session" }, validateBillingPortalSession, 201);
803
- });
804
- });
805
820
  app.get("/v1/billing/project-slots", (context) => {
806
821
  const org = hooks.authorize(context.req.raw, "billing:read", true);
807
822
  return org instanceof Response
@@ -1 +1 @@
1
- {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -135,11 +135,11 @@ export interface WhooshBangContractMockOptions {
135
135
  readonly webhookReceiver?: WebhookReceiver;
136
136
  }
137
137
  export interface ContractMockBillingOptions {
138
- /** Synthetic saved-card completion; never actual Stripe card or charge authority. */
139
- readonly autoTopUpSetupOutcome?: (setup: {
138
+ /** Synthetic card form completion; never actual card or charge authority. */
139
+ readonly cardOutcome?: (setup: {
140
140
  readonly id: string;
141
141
  readonly organizationId: string;
142
- }) => "ready" | "unpaid" | "expired";
142
+ }) => "ready" | "open" | "expired";
143
143
  /** Extra approved offers for consumer tests; the default catalog contains only the two $5 add-ons. */
144
144
  readonly offers?: BillingEntitlements["offers"];
145
145
  readonly accounts?: readonly {
@@ -147,13 +147,16 @@ export interface ContractMockBillingOptions {
147
147
  readonly purchasedCreditUsd?: string;
148
148
  readonly bonusCreditUsd?: string;
149
149
  readonly starterCreditUsd?: string;
150
+ /** Start with a saved default card. */
151
+ readonly card?: boolean;
150
152
  }[];
151
- /** Called on reconciliation. Defaults to paid; unpaid/expired exercise recovery without granting credit. */
152
- readonly checkoutOutcome?: (checkout: {
153
+ /** Called when the default card is charged. Defaults to paid; declined and
154
+ * requires_action exercise recovery without granting credit or access. */
155
+ readonly chargeOutcome?: (charge: {
153
156
  readonly id: string;
154
- readonly kind: "wallet" | "subscription";
157
+ readonly kind: "credit" | "subscription";
155
158
  readonly organizationId: string;
156
- }) => "paid" | "unpaid" | "expired";
159
+ }) => "paid" | "declined" | "requires_action";
157
160
  }
158
161
  export interface ProviderAttemptSnapshot {
159
162
  readonly attempt: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whooshbang/contract-mock",
3
- "version": "2.0.0-rc.6",
3
+ "version": "2.0.0-rc.7",
4
4
  "description": "Deterministic local executable mock for WhooshBang V1",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -55,12 +55,12 @@
55
55
  "generate:copy": "tsx scripts/generate-recipient-copy.ts"
56
56
  },
57
57
  "dependencies": {
58
- "@whooshbang/contracts": "2.0.0-rc.6",
58
+ "@whooshbang/contracts": "2.0.0-rc.7",
59
59
  "hono": "4.13.7"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@whooshbang/mcp": "1.0.0-rc.4",
63
- "@whooshbang/sdk": "2.0.0-rc.6"
63
+ "@whooshbang/sdk": "2.0.0-rc.7"
64
64
  },
65
65
  "engines": {
66
66
  "node": ">=22.13.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "contract-mock-scenarios.v1",
3
- "contract_version": "2.0.0-rc.6",
3
+ "contract_version": "2.0.0-rc.7",
4
4
  "scenarios": [
5
5
  "nominal",
6
6
  "recipient-experience-journey",