@cogenta/commerce 0.2.0 → 0.4.3

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 (95) hide show
  1. package/dist/admin/permissions.d.ts +8 -0
  2. package/dist/admin/permissions.d.ts.map +1 -1
  3. package/dist/admin/permissions.js +1 -0
  4. package/dist/admin/permissions.js.map +1 -1
  5. package/dist/admin/router.d.ts +47 -5
  6. package/dist/admin/router.d.ts.map +1 -1
  7. package/dist/admin/router.js +942 -24
  8. package/dist/admin/router.js.map +1 -1
  9. package/dist/cart/store.d.ts +23 -0
  10. package/dist/cart/store.d.ts.map +1 -1
  11. package/dist/cart/store.js +49 -2
  12. package/dist/cart/store.js.map +1 -1
  13. package/dist/catalog/csv.d.ts +29 -0
  14. package/dist/catalog/csv.d.ts.map +1 -0
  15. package/dist/catalog/csv.js +396 -0
  16. package/dist/catalog/csv.js.map +1 -0
  17. package/dist/catalog/store.d.ts +24 -4
  18. package/dist/catalog/store.d.ts.map +1 -1
  19. package/dist/catalog/store.js +238 -11
  20. package/dist/catalog/store.js.map +1 -1
  21. package/dist/catalog/types.d.ts +92 -0
  22. package/dist/catalog/types.d.ts.map +1 -1
  23. package/dist/catalog/types.js +20 -0
  24. package/dist/catalog/types.js.map +1 -1
  25. package/dist/coupon/store.d.ts +63 -5
  26. package/dist/coupon/store.d.ts.map +1 -1
  27. package/dist/coupon/store.js +140 -7
  28. package/dist/coupon/store.js.map +1 -1
  29. package/dist/customer/store.d.ts +17 -0
  30. package/dist/customer/store.d.ts.map +1 -1
  31. package/dist/customer/store.js +26 -0
  32. package/dist/customer/store.js.map +1 -1
  33. package/dist/index.d.ts +18 -8
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +9 -3
  36. package/dist/index.js.map +1 -1
  37. package/dist/invoice/credit-note.d.ts +45 -0
  38. package/dist/invoice/credit-note.d.ts.map +1 -0
  39. package/dist/invoice/credit-note.js +109 -0
  40. package/dist/invoice/credit-note.js.map +1 -0
  41. package/dist/invoice/sequence.d.ts +21 -0
  42. package/dist/invoice/sequence.d.ts.map +1 -0
  43. package/dist/invoice/sequence.js +64 -0
  44. package/dist/invoice/sequence.js.map +1 -0
  45. package/dist/invoice/store.d.ts +23 -1
  46. package/dist/invoice/store.d.ts.map +1 -1
  47. package/dist/invoice/store.js +23 -56
  48. package/dist/invoice/store.js.map +1 -1
  49. package/dist/order/csv.d.ts +24 -0
  50. package/dist/order/csv.d.ts.map +1 -0
  51. package/dist/order/csv.js +42 -0
  52. package/dist/order/csv.js.map +1 -0
  53. package/dist/order/notify.d.ts +65 -0
  54. package/dist/order/notify.d.ts.map +1 -0
  55. package/dist/order/notify.js +180 -0
  56. package/dist/order/notify.js.map +1 -0
  57. package/dist/order/store.d.ts +58 -1
  58. package/dist/order/store.d.ts.map +1 -1
  59. package/dist/order/store.js +145 -10
  60. package/dist/order/store.js.map +1 -1
  61. package/dist/order/types.d.ts +35 -1
  62. package/dist/order/types.d.ts.map +1 -1
  63. package/dist/order/types.js +2 -0
  64. package/dist/order/types.js.map +1 -1
  65. package/dist/payment/paypal.d.ts +9 -0
  66. package/dist/payment/paypal.d.ts.map +1 -0
  67. package/dist/payment/paypal.js +583 -0
  68. package/dist/payment/paypal.js.map +1 -0
  69. package/dist/payment/registry.d.ts +15 -6
  70. package/dist/payment/registry.d.ts.map +1 -1
  71. package/dist/payment/registry.js +17 -6
  72. package/dist/payment/registry.js.map +1 -1
  73. package/dist/payment/types.d.ts +6 -0
  74. package/dist/payment/types.d.ts.map +1 -1
  75. package/dist/shipping/store.d.ts +29 -3
  76. package/dist/shipping/store.d.ts.map +1 -1
  77. package/dist/shipping/store.js +68 -4
  78. package/dist/shipping/store.js.map +1 -1
  79. package/dist/subscription/renewal-notifier.d.ts +17 -0
  80. package/dist/subscription/renewal-notifier.d.ts.map +1 -0
  81. package/dist/subscription/renewal-notifier.js +33 -0
  82. package/dist/subscription/renewal-notifier.js.map +1 -0
  83. package/dist/subscription/store.d.ts +126 -3
  84. package/dist/subscription/store.d.ts.map +1 -1
  85. package/dist/subscription/store.js +348 -8
  86. package/dist/subscription/store.js.map +1 -1
  87. package/dist/tables.d.ts +17 -0
  88. package/dist/tables.d.ts.map +1 -1
  89. package/dist/tables.js +273 -0
  90. package/dist/tables.js.map +1 -1
  91. package/dist/tax/store.d.ts +20 -0
  92. package/dist/tax/store.d.ts.map +1 -1
  93. package/dist/tax/store.js +51 -7
  94. package/dist/tax/store.js.map +1 -1
  95. package/package.json +3 -2
