@crvouga/mockingbird-service-stripe 0.1.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 (142) hide show
  1. package/README.md +254 -0
  2. package/dist/account.d.ts +8 -0
  3. package/dist/account.d.ts.map +1 -0
  4. package/dist/account.js +13 -0
  5. package/dist/account.js.map +1 -0
  6. package/dist/charges.d.ts +4 -0
  7. package/dist/charges.d.ts.map +1 -0
  8. package/dist/charges.js +89 -0
  9. package/dist/charges.js.map +1 -0
  10. package/dist/checkout-sessions.d.ts +5 -0
  11. package/dist/checkout-sessions.d.ts.map +1 -0
  12. package/dist/checkout-sessions.js +303 -0
  13. package/dist/checkout-sessions.js.map +1 -0
  14. package/dist/constants.d.ts +3 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +3 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/coupons.d.ts +4 -0
  19. package/dist/coupons.d.ts.map +1 -0
  20. package/dist/coupons.js +158 -0
  21. package/dist/coupons.js.map +1 -0
  22. package/dist/customers.d.ts +4 -0
  23. package/dist/customers.d.ts.map +1 -0
  24. package/dist/customers.js +218 -0
  25. package/dist/customers.js.map +1 -0
  26. package/dist/disputes.d.ts +4 -0
  27. package/dist/disputes.d.ts.map +1 -0
  28. package/dist/disputes.js +36 -0
  29. package/dist/disputes.js.map +1 -0
  30. package/dist/errors.d.ts +29 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +74 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/events.d.ts +4 -0
  35. package/dist/events.d.ts.map +1 -0
  36. package/dist/events.js +76 -0
  37. package/dist/events.js.map +1 -0
  38. package/dist/expand.d.ts +11 -0
  39. package/dist/expand.d.ts.map +1 -0
  40. package/dist/expand.js +45 -0
  41. package/dist/expand.js.map +1 -0
  42. package/dist/fields.d.ts +25 -0
  43. package/dist/fields.d.ts.map +1 -0
  44. package/dist/fields.js +117 -0
  45. package/dist/fields.js.map +1 -0
  46. package/dist/generated/openapi.d.ts +7 -0
  47. package/dist/generated/openapi.d.ts.map +1 -0
  48. package/dist/generated/openapi.js +5 -0
  49. package/dist/generated/openapi.js.map +1 -0
  50. package/dist/index.d.ts +43 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +172 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/internal.d.ts +134 -0
  55. package/dist/internal.d.ts.map +1 -0
  56. package/dist/internal.js +460 -0
  57. package/dist/internal.js.map +1 -0
  58. package/dist/invoice-items.d.ts +4 -0
  59. package/dist/invoice-items.d.ts.map +1 -0
  60. package/dist/invoice-items.js +179 -0
  61. package/dist/invoice-items.js.map +1 -0
  62. package/dist/invoices.d.ts +4 -0
  63. package/dist/invoices.d.ts.map +1 -0
  64. package/dist/invoices.js +312 -0
  65. package/dist/invoices.js.map +1 -0
  66. package/dist/list.d.ts +24 -0
  67. package/dist/list.d.ts.map +1 -0
  68. package/dist/list.js +68 -0
  69. package/dist/list.js.map +1 -0
  70. package/dist/params.d.ts +29 -0
  71. package/dist/params.d.ts.map +1 -0
  72. package/dist/params.js +165 -0
  73. package/dist/params.js.map +1 -0
  74. package/dist/payment-intents.d.ts +4 -0
  75. package/dist/payment-intents.d.ts.map +1 -0
  76. package/dist/payment-intents.js +232 -0
  77. package/dist/payment-intents.js.map +1 -0
  78. package/dist/payment-methods.d.ts +4 -0
  79. package/dist/payment-methods.d.ts.map +1 -0
  80. package/dist/payment-methods.js +99 -0
  81. package/dist/payment-methods.js.map +1 -0
  82. package/dist/prices.d.ts +4 -0
  83. package/dist/prices.d.ts.map +1 -0
  84. package/dist/prices.js +176 -0
  85. package/dist/prices.js.map +1 -0
  86. package/dist/products.d.ts +6 -0
  87. package/dist/products.d.ts.map +1 -0
  88. package/dist/products.js +202 -0
  89. package/dist/products.js.map +1 -0
  90. package/dist/promotion-codes.d.ts +4 -0
  91. package/dist/promotion-codes.d.ts.map +1 -0
  92. package/dist/promotion-codes.js +193 -0
  93. package/dist/promotion-codes.js.map +1 -0
  94. package/dist/qa-corpus.d.ts +26 -0
  95. package/dist/qa-corpus.d.ts.map +1 -0
  96. package/dist/qa-corpus.js +42 -0
  97. package/dist/qa-corpus.js.map +1 -0
  98. package/dist/refunds.d.ts +4 -0
  99. package/dist/refunds.d.ts.map +1 -0
  100. package/dist/refunds.js +125 -0
  101. package/dist/refunds.js.map +1 -0
  102. package/dist/render.d.ts +60 -0
  103. package/dist/render.d.ts.map +1 -0
  104. package/dist/render.js +426 -0
  105. package/dist/render.js.map +1 -0
  106. package/dist/reshape-qa.d.ts +8 -0
  107. package/dist/reshape-qa.d.ts.map +1 -0
  108. package/dist/reshape-qa.js +102 -0
  109. package/dist/reshape-qa.js.map +1 -0
  110. package/dist/search.d.ts +32 -0
  111. package/dist/search.d.ts.map +1 -0
  112. package/dist/search.js +64 -0
  113. package/dist/search.js.map +1 -0
  114. package/dist/setup-intents.d.ts +4 -0
  115. package/dist/setup-intents.d.ts.map +1 -0
  116. package/dist/setup-intents.js +129 -0
  117. package/dist/setup-intents.js.map +1 -0
  118. package/dist/state.d.ts +485 -0
  119. package/dist/state.d.ts.map +1 -0
  120. package/dist/state.js +143 -0
  121. package/dist/state.js.map +1 -0
  122. package/dist/subscription-schedules.d.ts +4 -0
  123. package/dist/subscription-schedules.d.ts.map +1 -0
  124. package/dist/subscription-schedules.js +122 -0
  125. package/dist/subscription-schedules.js.map +1 -0
  126. package/dist/subscriptions.d.ts +23 -0
  127. package/dist/subscriptions.d.ts.map +1 -0
  128. package/dist/subscriptions.js +260 -0
  129. package/dist/subscriptions.js.map +1 -0
  130. package/dist/test-tokens.d.ts +27 -0
  131. package/dist/test-tokens.d.ts.map +1 -0
  132. package/dist/test-tokens.js +61 -0
  133. package/dist/test-tokens.js.map +1 -0
  134. package/dist/url.d.ts +6 -0
  135. package/dist/url.d.ts.map +1 -0
  136. package/dist/url.js +38 -0
  137. package/dist/url.js.map +1 -0
  138. package/dist/version.d.ts +3 -0
  139. package/dist/version.d.ts.map +1 -0
  140. package/dist/version.js +3 -0
  141. package/dist/version.js.map +1 -0
  142. package/package.json +72 -0
