@noodleseed/one 0.53.0 → 0.55.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 (79) hide show
  1. package/dist/commands/billing-enforcement-activation-ops.js +3 -0
  2. package/dist/commands/billing-enforcement-activation-ops.js.map +1 -1
  3. package/node_modules/@noodle-borg/service/dist/billing/active-commercial-entitlement.d.ts +25 -0
  4. package/node_modules/@noodle-borg/service/dist/billing/active-commercial-entitlement.d.ts.map +1 -0
  5. package/node_modules/@noodle-borg/service/dist/billing/active-commercial-entitlement.js +94 -0
  6. package/node_modules/@noodle-borg/service/dist/billing/active-commercial-entitlement.js.map +1 -0
  7. package/node_modules/@noodle-borg/service/dist/billing/enforcement-release-config.d.ts +1 -1
  8. package/node_modules/@noodle-borg/service/dist/billing/enforcement-release-config.d.ts.map +1 -1
  9. package/node_modules/@noodle-borg/service/dist/billing/enforcement-release-config.js +2 -5
  10. package/node_modules/@noodle-borg/service/dist/billing/enforcement-release-config.js.map +1 -1
  11. package/node_modules/@noodle-borg/service/dist/billing/integration.d.ts +2 -1
  12. package/node_modules/@noodle-borg/service/dist/billing/integration.d.ts.map +1 -1
  13. package/node_modules/@noodle-borg/service/dist/billing/integration.js +2 -5
  14. package/node_modules/@noodle-borg/service/dist/billing/integration.js.map +1 -1
  15. package/node_modules/@noodle-borg/service/dist/billing/paid-plan-catalog.d.ts +1 -0
  16. package/node_modules/@noodle-borg/service/dist/billing/paid-plan-catalog.d.ts.map +1 -1
  17. package/node_modules/@noodle-borg/service/dist/billing/paid-plan-catalog.js +7 -0
  18. package/node_modules/@noodle-borg/service/dist/billing/paid-plan-catalog.js.map +1 -1
  19. package/node_modules/@noodle-borg/service/dist/billing/postgres-authoritative-authority.d.ts +4 -1
  20. package/node_modules/@noodle-borg/service/dist/billing/postgres-authoritative-authority.d.ts.map +1 -1
  21. package/node_modules/@noodle-borg/service/dist/billing/postgres-authoritative-authority.js +21 -7
  22. package/node_modules/@noodle-borg/service/dist/billing/postgres-authoritative-authority.js.map +1 -1
  23. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-contract-cutover.d.ts +27 -0
  24. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-contract-cutover.d.ts.map +1 -0
  25. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-contract-cutover.js +284 -0
  26. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-contract-cutover.js.map +1 -0
  27. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-enforcement-counters.js +4 -5
  28. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-enforcement-counters.js.map +1 -1
  29. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-enforcement-projection.d.ts +0 -1
  30. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-enforcement-projection.d.ts.map +1 -1
  31. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-enforcement-projection.js +92 -27
  32. package/node_modules/@noodle-borg/service/dist/billing/postgres-commercial-enforcement-projection.js.map +1 -1
  33. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-activation-schema.d.ts.map +1 -1
  34. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-activation-schema.js +55 -0
  35. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-activation-schema.js.map +1 -1
  36. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-release-activation.d.ts +4 -7
  37. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-release-activation.d.ts.map +1 -1
  38. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-release-activation.js +34 -4
  39. package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-release-activation.js.map +1 -1
  40. package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-admission.d.ts +0 -1
  41. package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-admission.d.ts.map +1 -1
  42. package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-admission.js +72 -27
  43. package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-admission.js.map +1 -1
  44. package/node_modules/@noodle-borg/service/dist/billing/postgres-production-app-admission.d.ts.map +1 -1
  45. package/node_modules/@noodle-borg/service/dist/billing/postgres-production-app-admission.js +56 -26
  46. package/node_modules/@noodle-borg/service/dist/billing/postgres-production-app-admission.js.map +1 -1
  47. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-authority.d.ts +5 -0
  48. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-authority.d.ts.map +1 -0
  49. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-authority.js +97 -0
  50. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-authority.js.map +1 -0
  51. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-persistence.d.ts +50 -0
  52. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-persistence.d.ts.map +1 -0
  53. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-persistence.js +221 -0
  54. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-persistence.js.map +1 -0
  55. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-support.d.ts +8 -0
  56. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-support.d.ts.map +1 -0
  57. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-support.js +42 -0
  58. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation-support.js.map +1 -0
  59. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation.d.ts +15 -0
  60. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation.d.ts.map +1 -0
  61. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation.js +123 -0
  62. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-reconciliation.js.map +1 -0
  63. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-schema.js +100 -0
  64. package/node_modules/@noodle-borg/service/dist/billing/postgres-subscription-schema.js.map +1 -1
  65. package/node_modules/@noodle-borg/service/dist/billing/service-enforcement-release.d.ts.map +1 -1
  66. package/node_modules/@noodle-borg/service/dist/billing/service-enforcement-release.js +4 -1
  67. package/node_modules/@noodle-borg/service/dist/billing/service-enforcement-release.js.map +1 -1
  68. package/node_modules/@noodle-borg/service/dist/billing/subscription-model.d.ts.map +1 -1
  69. package/node_modules/@noodle-borg/service/dist/billing/subscription-model.js +9 -1
  70. package/node_modules/@noodle-borg/service/dist/billing/subscription-model.js.map +1 -1
  71. package/node_modules/@noodle-borg/service/dist/billing/subscription-reconciliation.d.ts +45 -0
  72. package/node_modules/@noodle-borg/service/dist/billing/subscription-reconciliation.d.ts.map +1 -0
  73. package/node_modules/@noodle-borg/service/dist/billing/subscription-reconciliation.js +165 -0
  74. package/node_modules/@noodle-borg/service/dist/billing/subscription-reconciliation.js.map +1 -0
  75. package/node_modules/@noodle-borg/service/dist/billing-public.d.ts +2 -0
  76. package/node_modules/@noodle-borg/service/dist/billing-public.d.ts.map +1 -1
  77. package/node_modules/@noodle-borg/service/dist/billing-public.js +2 -0
  78. package/node_modules/@noodle-borg/service/dist/billing-public.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ import { BillingSubscriptionReconciliationConflictError } from './subscription-reconciliation.js';