@@ -3,8 +3,52 @@ import { assertCurrency, assertMinor } from '../money.js';
3
3
  import { referenceFrom } from '../order/store.js';
4
4
  import { toInt, toNullableText, toText } from '../rows.js';
5
5
  import { TABLES } from '../tables.js';
6
- export const SUBSCRIPTION_STATUSES = ['active', 'paused', 'cancelled'];
6
+ /**
7
+ * `past_due` (fiche 53 task 3) sits between `active` and `paused`: a
8
+ * subscription lands there the instant a renewal's payment fails, and
9
+ * `runBilling`'s own due-query (`status = 'active'`) then skips it for every
10
+ * subsequent period until the dunning cycle resolves — never suspended on the
11
+ * first failure, and never billed again mid-retry either.
12
+ */
13
+ export const SUBSCRIPTION_STATUSES = ['active', 'past_due', 'paused', 'cancelled'];
14
+ /**
15
+ * The default dunning calendar (fiche 53 § "décision à trancher"): retry a
16
+ * failed renewal payment 1, 3 and 7 days after the first failure, then
17
+ * suspend. Proposed by the fiche itself and used as-is — documented here
18
+ * rather than re-litigated, and configurable per store via
19
+ * `SubscriptionStoreOptions.dunningScheduleDays`.
20
+ */
21
+ export const DEFAULT_DUNNING_SCHEDULE_DAYS = [1, 3, 7];
22
+ /** How long a subscriber is warned before a renewal — fiche 53 task 5, configurable per store. */
23
+ export const DEFAULT_RENEWAL_NOTICE_DAYS = 3;
24
+ const DAY_MS = 24 * 60 * 60 * 1000;
7
25
  export const INTERVAL_UNITS = ['day', 'week', 'month', 'year'];