@@ -0,0 +1,460 @@
1
+ import { opaqueToken } from "@crvouga/mockingbird-service";
2
+ import { accountOf } from "./account.js";
3
+ import { cardError, invalidRequest, parameterMissing, resourceMissing } from "./errors.js";
4
+ import { mergeMetadata } from "./fields.js";
5
+ import { renderCheckoutSession, renderInvoice, renderPaymentIntent } from "./render.js";
6
+ import { seconds, } from "./state.js";
7
+ import { chargeOutcomeFor, TEST_CARD_TOKENS, TEST_PAYMENT_METHODS, } from "./test-tokens.js";
8
+ import { STRIPE_API_VERSION } from "./version.js";
9
+ export const requestScope = (services, context) => {
10
+ const { state } = services;
11
+ const account = state.for(accountOf(context.request));
12
+ const now = context.now;
13
+ return {
14
+ account,
15
+ ids: state.ids,
16
+ now,
17
+ emit: (type, object, previous) => {
18
+ const id = state.ids.next("evt_");
19
+ const created = seconds(now);
20
+ const payload = {
21
+ id,
22
+ object: "event",
23
+ api_version: STRIPE_API_VERSION,
24
+ created,
25
+ data: previous === undefined ? { object } : { object, previous_attributes: previous },
26
+ livemode: false,
27
+ pending_webhooks: 1,
28
+ request: { id: state.ids.next("req_"), idempotency_key: null },
29
+ type,
30
+ };
31
+ const body = JSON.stringify(payload);
32
+ const sequence = account.events.nextSequence();
33
+ account.events.insert(String(sequence), {
34
+ id,
35
+ type,
36
+ created,
37
+ account: account.account,
38
+ body,
39
+ data: payload.data,
40
+ });
41
+ account.webhookDeliveryAttempts.insert(`${id}:1`, {
42
+ message_id: id,
43
+ account: account.account,
44
+ attempt: 1,
45
+ scheduled_at: new Date(now()).toISOString(),
46
+ timeout_ms: 15_000,
47
+ acknowledged: true,
48
+ });
49
+ // Delivery is best-effort: a failing publisher must never turn the API call into a 500. The
50
+ // event is already in the ledger, so `GET /v1/events` (and the caller's replay sweep) can
51
+ // still see it.
52
+ try {
53
+ services.publish?.({ type, account: account.account, body });
54
+ }
55
+ catch (error) {
56
+ console.error(`stripe webhook publisher failed: ${error instanceof Error ? error.message : String(error)}`);
57
+ }
58
+ return id;
59
+ },
60
+ };
61
+ };
62
+ /** Every field that changed, in the shape Stripe sends as `data.previous_attributes`. */
63
+ export const changedFields = (previous, next) => {
64
+ const changed = {};
65
+ for (const [key, value] of Object.entries(next)) {
66
+ if (previous[key] === value)
67
+ continue;
68
+ changed[key] = previous[key] ?? null;
69
+ }
70
+ return Object.keys(changed).length === 0 ? undefined : changed;
71
+ };
72
+ export const requireLiveCustomer = (scope, id, param = "customer") => {
73
+ const entry = scope.account.customers.get(id);
74
+ if (!entry || entry.kind === "deleted")
75
+ throw resourceMissing("customer", id, param);
76
+ return entry.customer;
77
+ };
78
+ export const findCustomer = (scope, id) => {
79
+ const entry = scope.account.customers.get(id);
80
+ return entry?.kind === "live" ? entry.customer : undefined;
81
+ };
82
+ export const customerEmail = (scope, id) => id === null ? null : (findCustomer(scope, id)?.email ?? null);
83
+ export const customerName = (scope, id) => id === null ? null : (findCustomer(scope, id)?.name ?? null);
84
+ export const requirePrice = (scope, id, param = "price") => {
85
+ const price = scope.account.prices.get(id);
86
+ if (!price)
87
+ throw resourceMissing("price", id, param);
88
+ return price;
89
+ };
90
+ /** The amount a price charges for `quantity` units, in cents. */
91
+ export const priceAmount = (price, quantity) => Math.round(Number(price.unit_amount_decimal) * quantity);
92
+ /**
93
+ * Resolve a payment method id, materialising Stripe's documented test payment methods
94
+ * (`pm_card_visa` and friends) the first time they are used.
95
+ */
96
+ export const resolvePaymentMethod = (scope, id) => {
97
+ const existing = scope.account.paymentMethods.get(id);
98
+ if (existing)
99
+ return existing;
100
+ const details = TEST_PAYMENT_METHODS[id];
101
+ if (!details)
102
+ throw resourceMissing("payment_method", id, "payment_method");
103
+ const record = {
104
+ id,
105
+ type: "card",
106
+ created: seconds(scope.now),
107
+ customer: null,
108
+ billing_details: {},
109
+ card: cardPayload(details),
110
+ metadata: {},
111
+ token: id,
112
+ };
113
+ scope.account.paymentMethods.insert(id, record);
114
+ return record;
115
+ };
116
+ export const cardPayload = (details) => ({
117
+ brand: details.brand,
118
+ checks: details.checks,
119
+ country: details.country,
120
+ display_brand: details.brand,
121
+ exp_month: details.exp_month,
122
+ exp_year: details.exp_year,
123
+ fingerprint: opaqueToken(`card:${details.brand}:${details.last4}`, 16),
124
+ funding: details.funding,
125
+ last4: details.last4,
126
+ });
127
+ export const paymentMethodFromToken = (scope, token) => {
128
+ const details = TEST_CARD_TOKENS[token];
129
+ if (!details)
130
+ throw invalidRequest(`No such token: '${token}'`, "card[token]", "resource_missing");
131
+ const id = scope.ids.next("pm_");
132
+ const record = {
133
+ id,
134
+ type: "card",
135
+ created: seconds(scope.now),
136
+ customer: null,
137
+ billing_details: {},
138
+ card: cardPayload(details),
139
+ metadata: {},
140
+ token,
141
+ };
142
+ scope.account.paymentMethods.insert(id, record);
143
+ return { record, details };
144
+ };
145
+ /**
146
+ * Charge a payment intent. Success marks the intent succeeded and records a charge; a declining
147
+ * test token raises the matching `card_error` instead, exactly as Stripe does at confirmation time.
148
+ */
149
+ export const confirmPaymentIntent = (scope, intent, paymentMethodId) => {
150
+ if (intent.status === "canceled")
151
+ throw invalidRequest(`The PaymentIntent has a status of canceled, so it cannot be confirmed.`, undefined, "payment_intent_unexpected_state");
152
+ if (paymentMethodId === null)
153
+ return intent;
154
+ if (intent.capture_method === "manual") {
155
+ const charge = createCharge(scope, {
156
+ amount: intent.amount,
157
+ captured: false,
158
+ currency: intent.currency,
159
+ customer: intent.customer,
160
+ payment_intent: intent.id,
161
+ payment_method: paymentMethodId,
162
+ invoice: intent.invoice,
163
+ metadata: intent.metadata,
164
+ });
165
+ const authorized = {
166
+ ...intent,
167
+ amount_capturable: intent.amount,
168
+ latest_charge: charge.id,
169
+ payment_method: paymentMethodId,
170
+ status: "requires_capture",
171
+ charge_ids: [...intent.charge_ids, charge.id],
172
+ };
173
+ scope.account.paymentIntents.update(intent.id, authorized);
174
+ return authorized;
175
+ }
176
+ const outcome = chargeOutcomeFor(paymentMethodId);
177
+ if (outcome.kind === "card_error") {
178
+ const failed = {
179
+ ...intent,
180
+ payment_method: paymentMethodId,
181
+ status: "requires_payment_method",
182
+ last_payment_error: {
183
+ code: outcome.code,
184
+ decline_code: outcome.decline_code ?? null,
185
+ message: outcome.message,
186
+ type: "card_error",
187
+ },
188
+ };
189
+ scope.account.paymentIntents.update(intent.id, failed);
190
+ throw cardError(outcome.message, outcome.code, outcome.decline_code ?? outcome.code);
191
+ }
192
+ const charge = createCharge(scope, {
193
+ amount: intent.amount,
194
+ currency: intent.currency,
195
+ customer: intent.customer,
196
+ payment_intent: intent.id,
197
+ payment_method: paymentMethodId,
198
+ invoice: intent.invoice,
199
+ metadata: intent.metadata,
200
+ });
201
+ const succeeded = {
202
+ ...intent,
203
+ amount_received: intent.amount,
204
+ amount_capturable: 0,
205
+ latest_charge: charge.id,
206
+ payment_method: paymentMethodId,
207
+ status: "succeeded",
208
+ charge_ids: [...intent.charge_ids, charge.id],
209
+ };
210
+ scope.account.paymentIntents.update(intent.id, succeeded);
211
+ return succeeded;
212
+ };
213
+ export const createCharge = (scope, input) => {
214
+ const id = scope.ids.next("ch_");
215
+ const captured = input.captured ?? true;
216
+ const record = {
217
+ id,
218
+ amount: input.amount,
219
+ amount_captured: captured ? input.amount : 0,
220
+ amount_refunded: 0,
221
+ captured,
222
+ created: seconds(scope.now),
223
+ currency: input.currency,
224
+ customer: input.customer,
225
+ description: null,
226
+ disputed: false,
227
+ invoice: input.invoice ?? null,
228
+ metadata: input.metadata ?? {},
229
+ paid: true,
230
+ payment_intent: input.payment_intent,
231
+ payment_method: input.payment_method,
232
+ refunded: false,
233
+ status: "succeeded",
234
+ refund_ids: [],
235
+ };
236
+ scope.account.charges.insert(id, record);
237
+ return record;
238
+ };
239
+ /** `<pi>_secret_<opaque>`: callers recover the intent id by splitting on `_secret_`. */
240
+ export const clientSecretFor = (id) => `${id}_secret_${opaqueToken(`${id}:secret`, 24)}`;
241
+ /**
242
+ * A checkout session completes when its payment intent (or setup intent) succeeds: the session
243
+ * flips to `complete` with the matching payment status and Stripe emits
244
+ * `checkout.session.completed`.
245
+ */
246
+ export const completeSessionsForIntent = (scope, intent) => {
247
+ for (const entry of scope.account.checkoutSessions.list({ order: "oldest" })) {
248
+ const session = entry.value;
249
+ if (session.status !== "open")
250
+ continue;
251
+ const matches = (intent.paymentIntent !== undefined && session.payment_intent === intent.paymentIntent) ||
252
+ (intent.setupIntent !== undefined && session.setup_intent === intent.setupIntent);
253
+ if (!matches)
254
+ continue;
255
+ const completed = {
256
+ ...session,
257
+ payment_status: session.mode === "setup" ? "no_payment_required" : "paid",
258
+ status: "complete",
259
+ };
260
+ scope.account.checkoutSessions.update(session.id, completed);
261
+ scope.emit("checkout.session.completed", renderCheckoutSession(completed));
262
+ }
263
+ };
264
+ /**
265
+ * Open an invoice for the given lines: Stripe's `subscription_create` / `manual` invoices start
266
+ * open with `amount_due` equal to the summed lines, and emit `invoice.created`.
267
+ */
268
+ export const openInvoice = (scope, input) => {
269
+ const id = scope.ids.next("in_");
270
+ const created = seconds(scope.now);
271
+ const subtotal = input.lines.reduce((total, line) => total + line.amount, 0);
272
+ const customer = input.customer === null ? undefined : findCustomer(scope, input.customer);
273
+ const previous = scope.account.invoices
274
+ .list({ order: "oldest" })
275
+ .filter((entry) => entry.value.customer === input.customer).length;
276
+ const prefix = customer?.invoice_prefix ?? "MOCKING";
277
+ const period = input.period ?? { start: created, end: created };
278
+ const record = {
279
+ id,
280
+ amount_due: subtotal,
281
+ amount_paid: 0,
282
+ amount_remaining: subtotal,
283
+ attempt_count: 0,
284
+ attempted: false,
285
+ auto_advance: true,
286
+ billing_reason: input.billingReason,
287
+ charge: null,
288
+ collection_method: "charge_automatically",
289
+ created,
290
+ currency: input.lines[0]?.currency ?? "usd",
291
+ customer: input.customer,
292
+ customer_email: customer?.email ?? null,
293
+ customer_name: customer?.name ?? null,
294
+ description: null,
295
+ discount_ids: [],
296
+ due_date: null,
297
+ ending_balance: 0,
298
+ hosted_invoice_url: `https://invoice.stripe.com/i/${id}`,
299
+ invoice_pdf: `https://pay.stripe.com/invoice/${id}/pdf`,
300
+ metadata: input.metadata ?? {},
301
+ next_payment_attempt: null,
302
+ number: `${prefix}-${String(previous + 1).padStart(4, "0")}`,
303
+ paid: false,
304
+ payment_intent: null,
305
+ period_end: period.end,
306
+ period_start: period.start,
307
+ status: "open",
308
+ status_transitions: {
309
+ finalized_at: created,
310
+ marked_uncollectible_at: null,
311
+ paid_at: null,
312
+ voided_at: null,
313
+ },
314
+ subscription: input.subscription,
315
+ subtotal,
316
+ total: subtotal,
317
+ lines: input.lines,
318
+ };
319
+ scope.account.invoices.insert(id, record);
320
+ scope.emit("invoice.created", renderInvoice(record, scope.account));
321
+ return record;
322
+ };
323
+ export const requireIntent = (scope, id, param = "intent") => {
324
+ const intent = scope.account.paymentIntents.get(id);
325
+ if (!intent)
326
+ throw resourceMissing("payment_intent", id, param);
327
+ return intent;
328
+ };
329
+ export const requireCharge = (scope, id, param = "charge") => {
330
+ const charge = scope.account.charges.get(id);
331
+ if (!charge)
332
+ throw resourceMissing("charge", id, param);
333
+ return charge;
334
+ };
335
+ export const requireInvoice = (scope, id, param = "invoice") => {
336
+ const invoice = scope.account.invoices.get(id);
337
+ if (!invoice)
338
+ throw resourceMissing("invoice", id, param);
339
+ return invoice;
340
+ };
341
+ export const requireSubscription = (scope, id, param = "subscription_exposed_id") => {
342
+ const subscription = scope.account.subscriptions.get(id);
343
+ if (!subscription)
344
+ throw resourceMissing("subscription", id, param);
345
+ return subscription;
346
+ };
347
+ export const requireSession = (scope, id, param = "session") => {
348
+ const session = scope.account.checkoutSessions.get(id);
349
+ if (!session)
350
+ throw resourceMissing("checkout.session", id, param);
351
+ return session;
352
+ };
353
+ export const requireCoupon = (scope, id, param = "coupon") => {
354
+ const coupon = scope.account.coupons.get(id);
355
+ if (!coupon)
356
+ throw resourceMissing("coupon", id, param);
357
+ return coupon;
358
+ };
359
+ /** Apply a customer's balance delta and record the matching balance transaction. */
360
+ export const applyBalanceTransaction = (scope, input) => {
361
+ const id = scope.ids.next("cbtxn_");
362
+ const ending = input.customer.balance + input.amount;
363
+ scope.account.customers.update(input.customer.id, {
364
+ kind: "live",
365
+ customer: { ...input.customer, balance: ending },
366
+ });
367
+ scope.account.balanceTransactions.insert(id, {
368
+ id,
369
+ amount: input.amount,
370
+ created: seconds(scope.now),
371
+ credit_note: null,
372
+ currency: input.currency,
373
+ customer: input.customer.id,
374
+ description: input.description,
375
+ ending_balance: ending,
376
+ invoice: input.invoice ?? null,
377
+ metadata: input.metadata,
378
+ type: input.type,
379
+ });
380
+ return { id, ending_balance: ending };
381
+ };
382
+ /** Metadata merge with Stripe's `""`-clears semantics. */
383
+ export const mergeRecordMetadata = (current, incoming) => incoming === undefined ? current : mergeMetadata(current, incoming);
384
+ export const adjustmentsByReason = (reason) => reason === null ? [] : [{ amount: 0, discount: null, reason }];
385
+ /** A draft invoice's money fields are derived from its lines. */
386
+ export const recomputeInvoice = (invoice) => {
387
+ const subtotal = invoice.lines.reduce((total, line) => total + line.amount, 0);
388
+ const paid = invoice.amount_paid;
389
+ return {
390
+ ...invoice,
391
+ subtotal,
392
+ total: subtotal,
393
+ amount_due: Math.max(0, subtotal - paid),
394
+ amount_remaining: Math.max(0, subtotal - paid),
395
+ };
396
+ };
397
+ export const invoiceLineFromItem = (scope, item) => ({
398
+ id: scope.ids.next("il_"),
399
+ amount: item.amount,
400
+ currency: item.currency,
401
+ description: item.description,
402
+ discount_amounts: [],
403
+ invoice_item: item.id,
404
+ metadata: item.metadata,
405
+ period: { start: seconds(scope.now), end: seconds(scope.now) },
406
+ price: item.price,
407
+ quantity: item.quantity,
408
+ proration: false,
409
+ subtotal: item.amount,
410
+ type: "invoiceitem",
411
+ });
412
+ export const invoiceLineFromPrice = (scope, price, quantity) => ({
413
+ id: scope.ids.next("il_"),
414
+ amount: priceAmount(price, quantity),
415
+ currency: price.currency,
416
+ description: null,
417
+ discount_amounts: [],
418
+ invoice_item: null,
419
+ metadata: {},
420
+ period: { start: seconds(scope.now), end: seconds(scope.now) },
421
+ price: price.id,
422
+ quantity,
423
+ proration: false,
424
+ subtotal: priceAmount(price, quantity),
425
+ type: "subscription",
426
+ });
427
+ export const createDiscount = (scope, input) => {
428
+ const id = scope.ids.next("di_");
429
+ const record = {
430
+ id,
431
+ coupon: input.coupon,
432
+ promotion_code: input.promotion_code ?? null,
433
+ customer: input.customer ?? null,
434
+ subscription: input.subscription ?? null,
435
+ start: seconds(scope.now),
436
+ end: input.end ?? null,
437
+ };
438
+ scope.account.discounts.insert(id, record);
439
+ return record;
440
+ };
441
+ export const subscriptionPeriod = (now, interval, count) => {
442
+ const start = seconds(now);
443
+ const secondsPerDay = 86_400;
444
+ const days = interval === "day"
445
+ ? count
446
+ : interval === "week"
447
+ ? count * 7
448
+ : interval === "month"
449
+ ? count * 30
450
+ : count * 365;
451
+ return { start, end: start + days * secondsPerDay };
452
+ };
453
+ export const requireParam = (params, key) => {
454
+ const value = params[key];
455
+ if (typeof value !== "string" || value === "")
456
+ throw parameterMissing(key);
457
+ return value;
458
+ };
459
+ export const renderIntentForEvent = (intent) => renderPaymentIntent(intent);
460
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type OperationHandler } from "@crvouga/mockingbird-service";
2
+ import { type Services } from "./internal.js";
3
+ export declare const invoiceItemHandlers: (services: Services) => Record<string, OperationHandler>;
4
+ //# sourceMappingURL=invoice-items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-items.d.ts","sourceRoot":"","sources":["../src/invoice-items.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAIlF,OAAO,EAUL,KAAK,QAAQ,EACd,MAAM,eAAe,CAAA;AAyBtB,eAAO,MAAM,mBAAmB,GAAI,UAAU,QAAQ,KAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAqKvF,CAAA"}