2
+ export function translateTransactionError(error) {
3
+ if (error instanceof BillingSubscriptionReconciliationConflictError)
4
+ return error;
5
+ const code = postgresErrorCode(error);
6
+ if (code === '40001' || code === '40P01' || code === '55P03' || code === '57014') {
7
+ return conflict('serialization_conflict', 'billing subscription state changed concurrently; retry the exact request');
8
+ }
9
+ if (code === '23505' || code === '23503') {
10
+ return conflict('base_subscription_conflict', 'billing subscription history conflicts with the current account state');
11
+ }
12
+ return error;
13
+ }
14
+ function postgresErrorCode(error) {
15
+ return typeof error === 'object' && error !== null && 'code' in error
16
+ ? String(error.code)
17
+ : undefined;
18
+ }
19
+ export function conflict(code, message) {
20
+ return new BillingSubscriptionReconciliationConflictError(code, message);
21
+ }
22
+ export function keyGeneration(value) {
23
+ if (!/^[0-9a-f]{64}$/.test(value)) {
24
+ throw new Error('authoritative billing key generation must be lowercase SHA-256');
25
+ }
26
+ return value;
27
+ }
28
+ export function timeout(name, value) {
29
+ if (!Number.isSafeInteger(value) || value < 1 || value > 60_000) {
30
+ throw new Error(`${name} must be 1..60000ms`);
31
+ }
32
+ return value;
33
+ }
34
+ export async function rollbackQuietly(client) {
35
+ try {
36
+ await client.query('ROLLBACK');
37
+ }
38
+ catch {
39
+ // Preserve the original transaction failure.
40
+ }
41
+ }
42
+ //# sourceMappingURL=postgres-subscription-reconciliation-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-subscription-reconciliation-support.js","sourceRoot":"","sources":["../../src/billing/postgres-subscription-reconciliation-support.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8CAA8C,EAAE,MAAM,kCAAkC,CAAC;AAElG,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,KAAK,YAAY,8CAA8C;QAAE,OAAO,KAAK,CAAC;IAClF,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACjF,OAAO,QAAQ,CACb,wBAAwB,EACxB,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACzC,OAAO,QAAQ,CACb,4BAA4B,EAC5B,uEAAuE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;QACnE,CAAC,CAAC,MAAM,CAAE,KAAoC,CAAC,IAAI,CAAC;QACpD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,IAAqF,EACrF,OAAe;IAEf,OAAO,IAAI,8CAA8C,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,KAAa;IACjD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAkB;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Pool } from 'pg';
2
+ import { type BillingSubscriptionReconciliationRequest, type BillingSubscriptionReconciliationResult, type BillingSubscriptionReconciliationStore } from './subscription-reconciliation.js';
3
+ export interface PostgresBillingSubscriptionReconciliationStoreOptions {
4
+ readonly authoritativeKeyGeneration: string;
5
+ readonly lockTimeoutMs?: number;
6
+ readonly statementTimeoutMs?: number;
7
+ readonly id?: () => string;
8
+ }
9
+ /** Atomic provider-neutral paid history and entitlement-pointer reconciliation. */
10
+ export declare class PostgresBillingSubscriptionReconciliationStore implements BillingSubscriptionReconciliationStore {
11
+ #private;
12
+ constructor(pool: Pool, options: PostgresBillingSubscriptionReconciliationStoreOptions);
13
+ reconcilePaidSubscription(rawRequest: BillingSubscriptionReconciliationRequest): Promise<BillingSubscriptionReconciliationResult>;
14
+ }
15
+ //# sourceMappingURL=postgres-subscription-reconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-subscription-reconciliation.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-subscription-reconciliation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AA6B3C,OAAO,EACL,KAAK,wCAAwC,EAC7C,KAAK,uCAAuC,EAC5C,KAAK,sCAAsC,EAM5C,MAAM,kCAAkC,CAAC;AAK1C,MAAM,WAAW,qDAAqD;IACpE,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,mFAAmF;AACnF,qBAAa,8CACX,YAAW,sCAAsC;;gBAQrC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,qDAAqD;IAchF,yBAAyB,CAC7B,UAAU,EAAE,wCAAwC,GACnD,OAAO,CAAC,uCAAuC,CAAC;CAiHpD"}
@@ -0,0 +1,123 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { insertAuditEvent } from '@noodle-borg/module-audit';
3
+ import { readBillingMeterTransactionTime } from './postgres-meter-clock.js';
4
+ import { BILLING_METER_EPOCH_LIFECYCLE_LOCK_KEY } from './postgres-meter-epochs.js';
5
+ import { requireActiveBillingAccount, requireEnforcedBillingAccount, requirePaidAuthority, } from './postgres-subscription-reconciliation-authority.js';
6
+ import { compareAndSwapPointers, findOperation, insertOperation, insertPaidSnapshot, insertRevision, readActiveSnapshotForUpdate, readCurrentSubscriptionForUpdate, replayOperation, requireNoLaterSnapshot, validateCurrentSubscription, validateSubscriptionHistory, } from './postgres-subscription-reconciliation-persistence.js';
7
+ import { conflict, keyGeneration, rollbackQuietly, timeout, translateTransactionError, } from './postgres-subscription-reconciliation-support.js';
8
+ import { createPaidEntitlementSnapshot } from './subscription-model.js';
9
+ import { billingSubscriptionReconciliationContractError, billingSubscriptionReconciliationRequestFingerprint, billingSubscriptionReconciliationSuccessAudit, normalizeBillingSubscriptionReconciliationRequest, requireCurrentlyEffectivePaidSubscription, } from './subscription-reconciliation.js';
10
+ const DEFAULT_LOCK_TIMEOUT_MS = 5_000;
11
+ const DEFAULT_STATEMENT_TIMEOUT_MS = 10_000;
12
+ /** Atomic provider-neutral paid history and entitlement-pointer reconciliation. */
13
+ export class PostgresBillingSubscriptionReconciliationStore {
14
+ #pool;
15
+ #keyGeneration;
16
+ #lockTimeoutMs;
17
+ #statementTimeoutMs;
18
+ #id;
19
+ constructor(pool, options) {
20
+ this.#pool = pool;
21
+ this.#keyGeneration = keyGeneration(options.authoritativeKeyGeneration);
22
+ this.#lockTimeoutMs = timeout('billing subscription reconciliation lock timeout', options.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS);
23
+ this.#statementTimeoutMs = timeout('billing subscription reconciliation statement timeout', options.statementTimeoutMs ?? DEFAULT_STATEMENT_TIMEOUT_MS);
24
+ this.#id = options.id ?? randomUUID;
25
+ }
26
+ async reconcilePaidSubscription(rawRequest) {
27
+ const request = normalizeRequest(rawRequest);
28
+ const fingerprint = billingSubscriptionReconciliationRequestFingerprint(request);
29
+ const idempotencyHash = createHash('sha256').update(request.idempotencyKey).digest('hex');
30
+ const client = await this.#pool.connect();
31
+ let transactionOpen = false;
32
+ try {
33
+ await client.query('BEGIN ISOLATION LEVEL READ COMMITTED');
34
+ transactionOpen = true;
35
+ await client.query(`SELECT set_config('lock_timeout', $1, true),
36
+ set_config('statement_timeout', $2, true)`, [`${this.#lockTimeoutMs}ms`, `${this.#statementTimeoutMs}ms`]);
37
+ await client.query('SELECT pg_advisory_xact_lock_shared(hashtextextended($1, 0))', [
38
+ BILLING_METER_EPOCH_LIFECYCLE_LOCK_KEY,
39
+ ]);
40
+ await advisoryLock(client, `billing-subscription-reconciliation-key:${idempotencyHash}`);
41
+ const operation = await findOperation(client, idempotencyHash);
42
+ if (operation !== undefined) {
43
+ const replay = replayOperation(operation, fingerprint);
44
+ await client.query('COMMIT');
45
+ transactionOpen = false;
46
+ return replay;
47
+ }
48
+ await advisoryLock(client, `billing-subscription-reconciliation-account:${request.billingAccountId}`);
49
+ await advisoryLock(client, `billing-subscription-reconciliation-subscription:${request.revision.subscriptionId}`);
50
+ await requirePaidAuthority(client, this.#keyGeneration);
51
+ await requireActiveBillingAccount(client, request.billingAccountId);
52
+ await requireEnforcedBillingAccount(client, request.billingAccountId);
53
+ const previousSnapshot = await readActiveSnapshotForUpdate(client, request.billingAccountId);
54
+ if (previousSnapshot === undefined ||
55
+ previousSnapshot.version !== request.expectedActiveSnapshotVersion) {
56
+ throw conflict('active_snapshot_conflict', 'the active entitlement snapshot changed; retry from the current billing account state');
57
+ }
58
+ await requireNoLaterSnapshot(client, request.billingAccountId, previousSnapshot.version);
59
+ const currentSubscription = await readCurrentSubscriptionForUpdate(client, request.billingAccountId);
60
+ validateCurrentSubscription(currentSubscription, request.expectedCurrentBaseSubscription, previousSnapshot);
61
+ await validateSubscriptionHistory(client, request, currentSubscription);
62
+ const reconciledAt = await readBillingMeterTransactionTime(client);
63
+ requireCurrentlyEffectivePaidSubscription(request.revision, reconciledAt);
64
+ const paidSnapshot = createPaidEntitlementSnapshot({
65
+ id: request.snapshotId,
66
+ version: previousSnapshot.version + 1,
67
+ sourceSubscription: request.revision,
68
+ previousSnapshot,
69
+ });
70
+ if (currentSubscription === undefined) {
71
+ await client.query(`INSERT INTO billing_base_subscriptions (id, billing_account_id, created_at)
72
+ VALUES ($1, $2, $3)`, [request.revision.subscriptionId, request.billingAccountId, request.revision.createdAt]);
73
+ }
74
+ await insertRevision(client, request.revision);
75
+ await insertPaidSnapshot(client, paidSnapshot);
76
+ await compareAndSwapPointers(client, request, previousSnapshot.id, currentSubscription);
77
+ const result = {
78
+ schemaVersion: 1,
79
+ billingAccountId: request.billingAccountId,
80
+ subscriptionId: request.revision.subscriptionId,
81
+ subscriptionRevisionVersion: request.revision.version,
82
+ snapshotId: paidSnapshot.id,
83
+ snapshotVersion: paidSnapshot.version,
84
+ planVersionId: paidSnapshot.planVersionId,
85
+ reconciledAt,
86
+ replayed: false,
87
+ };
88
+ await insertOperation(client, {
89
+ operationId: `bsro_${this.#id()}`,
90
+ idempotencyHash,
91
+ fingerprint,
92
+ result,
93
+ createdAt: reconciledAt,
94
+ });
95
+ await insertAuditEvent(client, billingSubscriptionReconciliationSuccessAudit(result), {
96
+ now: () => new Date(reconciledAt),
97
+ });
98
+ await client.query('COMMIT');
99
+ transactionOpen = false;
100
+ return result;
101
+ }
102
+ catch (error) {
103
+ if (transactionOpen)
104
+ await rollbackQuietly(client);
105
+ throw translateTransactionError(error);
106
+ }
107
+ finally {
108
+ client.release();
109
+ }
110
+ }
111
+ }
112
+ function normalizeRequest(rawRequest) {
113
+ try {
114
+ return normalizeBillingSubscriptionReconciliationRequest(rawRequest);
115
+ }
116
+ catch {
117
+ throw billingSubscriptionReconciliationContractError();
118
+ }
119
+ }
120
+ async function advisoryLock(client, identity) {
121
+ await client.query('SELECT pg_advisory_xact_lock(hashtextextended($1, 0))', [identity]);
122
+ }
123
+ //# sourceMappingURL=postgres-subscription-reconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-subscription-reconciliation.js","sourceRoot":"","sources":["../../src/billing/postgres-subscription-reconciliation.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,12 @@ async function ensureBillingSubscriptionSchemaTx(client) {
42
42
  currency text NOT NULL CHECK (currency = 'usd'),
43
43
  base_amount_minor bigint NOT NULL
44
44
  CHECK (base_amount_minor >= 0 AND base_amount_minor <= 9007199254740991),
45
+ CONSTRAINT billing_base_subscription_revisions_price_check CHECK (
46
+ (plan_version_id = 'pro@1' AND billing_interval = 'month' AND base_amount_minor = 3000) OR
47
+ (plan_version_id = 'pro@1' AND billing_interval = 'year' AND base_amount_minor = 30000) OR
48
+ (plan_version_id = 'scale@1' AND billing_interval = 'month' AND base_amount_minor = 30000) OR
49
+ (plan_version_id = 'scale@1' AND billing_interval = 'year' AND base_amount_minor = 300000)
50
+ ),
45
51
  current_period_start timestamptz NOT NULL,
46
52
  current_period_end timestamptz NOT NULL CHECK (current_period_end > current_period_start),
47
53
  effective_from timestamptz NOT NULL,
@@ -76,6 +82,25 @@ async function ensureBillingSubscriptionSchemaTx(client) {
76
82
  ),
77
83
  CHECK (state <> 'ended' OR (NOT renews AND verified_at >= effective_until))
78
84
  )