26
+ function decodeDunning(row) {
27
+ return {
28
+ subscriptionId: toText(row.subscription_id, 'dunning.subscription_id'),
29
+ orderId: toText(row.order_id, 'dunning.order_id'),
30
+ periodKey: toText(row.period_key, 'dunning.period_key'),
31
+ failureCount: toInt(row.failure_count, 'dunning.failure_count'),
32
+ firstFailedAt: toText(row.first_failed_at, 'dunning.first_failed_at'),
33
+ nextRetryAt: toNullableText(row.next_retry_at),
34
+ lastReason: toNullableText(row.last_reason),
35
+ suspendedAt: toNullableText(row.suspended_at),
36
+ createdAt: toText(row.created_at, 'dunning.created_at'),
37
+ updatedAt: toText(row.updated_at, 'dunning.updated_at'),
38
+ };
39
+ }
40
+ /**
41
+ * When the next dunning retry falls, given how many attempts have failed so
42
+ * far (including the very first, at billing time). `null` means the
43
+ * schedule is exhausted — the caller suspends rather than scheduling again.
44
+ */
45
+ function nextRetryAfter(firstFailedAt, failureCount, scheduleDays) {
46
+ const index = failureCount - 1;
47
+ const offsetDays = scheduleDays[index];
48
+ if (offsetDays === undefined)
49
+ return null;
50
+ return new Date(Date.parse(firstFailedAt) + offsetDays * DAY_MS).toISOString();
51
+ }
8
52
  function decode(row) {
9
53
  return {
10
54
  id: toText(row.id, 'subscription.id'),
@@ -60,12 +104,16 @@ export function advancePeriod(from, unit, count) {
60
104
  const lastDay = new Date(Date.UTC(targetYear, targetMonth + 1, 0)).getUTCDate();
61
105
  return new Date(Date.UTC(targetYear, targetMonth, Math.min(day, lastDay), start.getUTCHours(), start.getUTCMinutes(), start.getUTCSeconds(), start.getUTCMilliseconds())).toISOString();
62
106
  }
63
- export function createSubscriptionStore(db, dependencies, now = Date.now) {
107
+ export function createSubscriptionStore(db, dependencies, now = Date.now, options = {}) {
64
108
  const d = db.dialect;
65
109
  const subscriptions = identifier(TABLES.subscriptions, d);
66
110
  const cycles = identifier(TABLES.subscriptionCycles, d);
67
111
  const orders = identifier(TABLES.orders, d);
68
112
  const orderLines = identifier(TABLES.orderLines, d);
113
+ const dunningTable = identifier(TABLES.subscriptionDunning, d);
114
+ const renewalNotices = identifier(TABLES.subscriptionRenewalNotices, d);
115
+ const scheduleDays = options.dunningScheduleDays ?? DEFAULT_DUNNING_SCHEDULE_DAYS;
116
+ const renewalNoticeDays = options.renewalNoticeDays ?? DEFAULT_RENEWAL_NOTICE_DAYS;
69
117
  const stamp = () => new Date(now()).toISOString();
70
118
  async function read(id, executor = db) {
71
119
  const result = await executor.query(sql `select * from ${subscriptions} where id = ${id}`);
@@ -145,7 +193,7 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
145
193
  next_billing_at = ${periodEnd},
146
194
  updated_at = ${at}
147
195
  where id = ${subscription.id}`);
148
- return { orderId };
196
+ return { orderId, periodKey };
149
197
  }, { immediate: true });
150
198
  }
151
199
  catch (error) {
@@ -178,6 +226,52 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
178
226
  throw error;
179
227
  }
180
228
  }
229
+ /**
230
+ * Opens a dunning cycle for a renewal whose payment just failed.
231
+ *
232
+ * Keyed by `subscription_id`, the table's own primary key — at most one
233
+ * open cycle per subscription, ever. Because this is only ever reached
234
+ * right after `billOne` succeeds for a period (gated by that period's own
235
+ * `period_key` uniqueness, claimed once), a duplicate call for the same
236
+ * period cannot happen in ordinary operation; the `insert`'s own primary
237
+ * key still refuses a genuine double-call rather than silently
238
+ * overwriting an in-progress cycle's history.
239
+ */
240
+ async function beginDunning(subscriptionId, orderId, periodKey, reason) {
241
+ const at = stamp();
242
+ const firstRetry = nextRetryAfter(at, 1, scheduleDays);
243
+ const inserted = await db
244
+ .query(sql `
245
+ insert into ${dunningTable} (subscription_id, order_id, period_key, failure_count,
246
+ first_failed_at, next_retry_at, last_reason, suspended_at,
247
+ created_at, updated_at)
248
+ values (${subscriptionId}, ${orderId}, ${periodKey}, ${1}, ${at}, ${firstRetry}, ${reason},
249
+ ${null}, ${at}, ${at})`)
250
+ .then(() => true)
251
+ .catch(() => false);
252
+ if (!inserted)
253
+ return;
254
+ await db.query(sql `
255
+ update ${subscriptions} set status = ${'past_due'}, updated_at = ${at}
256
+ where id = ${subscriptionId} and status = ${'active'}`);
257
+ await dependencies.orders.record(orderId, 'payment_failed', { note: reason });
258
+ }
259
+ /** Never throws: a renewal that produced an order must not be lost because the gateway is unreachable. */
260
+ async function attemptPayment(orderId) {
261
+ try {
262
+ const payment = await dependencies.payments.start(orderId);
263
+ if (payment.status === 'failed') {
264
+ return { ok: false, reason: 'The payment was declined.' };
265
+ }
266
+ return { ok: true };
267
+ }
268
+ catch (error) {
269
+ return {
270
+ ok: false,
271
+ reason: error instanceof Error ? error.message : 'The payment attempt failed.',
272
+ };
273
+ }
274
+ }
181
275
  return {
182
276
  create: async (input) => {
183
277
  const variant = await dependencies.catalog.readVariant(input.variantId);
@@ -231,8 +325,15 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
231
325
  return result.rows.map(decode);
232
326
  },
233
327
  pause: async (id) => {
234
- await load(id);
235
- await db.query(sql `update ${subscriptions} set status = ${'paused'}, updated_at = ${stamp()} where id = ${id} and status = ${'active'}`);
328
+ const subscription = await load(id);
329
+ // A subscriber in dunning can be paused too stopping the retries is
330
+ // exactly what a human pausing a past-due subscription means.
331
+ await db.query(sql `
332
+ update ${subscriptions} set status = ${'paused'}, updated_at = ${stamp()}
333
+ where id = ${id} and status in (${'active'}, ${'past_due'})`);
334
+ if (subscription.status === 'past_due') {
335
+ await db.query(sql `delete from ${dunningTable} where subscription_id = ${id}`);
336
+ }
236
337
  return load(id);
237
338
  },
238
339
  resume: async (id) => {
@@ -246,11 +347,14 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
246
347
  }
247
348
  // Billing resumes from now, not from where it was paused. Charging a
248
349
  // subscriber for the months they were paused is exactly what pausing was
249
- // supposed to prevent.
350
+ // supposed to prevent. A dunning cycle in progress is dropped for the
351
+ // same reason: a resumed subscription starts a fresh period, not a
352
+ // retry of the one that failed.
250
353
  const at = stamp();
251
354
  await db.query(sql `
252
355
  update ${subscriptions} set status = ${'active'}, next_billing_at = ${at}, updated_at = ${at}
253
356
  where id = ${id}`);
357
+ await db.query(sql `delete from ${dunningTable} where subscription_id = ${id}`);
254
358
  return load(id);
255
359
  },
256
360
  cancel: async (id) => {
@@ -259,6 +363,7 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
259
363
  await db.query(sql `
260
364
  update ${subscriptions} set status = ${'cancelled'}, cancelled_at = ${at}, updated_at = ${at}
261
365
  where id = ${id} and cancelled_at is null`);
366
+ await db.query(sql `delete from ${dunningTable} where subscription_id = ${id}`);
262
367
  return load(id);
263
368
  },
264
369
  cycles: async (id) => {
@@ -287,8 +392,15 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
287
392
  billed.push({ subscriptionId: subscription.id, orderId: outcome.orderId });
288
393
  // The renewal starts a payment through the same store as any other
289
394
  // order, so a subscription with no gateway configured produces bank
290
- // transfer instructions rather than failing (R2).
291
- await dependencies.payments.start(outcome.orderId);
395
+ // transfer instructions rather than failing (R2). A failure here —
396
+ // declined, or the gateway unreachable — opens a dunning cycle
397
+ // rather than being silently dropped or thrown past the caller
398
+ // (fiche 53 task 3): never a first-failure suspension, only ever
399
+ // the start of the retry schedule.
400
+ const attempt = await attemptPayment(outcome.orderId);
401
+ if (!attempt.ok) {
402
+ await beginDunning(subscription.id, outcome.orderId, outcome.periodKey, attempt.reason);
403
+ }
292
404
  }
293
405
  else {
294
406
  skipped.push({ subscriptionId: subscription.id, reason: outcome.skipped });
@@ -296,8 +408,236 @@ export function createSubscriptionStore(db, dependencies, now = Date.now) {
296
408
  }
297
409
  return { billed, skipped };
298
410
  },
411
+ dunning: async (id) => {
412
+ const result = await db.query(sql `select * from ${dunningTable} where subscription_id = ${id}`);
413
+ const row = result.rows[0];
414
+ return row === undefined ? null : decodeDunning(row);
415
+ },
416
+ runDunning: async (options) => {
417
+ const due = await db.query(sql `
418
+ select * from ${dunningTable}
419
+ where next_retry_at is not null and next_retry_at <= ${stamp()}
420
+ order by next_retry_at asc`);
421
+ const recovered = [];
422
+ const retried = [];
423
+ const suspended = [];
424
+ for (const row of due.rows.slice(0, options?.limit ?? 200)) {
425
+ const state = decodeDunning(row);
426
+ // Compare-and-set claim: only one caller can move `next_retry_at`
427
+ // away from the exact value just read. The loser's `rowsAffected`
428
+ // comes back 0 and it moves on — the same shape as the scheduler
429
+ // lock in `@cogenta/schema` (`SCHEDULED_TASK_CLAIMS_TABLE`).
430
+ const claim = await db.query(sql `
431
+ update ${dunningTable} set next_retry_at = ${null}, updated_at = ${stamp()}
432
+ where subscription_id = ${state.subscriptionId} and next_retry_at = ${state.nextRetryAt}`);
433
+ if (claim.rowsAffected === 0)
434
+ continue;
435
+ const attempt = await attemptPayment(state.orderId);
436
+ if (attempt.ok) {
437
+ await db.query(sql `delete from ${dunningTable} where subscription_id = ${state.subscriptionId}`);
438
+ await db.query(sql `
439
+ update ${subscriptions} set status = ${'active'}, updated_at = ${stamp()}
440
+ where id = ${state.subscriptionId} and status = ${'past_due'}`);
441
+ recovered.push({ subscriptionId: state.subscriptionId, orderId: state.orderId });
442
+ continue;
443
+ }
444
+ const failureCount = state.failureCount + 1;
445
+ const nextRetryAt = nextRetryAfter(state.firstFailedAt, failureCount, scheduleDays);
446
+ if (nextRetryAt === null) {
447
+ const at = stamp();
448
+ await db.query(sql `
449
+ update ${dunningTable}
450
+ set failure_count = ${failureCount}, next_retry_at = ${null},
451
+ last_reason = ${attempt.reason}, suspended_at = ${at}, updated_at = ${at}
452
+ where subscription_id = ${state.subscriptionId}`);
453
+ // Auto-suspended, never auto-cancelled: the schedule is exhausted,
454
+ // not the relationship. A human decides what happens next.
455
+ await db.query(sql `
456
+ update ${subscriptions} set status = ${'paused'}, updated_at = ${at}
457
+ where id = ${state.subscriptionId} and status = ${'past_due'}`);
458
+ await dependencies.orders.record(state.orderId, 'note', {
459
+ note: 'Subscription automatically suspended after exhausting the dunning schedule.',
460
+ });
461
+ suspended.push({ subscriptionId: state.subscriptionId, reason: attempt.reason });
462
+ }
463
+ else {
464
+ await db.query(sql `
465
+ update ${dunningTable}
466
+ set failure_count = ${failureCount}, next_retry_at = ${nextRetryAt},
467
+ last_reason = ${attempt.reason}, updated_at = ${stamp()}
468
+ where subscription_id = ${state.subscriptionId}`);
469
+ retried.push({ subscriptionId: state.subscriptionId, reason: attempt.reason });
470
+ }
471
+ }
472
+ return { recovered, retried, suspended };
473
+ },
474
+ changePlan: async (id, newVariantId, changeOptions) => {
475
+ const subscription = await load(id);
476
+ if (subscription.status === 'cancelled') {
477
+ throw new CogentaError({
478
+ code: 'COMMERCE_SUBSCRIPTION_INVALID',
479
+ message: 'A cancelled subscription has no plan left to change.',
480
+ hint: 'Create a new subscription instead.',
481
+ });
482
+ }
483
+ const variant = await dependencies.catalog.readVariant(newVariantId);
484
+ if (variant === null) {
485
+ throw new CogentaError({
486
+ code: 'COMMERCE_VARIANT_NOT_FOUND',
487
+ message: 'This product variant does not exist.',
488
+ hint: 'A subscription needs something to deliver.',
489
+ });
490
+ }
491
+ if (variant.currency !== subscription.currency) {
492
+ throw new CogentaError({
493
+ code: 'COMMERCE_CURRENCY_MISMATCH',
494
+ message: `This subscription is billed in ${subscription.currency}; "${variant.title}" is priced in ${variant.currency}.`,
495
+ hint: 'Changing currency mid-subscription is not supported — cancel and start a new one.',
496
+ });
497
+ }
498
+ const quantity = changeOptions?.quantity ?? subscription.quantity;
499
+ const prorate = changeOptions?.prorate ?? true;
500
+ let prorationMinor = 0;
501
+ if (prorate) {
502
+ const periodLengthMs = Date.parse(subscription.currentPeriodEnd) - Date.parse(subscription.currentPeriodStart);
503
+ const remainingMs = Math.max(0, Date.parse(subscription.currentPeriodEnd) - now());
504
+ if (periodLengthMs > 0) {
505
+ const oldValue = subscription.priceMinor * subscription.quantity;
506
+ const newValue = variant.priceMinor * quantity;
507
+ prorationMinor = Math.round(((newValue - oldValue) * remainingMs) / periodLengthMs);
508
+ }
509
+ }
510
+ let prorationOrderId = null;
511
+ if (prorationMinor > 0) {
512
+ const customer = await dependencies.customers.read(subscription.customerId);
513
+ if (customer !== null) {
514
+ const orderId = newId(now);
515
+ const at = stamp();
516
+ await db.transaction(async (tx) => {
517
+ await tx.query(sql `
518
+ insert into ${orders} (id, reference, customer_id, email, status, currency,
519
+ subtotal_minor, discount_minor, shipping_minor, tax_minor, total_minor,
520
+ coupon_code, shipping_country, shipping_region,
521
+ shipping_method_id, shipping_method_label,
522
+ placed_at, updated_at, subscription_id)
523
+ values (${orderId}, ${referenceFrom(orderId)}, ${customer.id}, ${customer.email},
524
+ ${'pending'}, ${subscription.currency},
525
+ ${prorationMinor}, ${0}, ${0}, ${0}, ${prorationMinor},
526
+ ${null}, ${subscription.shippingCountry}, ${subscription.shippingRegion},
527
+ ${null}, ${null}, ${at}, ${at}, ${subscription.id})`);
528
+ await tx.query(sql `
529
+ insert into ${orderLines} (id, order_id, variant_id, sku, title, quantity,
530
+ unit_price_minor, subtotal_minor, discount_minor,
531
+ tax_minor, tax_rate_bp, total_minor, position)
532
+ values (${newId(now)}, ${orderId}, ${variant.id}, ${variant.sku},
533
+ ${'Plan change: prorated for the rest of the current period'}, ${1},
534
+ ${prorationMinor}, ${prorationMinor}, ${0}, ${0}, ${0}, ${prorationMinor}, ${0})`);
535
+ }, { immediate: true });
536
+ await dependencies.orders.record(orderId, 'placed', {
537
+ note: 'Prorated charge for a mid-cycle plan change.',
538
+ });
539
+ // Attempted, never required to succeed synchronously: a failure
540
+ // here leaves a real, visible `pending` order a human can settle or
541
+ // retry from the orders screen — the plan change itself still
542
+ // applies, exactly as an upgrade paid by invoice would.
543
+ await attemptPayment(orderId);
544
+ prorationOrderId = orderId;
545
+ }
546
+ }
547
+ await db.query(sql `
548
+ update ${subscriptions}
549
+ set variant_id = ${variant.id}, quantity = ${quantity}, price_minor = ${variant.priceMinor},
550
+ currency = ${variant.currency}, updated_at = ${stamp()}
551
+ where id = ${id}`);
552
+ return { subscription: await load(id), prorationMinor, prorationOrderId };
553
+ },
554
+ sendRenewalNotices: async (renewalOptions) => {
555
+ if (dependencies.notifyRenewal === undefined)
556
+ return { notified: [] };
557
+ const threshold = new Date(now() + renewalNoticeDays * DAY_MS).toISOString();
558
+ const at = stamp();
559
+ const due = await db.query(sql `
560
+ select * from ${subscriptions}
561
+ where status = ${'active'} and next_billing_at <= ${threshold} and next_billing_at > ${at}
562
+ order by next_billing_at asc`);
563
+ const notified = [];
564
+ for (const row of due.rows.slice(0, renewalOptions?.limit ?? 200)) {
565
+ const subscription = decode(row);
566
+ const periodKey = `${subscription.id}:${subscription.nextBillingAt}`;
567
+ // The insert itself is the idempotency claim — a repeat run for the
568
+ // same upcoming period hits the primary key and is swallowed.
569
+ const claimed = await db
570
+ .query(sql `
571
+ insert into ${renewalNotices} (subscription_id, period_key, sent_at)
572
+ values (${subscription.id}, ${periodKey}, ${at})`)
573
+ .then(() => true)
574
+ .catch(() => false);
575
+ if (!claimed)
576
+ continue;
577
+ const customer = await dependencies.customers.read(subscription.customerId);
578
+ if (customer === null)
579
+ continue;
580
+ const daysUntilRenewal = Math.max(0, Math.round((Date.parse(subscription.nextBillingAt) - now()) / DAY_MS));
581
+ await dependencies.notifyRenewal({ subscription, customer, daysUntilRenewal });
582
+ notified.push({ subscriptionId: subscription.id });
583
+ }
584
+ return { notified };
585
+ },
586
+ metrics: async () => {
587
+ const counts = await db.query(sql `
588
+ select status, count(*) as n from ${subscriptions} group by status`);
589
+ const byStatus = {};
590
+ for (const row of counts.rows) {
591
+ byStatus[toText(row.status, 'subscription_metrics.status')] = toInt(row.n, 'subscription_metrics.n');
592
+ }
593
+ const active = byStatus.active ?? 0;
594
+ const pastDue = byStatus.past_due ?? 0;
595
+ const paused = byStatus.paused ?? 0;
596
+ const cancelled = byStatus.cancelled ?? 0;
597
+ // MRR: every billable (active/past_due) subscription's price,
598
+ // normalised to a monthly cadence. Weeks and days are approximated via
599
+ // a 365.25-day year, which is accurate enough for a dashboard figure
600
+ // and never used to charge anyone (billing itself always uses
601
+ // `advancePeriod`'s calendar-exact arithmetic).
602
+ const billable = await db.query(sql `
603
+ select * from ${subscriptions} where status in (${'active'}, ${'past_due'})`);
604
+ const mrrByCurrency = new Map();
605
+ for (const row of billable.rows) {
606
+ const subscription = decode(row);
607
+ const monthly = monthlyValueMinor(subscription);
608
+ mrrByCurrency.set(subscription.currency, (mrrByCurrency.get(subscription.currency) ?? 0) + monthly);
609
+ }
610
+ const totalEver = active + pastDue + paused + cancelled;
611
+ const churnRate = totalEver === 0 ? 0 : cancelled / totalEver;
612
+ return {
613
+ active,
614
+ pastDue,
615
+ paused,
616
+ cancelled,
617
+ mrrMinor: [...mrrByCurrency.entries()].map(([currency, amountMinor]) => ({
618
+ currency,
619
+ amountMinor: Math.round(amountMinor),
620
+ })),
621
+ churnRate,
622
+ };
623
+ },
299
624
  };
300
625
  }
626
+ /** A subscription's price normalised to a monthly cadence, for MRR. */
627
+ function monthlyValueMinor(subscription) {
628
+ const value = subscription.priceMinor * subscription.quantity;
629
+ const daysPerMonth = 365.25 / 12;
630
+ switch (subscription.intervalUnit) {
631
+ case 'day':
632
+ return (value / subscription.intervalCount) * daysPerMonth;
633
+ case 'week':
634
+ return (value / (subscription.intervalCount * 7)) * daysPerMonth;
635
+ case 'month':
636
+ return value / subscription.intervalCount;
637
+ case 'year':
638
+ return value / (subscription.intervalCount * 12);
639
+ }
640
+ }
301
641
  /** Internal. Unwinds a billing transaction with a reason. */
302
642
  class CycleRefused extends Error {
303
643
  reason;
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/subscription/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/subscription/store.ts"],"names":[],"mappings":"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"}
package/dist/tables.d.ts CHANGED
@@ -17,16 +17,33 @@ export declare const TABLES: {
17
17
  readonly orders: 'cogenta_commerce_orders';
18
18
  readonly orderLines: 'cogenta_commerce_order_lines';
19
19
  readonly orderEvents: 'cogenta_commerce_order_events';
20
+ readonly orderEmails: 'cogenta_commerce_order_emails';
20
21
  readonly payments: 'cogenta_commerce_payments';
21
22
  readonly refunds: 'cogenta_commerce_refunds';
22
23
  readonly taxRules: 'cogenta_commerce_tax_rules';
23
24
  readonly shippingMethods: 'cogenta_commerce_shipping_methods';
24
25
  readonly coupons: 'cogenta_commerce_coupons';
25
26
  readonly couponRedemptions: 'cogenta_commerce_coupon_redemptions';
27
+ readonly couponRestrictions: 'cogenta_commerce_coupon_restrictions';
28
+ readonly couponCustomerRedemptions: 'cogenta_commerce_coupon_customer_redemptions';
26
29
  readonly invoices: 'cogenta_commerce_invoices';
27
30
  readonly invoiceSequences: 'cogenta_commerce_invoice_sequences';
31
+ readonly creditNotes: 'cogenta_commerce_credit_notes';
28
32
  readonly subscriptions: 'cogenta_commerce_subscriptions';
29
33
  readonly subscriptionCycles: 'cogenta_commerce_subscription_cycles';
34
+ readonly subscriptionDunning: 'cogenta_commerce_subscription_dunning';
35
+ readonly subscriptionRenewalNotices: 'cogenta_commerce_subscription_renewal_notices';
36
+ /** A product's link to a term of a taxonomy the *site* declares (ADR-0022,
37
+ * fiche 51 task 3) — not a foreign key for the same reason `content_ref` on
38
+ * `products` is not one: the term table is named after a taxonomy this
39
+ * package cannot know. A join row rather than a column on `products` because
40
+ * a product may carry more than one term, the same "many" a `f.taxonomy`
41
+ * field defaults to on a collection. */
42
+ readonly productTerms: 'cogenta_commerce_product_terms';
43
+ /** Append-only. Every write that moves `on_hand` — a sale, a restock, a
44
+ * stock take — leaves one row here and never edits or removes an earlier
45
+ * one; the row is the audit trail, not a cache of the current count. */
46
+ readonly stockMovements: 'cogenta_commerce_stock_movements';
30
47
  };
31
48
  /**
32
49
  * Creates everything this package owns, idempotently.
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,eAAe,CAAA;AAEtB;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM;aACjB,QAAQ,EAAE,2BAA2B;aACrC,QAAQ,EAAE,2BAA2B;aACrC,SAAS,EAAE,4BAA4B;aACvC,KAAK,EAAE,wBAAwB;aAC/B,SAAS,EAAE,6BAA6B;aACxC,MAAM,EAAE,yBAAyB;aACjC,UAAU,EAAE,8BAA8B;aAC1C,WAAW,EAAE,+BAA+B;aAC5C,QAAQ,EAAE,2BAA2B;aACrC,OAAO,EAAE,0BAA0B;aACnC,QAAQ,EAAE,4BAA4B;aACtC,eAAe,EAAE,mCAAmC;aACpD,OAAO,EAAE,0BAA0B;aACnC,iBAAiB,EAAE,qCAAqC;aACxD,QAAQ,EAAE,2BAA2B;aACrC,gBAAgB,EAAE,oCAAoC;aACtD,aAAa,EAAE,gCAAgC;aAC/C,kBAAkB,EAAE,sCAAsC;CAClD,CAAA;AAuBV;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoT5E"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,eAAe,CAAA;AAEtB;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM;aACjB,QAAQ,EAAE,2BAA2B;aACrC,QAAQ,EAAE,2BAA2B;aACrC,SAAS,EAAE,4BAA4B;aACvC,KAAK,EAAE,wBAAwB;aAC/B,SAAS,EAAE,6BAA6B;aACxC,MAAM,EAAE,yBAAyB;aACjC,UAAU,EAAE,8BAA8B;aAC1C,WAAW,EAAE,+BAA+B;aAC5C,WAAW,EAAE,+BAA+B;aAC5C,QAAQ,EAAE,2BAA2B;aACrC,OAAO,EAAE,0BAA0B;aACnC,QAAQ,EAAE,4BAA4B;aACtC,eAAe,EAAE,mCAAmC;aACpD,OAAO,EAAE,0BAA0B;aACnC,iBAAiB,EAAE,qCAAqC;aAExD,kBAAkB,EAAE,sCAAsC;aAC1D,yBAAyB,EAAE,8CAA8C;aACzE,QAAQ,EAAE,2BAA2B;aACrC,gBAAgB,EAAE,oCAAoC;aACtD,WAAW,EAAE,+BAA+B;aAC5C,aAAa,EAAE,gCAAgC;aAC/C,kBAAkB,EAAE,sCAAsC;aAE1D,mBAAmB,EAAE,uCAAuC;aAG5D,0BAA0B,EAAE,+CAA+C;IAC3E;;;;;4CAKwC;aACxC,YAAY,EAAE,gCAAgC;IAC9C;;4EAEwE;aACxE,cAAc,EAAE,kCAAkC;CAC1C,CAAA;AAuBV;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6f5E"}