85
+ `);
86
+ await client.query(`
87
+ DO $billing_subscription_price_constraint$
88
+ BEGIN
89
+ IF NOT EXISTS (
90
+ SELECT 1 FROM pg_constraint
91
+ WHERE conname = 'billing_base_subscription_revisions_price_check'
92
+ AND conrelid = 'billing_base_subscription_revisions'::regclass
93
+ ) THEN
94
+ ALTER TABLE billing_base_subscription_revisions
95
+ ADD CONSTRAINT billing_base_subscription_revisions_price_check CHECK (
96
+ (plan_version_id = 'pro@1' AND billing_interval = 'month' AND base_amount_minor = 3000) OR
97
+ (plan_version_id = 'pro@1' AND billing_interval = 'year' AND base_amount_minor = 30000) OR
98
+ (plan_version_id = 'scale@1' AND billing_interval = 'month' AND base_amount_minor = 30000) OR
99
+ (plan_version_id = 'scale@1' AND billing_interval = 'year' AND base_amount_minor = 300000)
100
+ );
101
+ END IF;
102
+ END
103
+ $billing_subscription_price_constraint$
79
104
  `);
80
105
  await client.query(`
81
106
  CREATE TABLE IF NOT EXISTS billing_account_current_base_subscriptions (
@@ -87,6 +112,28 @@ async function ensureBillingSubscriptionSchemaTx(client) {
87
112
  (billing_account_id, subscription_id, version)
88
113
  ON DELETE RESTRICT
89
114
  )
115
+ `);
116
+ await client.query(`
117
+ CREATE TABLE IF NOT EXISTS billing_subscription_reconciliation_operations (
118
+ operation_id text PRIMARY KEY,
119
+ schema_version integer NOT NULL CHECK (schema_version = 1),
120
+ action text NOT NULL CHECK (action = 'paid_reconcile'),
121
+ billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
122
+ idempotency_key_hash text NOT NULL UNIQUE
123
+ CHECK (idempotency_key_hash ~ '^[0-9a-f]{64}$'),
124
+ request_fingerprint text NOT NULL
125
+ CHECK (request_fingerprint ~ '^[0-9a-f]{64}$'),
126
+ subscription_id text NOT NULL,
127
+ revision_version integer NOT NULL CHECK (revision_version > 0),
128
+ snapshot_id text NOT NULL,
129
+ result jsonb NOT NULL,
130
+ created_at timestamptz NOT NULL,
131
+ UNIQUE (billing_account_id, subscription_id, revision_version),
132
+ UNIQUE (billing_account_id, snapshot_id),
133
+ FOREIGN KEY (billing_account_id, snapshot_id)
134
+ REFERENCES billing_entitlement_snapshots(billing_account_id, id)
135
+ ON DELETE RESTRICT
136
+ )
90
137
  `);
91
138
  await client.query(`
92
139
  ALTER TABLE billing_entitlement_snapshots
@@ -94,6 +141,45 @@ async function ensureBillingSubscriptionSchemaTx(client) {
94
141
  ADD COLUMN IF NOT EXISTS effective_until timestamptz,
95
142
  ADD COLUMN IF NOT EXISTS source_subscription_id text,
96
143
  ADD COLUMN IF NOT EXISTS source_subscription_version integer
144
+ `);
145
+ await client.query(`
146
+ DO $billing_reconciliation_snapshot_binding$
147
+ BEGIN
148
+ IF NOT EXISTS (
149
+ SELECT 1 FROM pg_constraint
150
+ WHERE conname = 'billing_entitlement_snapshots_reconciliation_source_key'
151
+ AND conrelid = 'billing_entitlement_snapshots'::regclass
152
+ ) THEN
153
+ ALTER TABLE billing_entitlement_snapshots
154
+ ADD CONSTRAINT billing_entitlement_snapshots_reconciliation_source_key
155
+ UNIQUE (
156
+ billing_account_id,
157
+ id,
158
+ source_subscription_id,
159
+ source_subscription_version
160
+ );
161
+ END IF;
162
+ IF NOT EXISTS (
163
+ SELECT 1 FROM pg_constraint
164
+ WHERE conname = 'billing_reconciliation_operation_snapshot_source_fk'
165
+ AND conrelid = 'billing_subscription_reconciliation_operations'::regclass
166
+ ) THEN
167
+ ALTER TABLE billing_subscription_reconciliation_operations
168
+ ADD CONSTRAINT billing_reconciliation_operation_snapshot_source_fk
169
+ FOREIGN KEY (
170
+ billing_account_id,
171
+ snapshot_id,
172
+ subscription_id,
173
+ revision_version
174
+ ) REFERENCES billing_entitlement_snapshots (
175
+ billing_account_id,
176
+ id,
177
+ source_subscription_id,
178
+ source_subscription_version
179
+ ) ON DELETE RESTRICT;
180
+ END IF;
181
+ END
182
+ $billing_reconciliation_snapshot_binding$
97
183
  `);
98
184
  await client.query(`
99
185
  DO $billing_snapshot_anchor_consistency$
@@ -312,6 +398,20 @@ async function ensureBillingSubscriptionSchemaTx(client) {
312
398
  NULL;
313
399
  END;
314
400
  END IF;
401
+ IF NOT EXISTS (
402
+ SELECT 1 FROM pg_trigger
403
+ WHERE tgname = 'billing_subscription_reconciliation_operations_append_only'
404
+ AND tgrelid = 'billing_subscription_reconciliation_operations'::regclass
405
+ AND NOT tgisinternal
406
+ ) THEN
407
+ BEGIN
408
+ CREATE TRIGGER billing_subscription_reconciliation_operations_append_only
409
+ BEFORE UPDATE OR DELETE ON billing_subscription_reconciliation_operations
410
+ FOR EACH ROW EXECUTE FUNCTION billing_reject_subscription_history_mutation();
411
+ EXCEPTION WHEN duplicate_object THEN
412
+ NULL;
413
+ END;
414
+ END IF;
315
415
  END
316
416
  $billing_subscription_history_triggers$
317
417
  `);
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-subscription-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-subscription-schema.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAAU;IAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,4FAA4F;YAC5F,yEAAyE;YACzE,MAAM,MAAM,CAAC,KAAK,CAChB,iFAAiF,CAClF,CAAC;YACF,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iCAAiC,CAAC,MAAkB;IACjE,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;GAOlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;GAUlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;GAMlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgClB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;GAmBlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDlB,CAAC,CAAC;IAEH,iGAAiG;IACjG,sFAAsF;IACtF,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyClB,CAAC,CAAC;IAEH,mGAAmG;IACnG,iGAAiG;IACjG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;GAKlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;GASlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiClB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"postgres-subscription-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-subscription-schema.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAAU;IAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,4FAA4F;YAC5F,yEAAyE;YACzE,MAAM,MAAM,CAAC,KAAK,CAChB,iFAAiF,CAClF,CAAC;YACF,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iCAAiC,CAAC,MAAkB;IACjE,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;GAOlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;GAkBlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;GAUlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;GAqBlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;GAMlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsClB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgClB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;GAmBlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDlB,CAAC,CAAC;IAEH,iGAAiG;IACjG,sFAAsF;IACtF,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyClB,CAAC,CAAC;IAEH,mGAAmG;IACnG,iGAAiG;IACjG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;GAKlB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;GASlB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+ClB,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"service-enforcement-release.d.ts","sourceRoot":"","sources":["../../src/billing/service-enforcement-release.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,KAAK,cAAc,GAAG,IAAI,CACxB,mBAAmB,EACnB,wBAAwB,GAAG,wBAAwB,GAAG,eAAe,GAAG,QAAQ,CACjF,CAAC;AAEF,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,EACzD,eAAe,EAAE,QAAQ,GAAG,aAAa,GACxC,IAAI,CAIN;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,OAAO,GAC1B,IAAI,CAUN;AAED,wBAAsB,oCAAoC,CACxD,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAef"}
1
+ {"version":3,"file":"service-enforcement-release.d.ts","sourceRoot":"","sources":["../../src/billing/service-enforcement-release.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,KAAK,cAAc,GAAG,IAAI,CACxB,mBAAmB,EACnB,wBAAwB,GAAG,wBAAwB,GAAG,eAAe,GAAG,QAAQ,CACjF,CAAC;AAEF,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,EACzD,eAAe,EAAE,QAAQ,GAAG,aAAa,GACxC,IAAI,CAIN;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,OAAO,GAC1B,IAAI,CAUN;AAED,wBAAsB,oCAAoC,CACxD,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -19,9 +19,10 @@ export function assertBillingEnforcementReleaseConfiguration(options, buildInfo,
19
19
  });
20
20
  }
21
21
  export async function activateBillingEnforcementForRelease(pool, hmacKey, options, buildInfo) {
22
- if (options.billingEnforcementMode !== 'free_v1')
22
+ if (options.billingEnforcementMode === undefined)
23
23
  return;
24
24
  const result = await ensurePostgresReleaseManagedBillingActivation(pool, hmacKey, {
25
+ mode: options.billingEnforcementMode,
25
26
  serviceOrigin: options.publicBaseUrl,
26
27
  releaseSha: buildInfo.gitSha,
27
28
  systemReleaseId: buildInfo.systemRelease,
@@ -31,6 +32,8 @@ export async function activateBillingEnforcementForRelease(pool, hmacKey, option
31
32
  state: result.state,
32
33
  generation: result.generation,
33
34
  activated: result.activated,
35
+ contractTransitioned: result.contractTransitioned,
36
+ admissionContractVersion: result.admissionContractVersion,
34
37
  systemReleaseId: buildInfo.systemRelease,
35
38
  });
36
39
  assertPublicSignupBillingActivation(options.controlPlaneSignupMode, result.state);
@@ -1 +1 @@
1
- {"version":3,"file":"service-enforcement-release.js","sourceRoot":"","sources":["../../src/billing/service-enforcement-release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,6CAA6C,EAAE,MAAM,kBAAkB,CAAC;AAOjF,MAAM,UAAU,mCAAmC,CACjD,UAAyD,EACzD,eAAyC;IAEzC,IAAI,UAAU,KAAK,QAAQ,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4CAA4C,CAC1D,OAAuB,EACvB,SAAoB,EACpB,kBAA2B;IAE3B,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS;QAAE,OAAO;IACzD,sCAAsC,CAAC;QACrC,IAAI,EAAE,OAAO,CAAC,sBAAsB;QACpC,kBAAkB;QAClB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,SAAS,CAAC,MAAM;QAC5B,eAAe,EAAE,SAAS,CAAC,aAAa;QACxC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,IAAU,EACV,OAAe,EACf,OAAuB,EACvB,SAAoB;IAEpB,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS;QAAE,OAAO;IACzD,MAAM,MAAM,GAAG,MAAM,6CAA6C,CAAC,IAAI,EAAE,OAAO,EAAE;QAChF,aAAa,EAAE,OAAO,CAAC,aAAuB;QAC9C,UAAU,EAAE,SAAS,CAAC,MAAM;QAC5B,eAAe,EAAE,SAAS,CAAC,aAAuB;QAClD,gBAAgB,EAAE,SAAS,CAAC,gBAA0B;KACvD,CAAC,CAAC;IACH,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,wCAAwC,EAAE;QAC5E,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,eAAe,EAAE,SAAS,CAAC,aAAuB;KACnD,CAAC,CAAC;IACH,mCAAmC,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC"}
1
+ {"version":3,"file":"service-enforcement-release.js","sourceRoot":"","sources":["../../src/billing/service-enforcement-release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAIzD,OAAO,EAAE,sCAAsC,EAAE,MAAM,iCAAiC,CAAC;AACzF,OAAO,EAAE,6CAA6C,EAAE,MAAM,kBAAkB,CAAC;AAOjF,MAAM,UAAU,mCAAmC,CACjD,UAAyD,EACzD,eAAyC;IAEzC,IAAI,UAAU,KAAK,QAAQ,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4CAA4C,CAC1D,OAAuB,EACvB,SAAoB,EACpB,kBAA2B;IAE3B,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS;QAAE,OAAO;IACzD,sCAAsC,CAAC;QACrC,IAAI,EAAE,OAAO,CAAC,sBAAsB;QACpC,kBAAkB;QAClB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,SAAS,CAAC,MAAM;QAC5B,eAAe,EAAE,SAAS,CAAC,aAAa;QACxC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,IAAU,EACV,OAAe,EACf,OAAuB,EACvB,SAAoB;IAEpB,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS;QAAE,OAAO;IACzD,MAAM,MAAM,GAAG,MAAM,6CAA6C,CAAC,IAAI,EAAE,OAAO,EAAE;QAChF,IAAI,EAAE,OAAO,CAAC,sBAAsB;QACpC,aAAa,EAAE,OAAO,CAAC,aAAuB;QAC9C,UAAU,EAAE,SAAS,CAAC,MAAM;QAC5B,eAAe,EAAE,SAAS,CAAC,aAAuB;QAClD,gBAAgB,EAAE,SAAS,CAAC,gBAA0B;KACvD,CAAC,CAAC;IACH,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,wCAAwC,EAAE;QAC5E,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;QACzD,eAAe,EAAE,SAAS,CAAC,aAAuB;KACnD,CAAC,CAAC;IACH,mCAAmC,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"subscription-model.d.ts","sourceRoot":"","sources":["../../src/billing/subscription-model.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAEnC,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,4BAA4B,GAAG,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAI/C,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,oCAAoC,GAAG,IAAI,CACrD,qCAAqC,EACrC,eAAe,GAAG,iBAAiB,CACpC,CAAC;AAOF,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,oCAAoC,GAC1C,qCAAqC,CAMvC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,qCAAqC,CAyBvC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,kBAAkB,EAAE,qCAAqC,CAAC;IACnE,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;CACtD;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kCAAkC,GACxC,6BAA6B,CAsC/B;AAmDD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CAmC1F;AAiLD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE"}
1
+ {"version":3,"file":"subscription-model.d.ts","sourceRoot":"","sources":["../../src/billing/subscription-model.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAEnC,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,4BAA4B,GAAG,QAAQ,GAAG,eAAe,GAAG,OAAO,CAAC;AAChF,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAI/C,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,oCAAoC,GAAG,IAAI,CACrD,qCAAqC,EACrC,eAAe,GAAG,iBAAiB,CACpC,CAAC;AAOF,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,oCAAoC,GAC1C,qCAAqC,CAMvC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,qCAAqC,CAyBvC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,kBAAkB,EAAE,qCAAqC,CAAC;IACnE,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;CACtD;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kCAAkC,GACxC,6BAA6B,CAsC/B;AAmDD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CAmC1F;AA6LD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE"}
@@ -1,6 +1,6 @@
1
1
  import { parseBillingCommercialV2Entitlements } from './commercial-entitlements.js';
2
2
  import { billingContentChecksum, validateBillingAccountId, } from './model.js';
3
- import { getBillingPublicPlanVersion } from './paid-plan-catalog.js';
3
+ import { getBillingPaidPlanBaseAmountMinor, getBillingPublicPlanVersion, } from './paid-plan-catalog.js';
4
4
  const BILLING_PAYMENT_GRACE_DURATION_MS = 7 * 24 * 60 * 60 * 1_000;
5
5
  export function createBillingBaseSubscriptionRevision(input) {
6
6
  const content = normalizeSubscriptionRevisionContent(input);
@@ -182,6 +182,10 @@ function normalizeSubscriptionRevisionContent(input) {
182
182
  if (!Number.isSafeInteger(input.baseAmountMinor) || input.baseAmountMinor < 0) {
183
183
  throw new Error('base amount minor must be a non-negative safe integer');
184
184
  }
185
+ if (input.baseAmountMinor !==
186
+ getBillingPaidPlanBaseAmountMinor(input.planVersionId, input.billingInterval)) {
187
+ throw new Error('subscription base amount does not match the public plan');
188
+ }
185
189
  if (state === 'ended' && input.renews)
186
190
  throw new Error('ended subscriptions cannot renew');
187
191
  const currentPeriodStart = canonicalInstant('subscription period start', input.currentPeriodStart);
@@ -205,6 +209,10 @@ function normalizeSubscriptionRevisionContent(input) {
205
209
  if (state === 'active' && effectiveUntil !== currentPeriodEnd) {
206
210
  throw new Error('active subscription access must end with its current paid period');
207
211
  }
212
+ if (state === 'active' &&
213
+ (effectiveFrom < currentPeriodStart || effectiveFrom >= currentPeriodEnd)) {
214
+ throw new Error('active subscription access must fall within its current paid period');
215
+ }
208
216
  if (state === 'payment_grace') {
209
217
  const expectedGraceEnd = new Date(new Date(currentPeriodEnd).getTime() + BILLING_PAYMENT_GRACE_DURATION_MS).toISOString();
210
218
  if (effectiveUntil !== expectedGraceEnd) {
@@ -1 +1 @@
1
- {"version":3,"file":"subscription-model.js","sourceRoot":"","sources":["../../src/billing/subscription-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscription-model.js","sourceRoot":"","sources":["../../src/billing/subscription-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { AuditEventInput } from '@noodle-borg/module';
2
+ import { type BillingBaseSubscriptionRevisionInput, type BillingBaseSubscriptionRevisionRecord } from './subscription-model.js';
3
+ export declare const BILLING_PAID_ADMISSION_CONTRACT_VERSION: 2;
4
+ export interface BillingCurrentBaseSubscriptionExpectation {
5
+ readonly subscriptionId: string;
6
+ readonly revisionVersion: number;
7
+ }
8
+ export interface BillingSubscriptionReconciliationRequest {
9
+ readonly schemaVersion: 1;
10
+ readonly billingAccountId: string;
11
+ readonly idempotencyKey: string;
12
+ readonly expectedActiveSnapshotVersion: number;
13
+ readonly expectedCurrentBaseSubscription: BillingCurrentBaseSubscriptionExpectation | null;
14
+ readonly snapshotId: string;
15
+ readonly revision: BillingBaseSubscriptionRevisionInput;
16
+ }
17
+ export interface NormalizedBillingSubscriptionReconciliationRequest extends Omit<BillingSubscriptionReconciliationRequest, 'revision'> {
18
+ readonly revision: BillingBaseSubscriptionRevisionRecord;
19
+ }
20
+ export interface BillingSubscriptionReconciliationResult {
21
+ readonly schemaVersion: 1;
22
+ readonly billingAccountId: string;
23
+ readonly subscriptionId: string;
24
+ readonly subscriptionRevisionVersion: number;
25
+ readonly snapshotId: string;
26
+ readonly snapshotVersion: number;
27
+ readonly planVersionId: string;
28
+ readonly reconciledAt: string;
29
+ readonly replayed: boolean;
30
+ }
31
+ export interface BillingSubscriptionReconciliationStore {
32
+ reconcilePaidSubscription(request: BillingSubscriptionReconciliationRequest): Promise<BillingSubscriptionReconciliationResult>;
33
+ }
34
+ export type BillingSubscriptionReconciliationConflictCode = 'idempotency_key_conflict' | 'paid_admission_contract_unavailable' | 'billing_account_conflict' | 'billing_account_not_enforced' | 'billing_account_enforcement_unavailable' | 'paid_subscription_contract_invalid' | 'idempotency_evidence_invalid' | 'active_snapshot_conflict' | 'base_subscription_conflict' | 'serialization_conflict';
35
+ export declare class BillingSubscriptionReconciliationConflictError extends Error {
36
+ readonly code: BillingSubscriptionReconciliationConflictCode;
37
+ constructor(code: BillingSubscriptionReconciliationConflictCode, message: string);
38
+ }
39
+ export declare function billingSubscriptionReconciliationContractError(message?: string): BillingSubscriptionReconciliationConflictError;
40
+ export declare function requireCurrentlyEffectivePaidSubscription(revision: BillingBaseSubscriptionRevisionRecord, databaseTime: string): void;
41
+ export declare function normalizeBillingSubscriptionReconciliationRequest(input: BillingSubscriptionReconciliationRequest): NormalizedBillingSubscriptionReconciliationRequest;
42
+ export declare function billingSubscriptionReconciliationRequestFingerprint(request: NormalizedBillingSubscriptionReconciliationRequest): string;
43
+ export declare function parseBillingSubscriptionReconciliationResult(value: unknown): BillingSubscriptionReconciliationResult;
44
+ export declare function billingSubscriptionReconciliationSuccessAudit(result: BillingSubscriptionReconciliationResult): AuditEventInput;
45
+ //# sourceMappingURL=subscription-reconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-reconciliation.d.ts","sourceRoot":"","sources":["../../src/billing/subscription-reconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EACL,KAAK,oCAAoC,EACzC,KAAK,qCAAqC,EAG3C,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,uCAAuC,EAAG,CAAU,CAAC;AAElE,MAAM,WAAW,yCAAyC;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,+BAA+B,EAAE,yCAAyC,GAAG,IAAI,CAAC;IAC3F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,oCAAoC,CAAC;CACzD;AAED,MAAM,WAAW,kDACf,SAAQ,IAAI,CAAC,wCAAwC,EAAE,UAAU,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,qCAAqC,CAAC;CAC1D;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,sCAAsC;IACrD,yBAAyB,CACvB,OAAO,EAAE,wCAAwC,GAChD,OAAO,CAAC,uCAAuC,CAAC,CAAC;CACrD;AAED,MAAM,MAAM,6CAA6C,GACrD,0BAA0B,GAC1B,qCAAqC,GACrC,0BAA0B,GAC1B,8BAA8B,GAC9B,yCAAyC,GACzC,oCAAoC,GACpC,8BAA8B,GAC9B,0BAA0B,GAC1B,4BAA4B,GAC5B,wBAAwB,CAAC;AAE7B,qBAAa,8CAA+C,SAAQ,KAAK;IACvE,QAAQ,CAAC,IAAI,EAAE,6CAA6C,CAAC;gBAEjD,IAAI,EAAE,6CAA6C,EAAE,OAAO,EAAE,MAAM;CAKjF;AAED,wBAAgB,8CAA8C,CAC5D,OAAO,SAA6E,GACnF,8CAA8C,CAKhD;AAED,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,qCAAqC,EAC/C,YAAY,EAAE,MAAM,GACnB,IAAI,CAgBN;AAED,wBAAgB,iDAAiD,CAC/D,KAAK,EAAE,wCAAwC,GAC9C,kDAAkD,CAsCpD;AAED,wBAAgB,mDAAmD,CACjE,OAAO,EAAE,kDAAkD,GAC1D,MAAM,CASR;AAED,wBAAgB,4CAA4C,CAC1D,KAAK,EAAE,OAAO,GACb,uCAAuC,CAyBzC;AAED,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,uCAAuC,GAC9C,eAAe,CAcjB"}