@antelopejs/interface-dms-saas 0.5.0 → 0.6.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 (37) hide show
  1. package/README.md +2 -2
  2. package/dist/billing.d.ts +5 -0
  3. package/dist/billing.js +2 -1
  4. package/dist/billing.js.map +1 -1
  5. package/dist/db/models/plans.model.d.ts +3 -0
  6. package/dist/db/models/plans.model.js +22 -9
  7. package/dist/db/models/plans.model.js.map +1 -1
  8. package/dist/db/models/stripeWebhookEvents.model.d.ts +1 -0
  9. package/dist/db/models/stripeWebhookEvents.model.js +24 -0
  10. package/dist/db/models/stripeWebhookEvents.model.js.map +1 -1
  11. package/dist/db/models/tenantSubscriptions.model.js +4 -1
  12. package/dist/db/models/tenantSubscriptions.model.js.map +1 -1
  13. package/dist/db/tables/plans.table.d.ts +10 -1
  14. package/dist/db/tables/plans.table.js +11 -2
  15. package/dist/db/tables/plans.table.js.map +1 -1
  16. package/dist/db/tables/tenantSubscriptions.table.d.ts +15 -0
  17. package/dist/db/tables/tenantSubscriptions.table.js +8 -0
  18. package/dist/db/tables/tenantSubscriptions.table.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +2 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/invoice-line-items.d.ts +21 -2
  23. package/dist/invoice-line-items.js +14 -2
  24. package/dist/invoice-line-items.js.map +1 -1
  25. package/dist/plan-changes.d.ts +41 -0
  26. package/dist/plan-changes.js +22 -0
  27. package/dist/plan-changes.js.map +1 -0
  28. package/dist/plans.d.ts +1 -0
  29. package/dist/plans.js +7 -3
  30. package/dist/plans.js.map +1 -1
  31. package/dist/tenant-lifecycle.d.ts +1 -0
  32. package/dist/tenant-lifecycle.js.map +1 -1
  33. package/docs/1.index.md +1 -0
  34. package/docs/2.billing.md +31 -0
  35. package/docs/3.lifecycle-and-usage.md +71 -4
  36. package/docs/4.pages-plans-data.md +3 -2
  37. package/package.json +2 -2
package/README.md CHANGED
@@ -44,7 +44,7 @@ types barrel. After direct subscription writes, call
44
44
  [`RecomputeTenantBillingState`](./docs/2.billing.md#recomputetenantbillingstate)
45
45
  to refresh derived billing and workspace directory state.
46
46
 
47
- A module may seed plans straight into the `db` plan table: it leaves `Plan.paymentProviderRefs` empty and never rewrites it, since dms-saas links every billed plan to Stripe itself. See [Plans and Stripe](https://dms.antelopejs.com/docs/modules/saas/stripe#plans-and-stripe).
47
+ A module may seed plans straight into the `db` plan table: it writes `name`, `description` and `borderLabel` with one value per locale through `localize("*")`, leaves `Plan.paymentProviderRefs` empty and never rewrites it, since dms-saas links every billed plan to Stripe itself. See [Plans and Stripe](https://dms.antelopejs.com/docs/modules/saas/stripe#plans-and-stripe).
48
48
 
49
49
  ## Compatibility
50
50
 
@@ -55,7 +55,7 @@ The implementation is `@antelopejs/dms-saas >=0.6.0`. The interface declares the
55
55
  | Package | Range |
56
56
  | --- | --- |
57
57
  | `@antelopejs/interface-data-api` | `>=0.2.2 <1.0.0` |
58
- | `@antelopejs/interface-dms` | `>=0.7.2 <1.0.0` |
58
+ | `@antelopejs/interface-dms` | `>=0.7.4 <1.0.0` |
59
59
 
60
60
  Peer dependencies:
61
61
 
package/dist/billing.d.ts CHANGED
@@ -2,6 +2,11 @@ export interface ComplimentarySubscriptionState {
2
2
  isComplimentary?: boolean | null;
3
3
  }
4
4
  export declare function isComplimentarySubscription(subscription: ComplimentarySubscriptionState | null | undefined): boolean;
5
+ export interface TenantBillingPeriod {
6
+ start: Date;
7
+ end: Date;
8
+ }
9
+ export declare const GetTenantBillingPeriod: (tenantId: string) => Promise<TenantBillingPeriod | null>;
5
10
  export interface TenantCustomerBalanceScope {
6
11
  tenantId: string;
7
12
  userId: string;
package/dist/billing.js CHANGED
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RecomputeTenantBillingState = exports.GetUpcomingInvoicePreview = exports.GetTenantCustomerBalance = void 0;
3
+ exports.RecomputeTenantBillingState = exports.GetUpcomingInvoicePreview = exports.GetTenantCustomerBalance = exports.GetTenantBillingPeriod = void 0;
4
4
  exports.isComplimentarySubscription = isComplimentarySubscription;
5
5
  const interface_core_1 = require("@antelopejs/interface-core");
6
6
  function isComplimentarySubscription(subscription) {
7
7
  return subscription?.isComplimentary === true;
8
8
  }
9
+ exports.GetTenantBillingPeriod = (0, interface_core_1.InterfaceFunction)();
9
10
  exports.GetTenantCustomerBalance = (0, interface_core_1.InterfaceFunction)();
10
11
  exports.GetUpcomingInvoicePreview = (0, interface_core_1.InterfaceFunction)();
11
12
  exports.RecomputeTenantBillingState = (0, interface_core_1.InterfaceFunction)();
@@ -1 +1 @@
1
- {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":";;;AAQA,kEAIC;AAZD,+DAA+D;AAQ/D,SAAgB,2BAA2B,CACzC,YAA+D;IAE/D,OAAO,YAAY,EAAE,eAAe,KAAK,IAAI,CAAC;AAChD,CAAC;AAwCY,QAAA,wBAAwB,GACnC,IAAA,kCAAiB,GAEd,CAAC;AAmIO,QAAA,yBAAyB,GACpC,IAAA,kCAAiB,GAEd,CAAC;AAQO,QAAA,2BAA2B,GACtC,IAAA,kCAAiB,GAAuC,CAAC"}
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":";;;AAQA,kEAIC;AAZD,+DAA+D;AAQ/D,SAAgB,2BAA2B,CACzC,YAA+D;IAE/D,OAAO,YAAY,EAAE,eAAe,KAAK,IAAI,CAAC;AAChD,CAAC;AAgBY,QAAA,sBAAsB,GACjC,IAAA,kCAAiB,GAEd,CAAC;AAwCO,QAAA,wBAAwB,GACnC,IAAA,kCAAiB,GAEd,CAAC;AAmIO,QAAA,yBAAyB,GACpC,IAAA,kCAAiB,GAEd,CAAC;AAQO,QAAA,2BAA2B,GACtC,IAAA,kCAAiB,GAAuC,CAAC"}
@@ -23,6 +23,9 @@ declare const PlanModel_base: {
23
23
  validate(obj: unknown, options?: import("@antelopejs/interface-database-decorators").ValidateInputOptions): import("@antelopejs/interface-database-decorators").ValidationResult;
24
24
  };
25
25
  export declare class PlanModel extends PlanModel_base {
26
+ get(id: string): Promise<Plan | undefined>;
27
+ getBy(index: keyof Plan, ...keys: unknown[]): Promise<Plan[]>;
28
+ getAll(): Promise<Plan[]>;
26
29
  findNotDeleted(): Promise<Plan[]>;
27
30
  findActiveNotDeleted(): Promise<Plan[]>;
28
31
  findPubliclyVisible(): Promise<Plan[]>;
@@ -4,22 +4,37 @@ exports.PlanModel = void 0;
4
4
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
5
5
  const plans_table_1 = require("../tables/plans.table");
6
6
  const MAX_INHERITANCE_DEPTH = 10;
7
+ function inFallbackLocale(plan) {
8
+ return plan.localize(plans_table_1.PLAN_FALLBACK_LOCALE, plans_table_1.PLAN_LOCALIZED_FIELDS);
9
+ }
10
+ function readPlans(rows) {
11
+ return rows
12
+ .map((row) => PlanModel.fromDatabase(row))
13
+ .filter((row) => row !== undefined)
14
+ .map(inFallbackLocale);
15
+ }
7
16
  class PlanModel extends (0, interface_database_decorators_1.BasicDataModel)(plans_table_1.Plan, plans_table_1.plansTableName) {
17
+ async get(id) {
18
+ const plan = await super.get(id);
19
+ return plan && inFallbackLocale(plan);
20
+ }
21
+ async getBy(index, ...keys) {
22
+ return (await super.getBy(index, ...keys)).map(inFallbackLocale);
23
+ }
24
+ async getAll() {
25
+ return (await super.getAll()).map(inFallbackLocale);
26
+ }
8
27
  async findNotDeleted() {
9
28
  const rows = await this.table
10
29
  .filter((row) => row.key("isDeleted").eq(false))
11
30
  .run();
12
- return rows
13
- .map((row) => PlanModel.fromDatabase(row))
14
- .filter((row) => row !== undefined);
31
+ return readPlans(rows);
15
32
  }
16
33
  async findActiveNotDeleted() {
17
34
  const rows = await this.table
18
35
  .filter((row) => row.key("isDeleted").eq(false).and(row.key("isActive").eq(true)))
19
36
  .run();
20
- return rows
21
- .map((row) => PlanModel.fromDatabase(row))
22
- .filter((row) => row !== undefined);
37
+ return readPlans(rows);
23
38
  }
24
39
  async findPubliclyVisible() {
25
40
  const rows = await this.table
@@ -29,9 +44,7 @@ class PlanModel extends (0, interface_database_decorators_1.BasicDataModel)(plan
29
44
  .and(row.key("isActive").eq(true))
30
45
  .and(row.key("isPublic").eq(true)))
31
46
  .run();
32
- return rows
33
- .map((row) => PlanModel.fromDatabase(row))
34
- .filter((row) => row !== undefined);
47
+ return readPlans(rows);
35
48
  }
36
49
  async resolveInheritanceChain(plan) {
37
50
  const visited = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"plans.model.js","sourceRoot":"","sources":["../../../src/db/models/plans.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plans.model.js","sourceRoot":"","sources":["../../../src/db/models/plans.model.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ declare const StripeWebhookEventModel_base: {
22
22
  export declare class StripeWebhookEventModel extends StripeWebhookEventModel_base {
23
23
  tryClaim(eventId: string, type: string): Promise<string | undefined>;
24
24
  markResult(eventId: string, admittedRevision: string, result: WebhookCompletion, errorMessage: string | null): Promise<void>;
25
+ resolveTakenOver(eventId: string, type: string, staleBefore: Date, note: string): Promise<boolean>;
25
26
  deleteProcessedBefore(cutoff: Date): Promise<void>;
26
27
  }
27
28
  export {};
@@ -42,6 +42,30 @@ class StripeWebhookEventModel extends (0, interface_database_decorators_1.BasicD
42
42
  if (outcome !== "applied")
43
43
  throw new Error(`Webhook completion ${outcome}; reconciliation required`);
44
44
  }
45
+ async resolveTakenOver(eventId, type, staleBefore, note) {
46
+ const current = await this.get(eventId);
47
+ if (!current || current.type !== type)
48
+ return false;
49
+ if (TERMINAL_RESULTS.has(current.result))
50
+ return true;
51
+ const isStalePending = current.result === "pending" && current.processedAt < staleBefore;
52
+ if (current.result !== "reconciliation_required" && !isStalePending)
53
+ return false;
54
+ const outcome = await this.table
55
+ .atomicMutation(eventId, {
56
+ type: "update",
57
+ revisionField: "revision",
58
+ expectedRevision: current.revision,
59
+ nextRevision: (0, node_crypto_1.randomUUID)(),
60
+ patch: {
61
+ result: "success",
62
+ errorMessage: note,
63
+ processedAt: new Date(),
64
+ },
65
+ })
66
+ .run();
67
+ return outcome === "applied";
68
+ }
45
69
  async deleteProcessedBefore(cutoff) {
46
70
  const candidates = await this.table
47
71
  .between("processedAt", EPOCH_LOWER_BOUND, cutoff)
@@ -1 +1 @@
1
- {"version":3,"file":"stripeWebhookEvents.model.js","sourceRoot":"","sources":["../../../src/db/models/stripeWebhookEvents.model.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,6FAA2E;AAC3E,mFAG6C;AAE7C,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAQzD,MAAa,uBAAwB,SAAQ,IAAA,8CAAc,EACzD,8CAAkB,EAClB,wDAA4B,CAC7B;IAEC,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,IAAY;QAC1C,MAAM,QAAQ,GAAG,IAAA,wBAAU,GAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC;gBAChB,GAAG,EAAE,OAAO;gBACZ,IAAI;gBACJ,WAAW,EAAE,IAAI,IAAI,EAAE;gBACvB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,IAAI;gBAClB,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;YAC7D,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACjE,OAAO,SAAS,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;IACH,CAAC;IAGD,KAAK,CAAC,UAAU,CACd,OAAe,EACf,gBAAwB,EACxB,MAAyB,EACzB,YAA2B;QAE3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK;aAC7B,cAAc,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,UAAU;YACzB,gBAAgB,EAAE,gBAAgB;YAClC,YAAY,EAAE,IAAA,wBAAU,GAAE;YAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,EAAE;SACzD,CAAC;aACD,GAAG,EAAE,CAAC;QACT,IAAI,OAAO,KAAK,SAAS;YACvB,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,2BAA2B,CAAC,CAAC;IAC9E,CAAC;IAGD,KAAK,CAAC,qBAAqB,CAAC,MAAY;QACtC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK;aAChC,OAAO,CAAC,aAAa,EAAE,iBAAiB,EAAE,MAAM,CAAC;aACjD,GAAG,EAAE,CAAC;QACT,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9C,IACE,CAAC,OAAO;gBACR,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrC,OAAO,CAAC,WAAW,IAAI,MAAM;gBAE7B,SAAS;YACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK;iBAC7B,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC3B,IAAI,EAAE,QAAQ;gBACd,aAAa,EAAE,UAAU;gBACzB,gBAAgB,EAAE,OAAO,CAAC,QAAQ;aACnC,CAAC;iBACD,GAAG,EAAE,CAAC;YACT,IAAI,OAAO,KAAK,SAAS;gBACvB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF;AAxED,0DAwEC"}
1
+ {"version":3,"file":"stripeWebhookEvents.model.js","sourceRoot":"","sources":["../../../src/db/models/stripeWebhookEvents.model.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,8 @@ class TenantSubscriptionModel extends (0, interface_database_decorators_1.BasicD
53
53
  async beginTransition(current, intent) {
54
54
  if (current.deletionStartedAt)
55
55
  throw new Error("Subscription deletion has started");
56
+ if (current.guardedPlanChange)
57
+ throw new Error("Guarded downgrade must settle before another billing transition");
56
58
  if (current.domainTransition &&
57
59
  (current.domainTransition.operationId !== intent.operationId ||
58
60
  current.domainTransition.kind !== intent.kind ||
@@ -274,7 +276,8 @@ class TenantSubscriptionModel extends (0, interface_database_decorators_1.BasicD
274
276
  return undefined;
275
277
  if (current.deletionStartedAt)
276
278
  return current;
277
- if (current.domainTransition ||
279
+ if (current.guardedPlanChange ||
280
+ current.domainTransition ||
278
281
  current.status !== STATUS_CANCELLED ||
279
282
  current.updatedAt >= cutoff)
280
283
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"tenantSubscriptions.model.js","sourceRoot":"","sources":["../../../src/db/models/tenantSubscriptions.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenantSubscriptions.model.js","sourceRoot":"","sources":["../../../src/db/models/tenantSubscriptions.model.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { Table } from "@antelopejs/interface-database-decorators";
2
2
  export declare const plansTableName = "plans";
3
+ export declare const PLAN_FALLBACK_LOCALE = "en";
4
+ export type PlanLocalizedText = Record<string, string>;
3
5
  export declare const PLAN_AUDIENCES: readonly ["any", "individual", "business"];
4
6
  export type PlanAudience = (typeof PLAN_AUDIENCES)[number];
5
7
  export declare const PLAN_INTERVALS: readonly ["month", "year"];
@@ -30,8 +32,14 @@ export interface PlanProviderRefs {
30
32
  stripePriceId?: string;
31
33
  stripeSyncedTerms?: PlanStripeSyncedTerms;
32
34
  }
35
+ export declare const PLAN_LOCALIZED_FIELDS: Array<keyof Plan>;
33
36
  export declare const PLAN_UNLIMITED = -1;
34
- export declare class Plan extends Table {
37
+ declare const Plan_base: import("@antelopejs/interface-database-decorators").TableClass<Table & {
38
+ localize<This extends {
39
+ constructor: any;
40
+ }>(this: This, locale: string, fields?: Array<keyof This>): This;
41
+ }, [], object>;
42
+ export declare class Plan extends Plan_base {
35
43
  _id: string;
36
44
  name: string;
37
45
  slug: string;
@@ -56,3 +64,4 @@ export declare class Plan extends Table {
56
64
  createdAt: Date;
57
65
  updatedAt: Date;
58
66
  }
67
+ export {};
@@ -9,15 +9,21 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Plan = exports.PLAN_UNLIMITED = exports.PLAN_BILLING_MODES = exports.PLAN_INTERVALS = exports.PLAN_AUDIENCES = exports.plansTableName = void 0;
12
+ exports.Plan = exports.PLAN_UNLIMITED = exports.PLAN_LOCALIZED_FIELDS = exports.PLAN_BILLING_MODES = exports.PLAN_INTERVALS = exports.PLAN_AUDIENCES = exports.PLAN_FALLBACK_LOCALE = exports.plansTableName = void 0;
13
13
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
14
14
  const constants_1 = require("@antelopejs/interface-dms/constants");
15
15
  exports.plansTableName = "plans";
16
+ exports.PLAN_FALLBACK_LOCALE = "en";
16
17
  exports.PLAN_AUDIENCES = ["any", "individual", "business"];
17
18
  exports.PLAN_INTERVALS = ["month", "year"];
18
19
  exports.PLAN_BILLING_MODES = ["flat", "seat"];
20
+ exports.PLAN_LOCALIZED_FIELDS = [
21
+ "name",
22
+ "description",
23
+ "borderLabel",
24
+ ];
19
25
  exports.PLAN_UNLIMITED = -1;
20
- let Plan = class Plan extends interface_database_decorators_1.Table {
26
+ let Plan = class Plan extends interface_database_decorators_1.Table.with(interface_database_decorators_1.LocalizationModifier) {
21
27
  };
22
28
  exports.Plan = Plan;
23
29
  __decorate([
@@ -25,6 +31,7 @@ __decorate([
25
31
  __metadata("design:type", String)
26
32
  ], Plan.prototype, "_id", void 0);
27
33
  __decorate([
34
+ (0, interface_database_decorators_1.Localized)({ fallbackLocale: exports.PLAN_FALLBACK_LOCALE }),
28
35
  (0, interface_database_decorators_1.Field)("string"),
29
36
  __metadata("design:type", String)
30
37
  ], Plan.prototype, "name", void 0);
@@ -34,6 +41,7 @@ __decorate([
34
41
  __metadata("design:type", String)
35
42
  ], Plan.prototype, "slug", void 0);
36
43
  __decorate([
44
+ (0, interface_database_decorators_1.Localized)({ fallbackLocale: exports.PLAN_FALLBACK_LOCALE }),
37
45
  (0, interface_database_decorators_1.Field)("string"),
38
46
  __metadata("design:type", String)
39
47
  ], Plan.prototype, "description", void 0);
@@ -93,6 +101,7 @@ __decorate([
93
101
  __metadata("design:type", Object)
94
102
  ], Plan.prototype, "borderColor", void 0);
95
103
  __decorate([
104
+ (0, interface_database_decorators_1.Localized)({ fallbackLocale: exports.PLAN_FALLBACK_LOCALE }),
96
105
  (0, interface_database_decorators_1.Field)("string"),
97
106
  __metadata("design:type", Object)
98
107
  ], Plan.prototype, "borderLabel", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"plans.table.js","sourceRoot":"","sources":["../../../src/db/tables/plans.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAQmD;AACnD,mEAAuE;AAE1D,QAAA,cAAc,GAAG,OAAO,CAAC;AAEzB,QAAA,cAAc,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AAG5D,QAAA,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAG5C,QAAA,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AA4C/C,QAAA,cAAc,GAAG,CAAC,CAAC,CAAC;AAI1B,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,qCAAK;CA8E9B,CAAA;AA9EY,oBAAI;AAEP;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iCACI;AAGZ;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kCACK;AAIb;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kCACK;AAGb;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACY;AAIpB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sCACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mCACM;AAGd;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sCACS;AAGjB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sCACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACqB;AAG7B;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;sCACwB;AAG7B;IADP,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;;yCACY;AAItB;IAFP,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;;gDACa;AAGlC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uCACU;AAIlB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wCACW;AAInB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,SAAS,CAAC;;sCACS;AAGlB;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;iDACiC;AAGtC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACmB;AAG3B;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACmB;AAI3B;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mCACM;AAId;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,SAAS,CAAC;;sCACS;AAGlB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uCACU;AAInB;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;uCAAC;AAIhB;IAFP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;uCAAC;eA7Eb,IAAI;IADhB,IAAA,6CAAa,EAAC,sBAAc,EAAE,4BAAgB,CAAC;GACnC,IAAI,CA8EhB"}
1
+ {"version":3,"file":"plans.table.js","sourceRoot":"","sources":["../../../src/db/tables/plans.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAUmD;AACnD,mEAAuE;AAE1D,QAAA,cAAc,GAAG,OAAO,CAAC;AAGzB,QAAA,oBAAoB,GAAG,IAAI,CAAC;AAK5B,QAAA,cAAc,GAAG,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AAG5D,QAAA,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAG5C,QAAA,kBAAkB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AA4C/C,QAAA,qBAAqB,GAAsB;IACtD,MAAM;IACN,aAAa;IACb,aAAa;CACd,CAAC;AAGW,QAAA,cAAc,GAAG,CAAC,CAAC,CAAC;AAW1B,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,qCAAK,CAAC,IAAI,CAAC,oDAAoB,CAAC;CAiFzD,CAAA;AAjFY,oBAAI;AAEP;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iCACI;AAIZ;IAFP,IAAA,yCAAS,EAAC,EAAE,cAAc,EAAE,4BAAoB,EAAE,CAAC;IACnD,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kCACK;AAIb;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kCACK;AAIb;IAFP,IAAA,yCAAS,EAAC,EAAE,cAAc,EAAE,4BAAoB,EAAE,CAAC;IACnD,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACY;AAIpB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sCACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mCACM;AAGd;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sCACS;AAGjB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sCACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACqB;AAG7B;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;sCACwB;AAG7B;IADP,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;;yCACY;AAItB;IAFP,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;;gDACa;AAGlC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;uCACU;AAIlB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wCACW;AAInB;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,SAAS,CAAC;;sCACS;AAGlB;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;iDACiC;AAGtC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACmB;AAI3B;IAFP,IAAA,yCAAS,EAAC,EAAE,cAAc,EAAE,4BAAoB,EAAE,CAAC;IACnD,IAAA,qCAAK,EAAC,QAAQ,CAAC;;yCACmB;AAI3B;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mCACM;AAId;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,SAAS,CAAC;;sCACS;AAGlB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;uCACU;AAInB;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;uCAAC;AAIhB;IAFP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;uCAAC;eAhFb,IAAI;IADhB,IAAA,6CAAa,EAAC,sBAAc,EAAE,4BAAgB,CAAC;GACnC,IAAI,CAiFhB"}
@@ -1,4 +1,5 @@
1
1
  import { Table } from "@antelopejs/interface-database-decorators";
2
+ import type { PlanChangeIncompatibility } from "../../plan-changes";
2
3
  export declare const tenantSubscriptionsTableName = "tenant_subscriptions";
3
4
  export declare const TENANT_SUBSCRIPTION_STATUSES: readonly ["pending_payment", "active", "trialing", "past_due", "suspended", "cancelled"];
4
5
  export type TenantSubscriptionStatus = (typeof TENANT_SUBSCRIPTION_STATUSES)[number];
@@ -12,6 +13,18 @@ export interface SubscriptionTransition {
12
13
  targetPlanId: string | null;
13
14
  requestedAt: Date;
14
15
  }
16
+ export interface GuardedPlanChange {
17
+ operationId: string;
18
+ policyName: string;
19
+ targetPlanId: string;
20
+ stripeSubscriptionId: string;
21
+ requestedAt: Date;
22
+ effectiveAt: Date;
23
+ barrierId: string;
24
+ validationStartedAt?: Date;
25
+ phase: "preparing" | "aborting" | "provider_pending" | "scheduled" | "cancel_pending" | "effective" | "activating" | "blocked";
26
+ incompatibilities: PlanChangeIncompatibility[];
27
+ }
15
28
  export interface PaidUsagePeriod {
16
29
  stripeSubscriptionId: string;
17
30
  start: Date;
@@ -29,9 +42,11 @@ export declare class TenantSubscription extends Table {
29
42
  stripeCheckoutSessionId: string | null;
30
43
  completedCheckoutSessionId: string | null;
31
44
  cardFingerprint: string | null;
45
+ currentPeriodStart: Date | null;
32
46
  currentPeriodEnd: Date | null;
33
47
  pendingPlanId: string | null;
34
48
  pendingPlanChangeAt: Date | null;
49
+ guardedPlanChange: GuardedPlanChange | null;
35
50
  domainTransition: SubscriptionTransition | null;
36
51
  revision: string;
37
52
  createdBy: string | null;
@@ -87,6 +87,10 @@ __decorate([
87
87
  (0, interface_database_decorators_1.Field)("string"),
88
88
  __metadata("design:type", Object)
89
89
  ], TenantSubscription.prototype, "cardFingerprint", void 0);
90
+ __decorate([
91
+ (0, interface_database_decorators_1.Field)("date"),
92
+ __metadata("design:type", Object)
93
+ ], TenantSubscription.prototype, "currentPeriodStart", void 0);
90
94
  __decorate([
91
95
  (0, interface_database_decorators_1.Field)("date"),
92
96
  __metadata("design:type", Object)
@@ -101,6 +105,10 @@ __decorate([
101
105
  (0, interface_database_decorators_1.Field)("date"),
102
106
  __metadata("design:type", Object)
103
107
  ], TenantSubscription.prototype, "pendingPlanChangeAt", void 0);
108
+ __decorate([
109
+ (0, interface_database_decorators_1.Field)("any"),
110
+ __metadata("design:type", Object)
111
+ ], TenantSubscription.prototype, "guardedPlanChange", void 0);
104
112
  __decorate([
105
113
  (0, interface_database_decorators_1.Field)("any"),
106
114
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"tenantSubscriptions.table.js","sourceRoot":"","sources":["../../../src/db/tables/tenantSubscriptions.table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenantSubscriptions.table.js","sourceRoot":"","sources":["../../../src/db/tables/tenantSubscriptions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAA8E;AAC9E,6FAUmD;AACnD,mEAAyE;AACzE,sFAA4E;AAC5E,+CAAqC;AAGxB,QAAA,4BAA4B,GAAG,sBAAsB,CAAC;AAEtD,QAAA,4BAA4B,GAAG;IAC1C,iBAAiB;IACjB,QAAQ;IACR,UAAU;IACV,UAAU;IACV,WAAW;IACX,WAAW;CACH,CAAC;AAqDX,MAAM,eAAe,GAA6B,UAAU,CAAC;AAO7D,MAAM,oBAAqB,SAAQ,wCAAQ;IACzC,MAAM,CAAC,MAAyB,EAAE,KAAa;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACxC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,OAAO;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AAoBY,QAAA,YAAY,GAAG,IAAA,kCAAqB,EAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IACvE,8CAAsC,CACrC,MAAM,CAAC,WAA+B,EACtC,oBAAoB,EACpB,WAAqB,EACrB,EAAE,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAII,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,qCAAK;CAsH5C,CAAA;AAtHY,gDAAkB;AAErB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;+CACI;AAKZ;IAHP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC;;kDACC;AAItB;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACyB;AAIjC;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;6DACyB;AAG/B;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;4DACiD;AAItD;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4DACwB;AAGhC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gEAC4B;AAGpC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mEAC+B;AAGvC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sEACkC;AAU1C;IAFP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;;2DACuB;AAI/B;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;8DAC0B;AAGhC;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;4DACwB;AAK9B;IAHP,IAAA,qCAAK,EAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC;;yDACQ;AAG7B;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;+DAC2B;AAIjC;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;6DACuC;AAG5C;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;4DAC2C;AAGhD;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACS;AAIjB;IAFP,IAAA,qCAAK,EAAC,QAAQ,CAAC;IACf,IAAA,wCAAQ,EAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC;;qDACI;AAGzB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;6DACyB;AAO/B;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;+DAC2B;AAIjC;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;+DAC2B;AAQnC;IAHP,IAAA,oBAAY,GAAE;IACd,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,MAAM,CAAC;;wDACoB;AAI1B;IAFP,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,MAAM,CAAC;;qDACiB;AAIvB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;2DACgB;AAIzB;IADP,IAAA,qCAAK,EAAC,MAAM,CAAC;;8DAC2B;AAIjC;IADP,IAAA,qCAAK,EAAC,KAAK,CAAC;;4DAC+B;AAIpC;IAFP,IAAA,4CAAY,GAAE;IACd,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;qDAAC;AAKhB;IAHP,IAAA,0CAAU,GAAE;IACZ,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;qDAAC;6BArHb,kBAAkB;IAD9B,IAAA,6CAAa,EAAC,oCAA4B,EAAE,8BAAkB,CAAC;GACnD,kBAAkB,CAsH9B"}
package/dist/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export * from "./provisioning";
6
6
  export * from "./registration";
7
7
  export * as invoiceLineItems from "./invoice-line-items";
8
8
  export * as tenantLifecycle from "./tenant-lifecycle";
9
+ export * as planChanges from "./plan-changes";
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.tenantLifecycle = exports.invoiceLineItems = void 0;
39
+ exports.planChanges = exports.tenantLifecycle = exports.invoiceLineItems = void 0;
40
40
  __exportStar(require("./billing"), exports);
41
41
  __exportStar(require("./data-api"), exports);
42
42
  __exportStar(require("./pages"), exports);
@@ -45,4 +45,5 @@ __exportStar(require("./provisioning"), exports);
45
45
  __exportStar(require("./registration"), exports);
46
46
  exports.invoiceLineItems = __importStar(require("./invoice-line-items"));
47
47
  exports.tenantLifecycle = __importStar(require("./tenant-lifecycle"));
48
+ exports.planChanges = __importStar(require("./plan-changes"));
48
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B;AAC/B,iDAA+B;AAC/B,yEAAyD;AACzD,sEAAsD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B;AAC/B,iDAA+B;AAC/B,yEAAyD;AACzD,sEAAsD;AACtD,8DAA8C"}
@@ -15,10 +15,29 @@ export interface InvoiceLineItemsContext {
15
15
  periodEnd: Date;
16
16
  isPreview?: boolean;
17
17
  }
18
- export type InvoiceLineItemsResolver = (context: InvoiceLineItemsContext) => Promise<InvoiceLineItem[]> | InvoiceLineItem[];
18
+ export interface InvoiceLineItemsReady {
19
+ status: "ready";
20
+ lines: InvoiceLineItem[];
21
+ }
22
+ export interface InvoiceLineItemsNotReady {
23
+ status: "not_ready";
24
+ reason: string;
25
+ }
26
+ export type InvoiceLineItemsResolution = InvoiceLineItemsReady | InvoiceLineItemsNotReady;
27
+ export type InvoiceLineItemsResolver = (context: InvoiceLineItemsContext) => Promise<InvoiceLineItem[] | InvoiceLineItemsResolution> | InvoiceLineItem[] | InvoiceLineItemsResolution;
28
+ export declare const INVALID_RESOLUTION_REASON = "invalid_resolution";
29
+ export declare function normalizeInvoiceLineItemsResolution(value: unknown): InvoiceLineItemsResolution;
30
+ export interface InvoiceUsageGap {
31
+ tenantId: string;
32
+ invoiceId: string;
33
+ periodStart: Date;
34
+ periodEnd: Date;
35
+ reasons: string[];
36
+ }
19
37
  export interface InvoiceLineItemsProvider {
20
38
  id: string;
21
39
  resolve: InvoiceLineItemsResolver;
40
+ onUsageGap?: (gap: InvoiceUsageGap) => void;
22
41
  }
23
42
  export declare const LINE_KEY_SEPARATOR = ":";
24
43
  export type SkippedLineItemReason = "already_invoiced" | "duplicate_key" | "zero_amount" | "invalid";
@@ -37,7 +56,7 @@ export interface InvoiceLineItemSelection {
37
56
  export declare function buildInvoiceLineKey(providerId: string, key: string): string;
38
57
  export declare function selectInvoiceLineItemsToCreate(providerId: string, items: readonly InvoiceLineItem[], alreadyInjectedKeys: ReadonlySet<string>): InvoiceLineItemSelection;
39
58
  export declare namespace internal {
40
- const RegisterInvoiceLineItemsProvider: RegisteringProxy<(providerId: string, resolve: InvoiceLineItemsResolver) => void>;
59
+ const RegisterInvoiceLineItemsProvider: RegisteringProxy<(providerId: string, provider: InvoiceLineItemsProvider) => void>;
41
60
  }
42
61
  export declare function RegisterInvoiceLineItemsProvider(provider: InvoiceLineItemsProvider): void;
43
62
  export declare function UnregisterInvoiceLineItemsProvider(providerId: string): void;
@@ -1,11 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.internal = exports.LINE_KEY_SEPARATOR = void 0;
3
+ exports.internal = exports.LINE_KEY_SEPARATOR = exports.INVALID_RESOLUTION_REASON = void 0;
4
+ exports.normalizeInvoiceLineItemsResolution = normalizeInvoiceLineItemsResolution;
4
5
  exports.buildInvoiceLineKey = buildInvoiceLineKey;
5
6
  exports.selectInvoiceLineItemsToCreate = selectInvoiceLineItemsToCreate;
6
7
  exports.RegisterInvoiceLineItemsProvider = RegisterInvoiceLineItemsProvider;
7
8
  exports.UnregisterInvoiceLineItemsProvider = UnregisterInvoiceLineItemsProvider;
8
9
  const interface_core_1 = require("@antelopejs/interface-core");
10
+ exports.INVALID_RESOLUTION_REASON = "invalid_resolution";
11
+ function normalizeInvoiceLineItemsResolution(value) {
12
+ if (Array.isArray(value))
13
+ return { status: "ready", lines: value };
14
+ const candidate = value;
15
+ if (candidate?.status === "ready" && Array.isArray(candidate.lines))
16
+ return { status: "ready", lines: candidate.lines };
17
+ if (candidate?.status === "not_ready")
18
+ return { status: "not_ready", reason: String(candidate.reason) };
19
+ return { status: "not_ready", reason: exports.INVALID_RESOLUTION_REASON };
20
+ }
9
21
  exports.LINE_KEY_SEPARATOR = ":";
10
22
  const MAX_LINE_KEY_LENGTH = 150;
11
23
  function isFilledString(value) {
@@ -75,7 +87,7 @@ function RegisterInvoiceLineItemsProvider(provider) {
75
87
  if (provider.id.includes(exports.LINE_KEY_SEPARATOR)) {
76
88
  throw new Error(`An invoice line items provider id cannot contain '${exports.LINE_KEY_SEPARATOR}' (got '${provider.id}').`);
77
89
  }
78
- internal.RegisterInvoiceLineItemsProvider.register(provider.id, provider.resolve);
90
+ internal.RegisterInvoiceLineItemsProvider.register(provider.id, provider);
79
91
  }
80
92
  function UnregisterInvoiceLineItemsProvider(providerId) {
81
93
  internal.RegisterInvoiceLineItemsProvider.unregister(providerId);
@@ -1 +1 @@
1
- {"version":3,"file":"invoice-line-items.js","sourceRoot":"","sources":["../src/invoice-line-items.ts"],"names":[],"mappings":";;;AA6GA,kDAEC;AAmCD,wEAkCC;AAoCD,4EAYC;AAKD,gFAEC;AA3OD,+DAA8D;AA2DjD,QAAA,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AA4BhC,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,eAAe,GAA6B;IAChD,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;IACtE;QACE,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,0BAAkB,CAAC;KAC5D;IACD;QACE,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;KACxD;IACD;QACE,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;KAC9D;IACD,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;CACxE,CAAC;AAEF,SAAgB,mBAAmB,CAAC,UAAkB,EAAE,GAAW;IACjE,OAAO,GAAG,UAAU,GAAG,0BAAkB,GAAG,GAAG,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY;IACrC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAqB;IAErB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAe;IAEf,OAAO,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAe,EACf,mBAAwC,EACxC,YAAiC;IAEjC,IAAI,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAChE,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,eAAe,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,SAAgB,8BAA8B,CAC5C,UAAkB,EAClB,KAAiC,EACjC,mBAAwC;IAExC,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,mBAAmB,CACjC,UAAU,EACV,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5B,CAAC;QACF,MAAM,SAAS,GACb,mBAAmB,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,sBAAsB,CACtC,OAAO,EACP,mBAAmB,EACnB,YAAY,CACb,CAAC;QACF,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,yCAAgC,GAAG,IAAI,iCAAgB,EAEjE,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AA8BD,SAAgB,gCAAgC,CAC9C,QAAkC;IAElC,IAAI,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,0BAAkB,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,qDAAqD,0BAAkB,WAAW,QAAQ,CAAC,EAAE,KAAK,CACnG,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,gCAAgC,CAAC,QAAQ,CAChD,QAAQ,CAAC,EAAE,EACX,QAAQ,CAAC,OAAO,CACjB,CAAC;AACJ,CAAC;AAKD,SAAgB,kCAAkC,CAAC,UAAkB;IACnE,QAAQ,CAAC,gCAAgC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"invoice-line-items.js","sourceRoot":"","sources":["../src/invoice-line-items.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { RegisteringProxy } from "@antelopejs/interface-core";
2
+ import type { Plan } from "./db/tables/plans.table";
3
+ export interface PlanChangeIncompatibility {
4
+ code: string;
5
+ message: string;
6
+ resource?: string;
7
+ }
8
+ export interface PlanChangeValidationRequest {
9
+ tenantId: string;
10
+ currentPlan: Plan | null;
11
+ targetPlan: Plan;
12
+ operationId: string;
13
+ phase: "preview" | "schedule" | "effective";
14
+ effectiveAt: Date | null;
15
+ }
16
+ export interface PlanChangePolicy {
17
+ name: string;
18
+ validatePlanChange(request: PlanChangeValidationRequest): Promise<PlanChangeIncompatibility[]>;
19
+ }
20
+ export interface TenantPlanConstraints {
21
+ currentPlan: Plan | null;
22
+ pendingPlan: Plan | null;
23
+ effectiveAt: Date | null;
24
+ planChangeOperationId: string | null;
25
+ blocked: boolean;
26
+ admissionBlocked: boolean;
27
+ incompatibilities: PlanChangeIncompatibility[];
28
+ }
29
+ export declare const GetTenantPlanConstraints: (tenantId: string) => Promise<TenantPlanConstraints>;
30
+ export declare const CountOccupiedSeats: (tenantId: string) => Promise<number>;
31
+ export interface PlanChangeActivation {
32
+ planChangeOperationId: string;
33
+ operationId: string;
34
+ gateId: string;
35
+ }
36
+ export declare const GetPlanChangeActivation: (tenantId: string) => Promise<PlanChangeActivation | null>;
37
+ export declare namespace internal {
38
+ const RegisterPlanChangePolicy: RegisteringProxy<(name: string, policy: PlanChangePolicy) => void>;
39
+ }
40
+ export declare function RegisterPlanChangePolicy(policy: PlanChangePolicy): void;
41
+ export declare function UnregisterPlanChangePolicy(name: string): void;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.internal = exports.GetPlanChangeActivation = exports.CountOccupiedSeats = exports.GetTenantPlanConstraints = void 0;
4
+ exports.RegisterPlanChangePolicy = RegisterPlanChangePolicy;
5
+ exports.UnregisterPlanChangePolicy = UnregisterPlanChangePolicy;
6
+ const interface_core_1 = require("@antelopejs/interface-core");
7
+ exports.GetTenantPlanConstraints = (0, interface_core_1.InterfaceFunction)();
8
+ exports.CountOccupiedSeats = (0, interface_core_1.InterfaceFunction)();
9
+ exports.GetPlanChangeActivation = (0, interface_core_1.InterfaceFunction)();
10
+ var internal;
11
+ (function (internal) {
12
+ internal.RegisterPlanChangePolicy = new interface_core_1.RegisteringProxy();
13
+ })(internal || (exports.internal = internal = {}));
14
+ function RegisterPlanChangePolicy(policy) {
15
+ if (!policy.name.trim())
16
+ throw new Error("Plan change policy name is required");
17
+ internal.RegisterPlanChangePolicy.register(policy.name, policy);
18
+ }
19
+ function UnregisterPlanChangePolicy(name) {
20
+ internal.RegisterPlanChangePolicy.unregister(name);
21
+ }
22
+ //# sourceMappingURL=plan-changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-changes.js","sourceRoot":"","sources":["../src/plan-changes.ts"],"names":[],"mappings":";;;AA4FA,4DAIC;AAGD,gEAEC;AArGD,+DAGoC;AAkDvB,QAAA,wBAAwB,GACnC,IAAA,kCAAiB,GAAwD,CAAC;AAQ/D,QAAA,kBAAkB,GAC7B,IAAA,kCAAiB,GAAyC,CAAC;AAgBhD,QAAA,uBAAuB,GAClC,IAAA,kCAAiB,GAEd,CAAC;AAGN,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,iCAAwB,GAAG,IAAI,iCAAgB,EAEzD,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AAGD,SAAgB,wBAAwB,CAAC,MAAwB;IAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAGD,SAAgB,0BAA0B,CAAC,IAAY;IACrD,QAAQ,CAAC,wBAAwB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
package/dist/plans.d.ts CHANGED
@@ -26,4 +26,5 @@ export declare function monthlyPrice(plan: Plan): number;
26
26
  export declare function isDowngrade(current: Plan | null, target: Plan, seats?: number): boolean;
27
27
  export declare const FEATURE_LOCALIZED_FIELDS: Array<keyof Feature>;
28
28
  export declare function localizeFeature(feature: Feature, locale: string): Feature;
29
+ export declare function localizePlan(plan: Plan, locale: string): Plan;
29
30
  export declare function buildTenantPlanCatalog(planModel: PlanModel, featureModel: FeatureModel, plans: Plan[], locale: string): Promise<TenantPlanCatalog>;
package/dist/plans.js CHANGED
@@ -4,6 +4,7 @@ exports.FEATURE_LOCALIZED_FIELDS = void 0;
4
4
  exports.monthlyPrice = monthlyPrice;
5
5
  exports.isDowngrade = isDowngrade;
6
6
  exports.localizeFeature = localizeFeature;
7
+ exports.localizePlan = localizePlan;
7
8
  exports.buildTenantPlanCatalog = buildTenantPlanCatalog;
8
9
  const db_1 = require("./db");
9
10
  const MONTHS_PER_INTERVAL = {
@@ -35,6 +36,9 @@ exports.FEATURE_LOCALIZED_FIELDS = [
35
36
  function localizeFeature(feature, locale) {
36
37
  return feature.localize(locale, exports.FEATURE_LOCALIZED_FIELDS);
37
38
  }
39
+ function localizePlan(plan, locale) {
40
+ return plan.localize(locale, db_1.PLAN_LOCALIZED_FIELDS);
41
+ }
38
42
  function toPlanFeature(feature) {
39
43
  return {
40
44
  featureId: feature._id,
@@ -46,7 +50,7 @@ function toPlanFeature(feature) {
46
50
  order: feature.order ?? db_1.FEATURE_DEFAULT_ORDER,
47
51
  };
48
52
  }
49
- async function toPlanView(planModel, plan, knownFeatureIds) {
53
+ async function toPlanView(planModel, plan, knownFeatureIds, locale) {
50
54
  const resolved = await planModel.resolveInheritance(plan);
51
55
  const featureValues = {};
52
56
  for (const entry of resolved.features) {
@@ -56,7 +60,7 @@ async function toPlanView(planModel, plan, knownFeatureIds) {
56
60
  }
57
61
  return {
58
62
  _id: plan._id,
59
- name: plan.name,
63
+ name: localizePlan(plan, locale).name,
60
64
  price: plan.price,
61
65
  currency: plan.currency,
62
66
  interval: plan.interval,
@@ -68,7 +72,7 @@ async function toPlanView(planModel, plan, knownFeatureIds) {
68
72
  async function buildTenantPlanCatalog(planModel, featureModel, plans, locale) {
69
73
  const features = await featureModel.getAll();
70
74
  const knownFeatureIds = new Set(features.map((feature) => feature._id));
71
- const views = await Promise.all(plans.map((plan) => toPlanView(planModel, plan, knownFeatureIds)));
75
+ const views = await Promise.all(plans.map((plan) => toPlanView(planModel, plan, knownFeatureIds, locale)));
72
76
  return {
73
77
  plans: views.sort((left, right) => left.order - right.order),
74
78
  features: features
package/dist/plans.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface TenantLifecycleMessage {
6
6
  operationId: string;
7
7
  transition: TenantLifecycleTransition;
8
8
  requestedAt: Date;
9
+ planChangeOperationId?: string;
9
10
  }
10
11
  export interface TenantLifecycleReceipt {
11
12
  receiptId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-lifecycle.js","sourceRoot":"","sources":["../src/tenant-lifecycle.ts"],"names":[],"mappings":";;;AA+DA,8EAEC;AAWD,0EAUC;AAtFD,+DAGoC;AAEpC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAG5C,QAAA,4BAA4B,GAAG;IAC1C,SAAS;IACT,WAAW;IACX,wBAAwB;CAChB,CAAC;AAwCE,QAAA,6BAA6B,GACxC,IAAA,kCAAiB,GAA0C,CAAC;AAG9D,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,wCAA+B,GAAG,IAAI,iCAAgB,EAEhE,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AAGD,SAAgB,iCAAiC,CAAC,IAAY;IAC5D,QAAQ,CAAC,+BAA+B,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAWD,SAAgB,+BAA+B,CAC7C,QAAiC;IAEjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,QAAQ,CAAC,+BAA+B,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,iCAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tenant-lifecycle.js","sourceRoot":"","sources":["../src/tenant-lifecycle.ts"],"names":[],"mappings":";;;AAiEA,8EAEC;AAWD,0EAUC;AAxFD,+DAGoC;AAEpC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAG5C,QAAA,4BAA4B,GAAG;IAC1C,SAAS;IACT,WAAW;IACX,wBAAwB;CAChB,CAAC;AA0CE,QAAA,6BAA6B,GACxC,IAAA,kCAAiB,GAA0C,CAAC;AAG9D,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,wCAA+B,GAAG,IAAI,iCAAgB,EAEhE,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AAGD,SAAgB,iCAAiC,CAAC,IAAY;IAC5D,QAAQ,CAAC,+BAA+B,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAWD,SAAgB,+BAA+B,CAC7C,QAAiC;IAEjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,QAAQ,CAAC,+BAA+B,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3E,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,iCAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC;KACnE,CAAC;AACJ,CAAC"}
package/docs/1.index.md CHANGED
@@ -14,6 +14,7 @@ Consumers depend on `@antelopejs/interface-dms-saas`, not the runtime's private
14
14
  | Root | Billing, data API, pages, plans, provisioning and registration exports; `invoiceLineItems` and `tenantLifecycle` namespaces |
15
15
  | `/billing` | [Balances, previews and billing-state recomputation](./2.billing.md) |
16
16
  | `/invoice-line-items` | [Usage providers, line types and key helpers](./3.lifecycle-and-usage.md#invoice-line-items) |
17
+ | `/plan-changes` | [Inventory policy and guarded Free downgrade](./3.lifecycle-and-usage.md#plan-changes) |
17
18
  | `/tenant-lifecycle` | [Durable lifecycle consumers and provisioning gate](./3.lifecycle-and-usage.md#tenant-lifecycle) |
18
19
  | `/provisioning`, `/registration` | [Provisioning payload and registration limits](./3.lifecycle-and-usage.md#registration-and-provisioning) |
19
20
  | `/pages`, `/page-definitions` | [Page descriptors and extension registration](./4.pages-plans-data.md#page-extensions) |
package/docs/2.billing.md CHANGED
@@ -7,6 +7,31 @@ description: Authorized customer balances and invoice previews, and republishing
7
7
 
8
8
  Import these functions and types from `@antelopejs/interface-dms-saas/billing` or the package root.
9
9
 
10
+ ## Read a customer's balance
11
+
12
+ Use this read when a billing page needs to distinguish credit from money owed.
13
+ Pass IDs obtained from your authenticated request, not unchecked request fields.
14
+
15
+ ```ts docs-check
16
+ import {
17
+ GetTenantCustomerBalance,
18
+ type TenantCustomerBalanceScope,
19
+ } from "@antelopejs/interface-dms-saas/billing";
20
+
21
+ export async function describeBalance(scope: TenantCustomerBalanceScope): Promise<string> {
22
+ const balance = await GetTenantCustomerBalance(scope);
23
+ if (balance.status === "absent") return `No balance: ${balance.reason}`;
24
+ const amount = balance.balanceMinorUnits;
25
+ if (amount === 0) return "Settled";
26
+ return `${Math.abs(amount)} ${balance.currency} minor units ${amount < 0 ? "in credit" : "owed"}`;
27
+ }
28
+ ```
29
+
30
+ For an available EUR balance of `-1250`, this returns `1250 EUR minor units in
31
+ credit`: €12.50 available for future invoices, not a refund. A provider failure
32
+ rejects the call; do not turn it into a zero balance. The reference below covers
33
+ all absence reasons and the separate upcoming-invoice estimate.
34
+
10
35
  ## GetTenantCustomerBalance
11
36
 
12
37
  `GetTenantCustomerBalance(scope: TenantCustomerBalanceScope): Promise<TenantCustomerBalance>` takes `{ tenantId: string, userId: string }` from a trusted authentication boundary. It requires membership and a successful tenant access gate; it rejects unauthorized callers with 403. It does not trust a supplied user ID as proof of authentication.
@@ -48,6 +73,12 @@ An available preview includes these fields. All amounts are integers in the mino
48
73
 
49
74
  The preview calls usage providers with `isPreview: true` and can populate a tenant-level shared database cache. It never creates an invoice or charges quoted lines. Usage covers the running cycle so far, not its final total; display `computedAt`. A missing payment method does not itself prevent previewing. Cache lifetime, invalidation and Stripe read timeouts are [runtime configuration](/docs/modules/saas/extending#upcoming-invoice-preview).
50
75
 
76
+ ## GetTenantBillingPeriod
77
+
78
+ `GetTenantBillingPeriod(tenantId: string): Promise<TenantBillingPeriod | null>` returns the tenant's current Stripe billing period as `{ start: Date, end: Date }`, half-open (`[start, end)`). It is clipped to the paid usage exactly as renewal invoices clip their usage window: a period opened before the paid usage started starts with it, and a guarded downgrade or a closed paid period ends it early. It is `null` for a free or complimentary tenant and for one whose period dms-saas has not recorded yet (`currentPeriodStart` is stored from the subscription webhooks).
79
+
80
+ This is a trusted read with no user scope or membership check; storage errors propagate. It does not call Stripe. Usage credits in dms-saas consumers may follow another cycle (Cloud resets its allowance on the UTC calendar month): use this period only where you mean the invoice's.
81
+
51
82
  ## RecomputeTenantBillingState
52
83
 
53
84
  `RecomputeTenantBillingState(tenantId: string): Promise<void>` republishes the tenant's billing state and workspace directory fields, including plan, seats, MRR, renewal and owner, from current records. Call it after a seed or import finishes direct writes. Normal runtime billing operations already do this.
@@ -7,9 +7,24 @@ description: Registration extras, durable tenant lifecycle consumers and idempot
7
7
 
8
8
  Use the direct subpaths below or the root's `invoiceLineItems` and `tenantLifecycle` namespaces. Register consumers/providers from the owning module's lifecycle, not a request handler. Registrations replay when SaaS attaches or reloads and are released when their owner unloads.
9
9
 
10
+ ## Choose when your work should happen
11
+
12
+ | Task | Integration | Example result |
13
+ | --- | --- | --- |
14
+ | Save onboarding answers | Provisioning hook | A referral code is stored before signup completes |
15
+ | Create paid product resources | `created` lifecycle consumer | A workspace gets its resources after payment is committed |
16
+ | Pause or resume resources | Lifecycle consumer | SaaS access waits for the required reactivation receipts |
17
+ | Add measured usage to a bill | Invoice line-item provider | 120 compute minutes produce one priced line |
18
+
19
+ For that last example, `amountCents: 600` and `quantity: 120` mean a line total
20
+ of €6.00 on an EUR invoice, not 120 × €6.00. Your resolver calculates the total;
21
+ SaaS does not multiply it by the quantity. See the
22
+ [working provider example](/docs/modules/saas/extending#invoice-line-items)
23
+ before implementing the contract below.
24
+
10
25
  ## Invoice line items
11
26
 
12
- Import from `/invoice-line-items`. `RegisterInvoiceLineItemsProvider(provider: InvoiceLineItemsProvider): void` registers `{ id: string, resolve: InvoiceLineItemsResolver }`. `UnregisterInvoiceLineItemsProvider(providerId: string): void` removes it; unknown IDs are ignored. Register during `construct()` and unregister during `stop()`.
27
+ Import from `/invoice-line-items`. `RegisterInvoiceLineItemsProvider(provider: InvoiceLineItemsProvider): void` registers `{ id: string, resolve: InvoiceLineItemsResolver, onUsageGap?: (gap: InvoiceUsageGap) => void }`. `UnregisterInvoiceLineItemsProvider(providerId: string): void` removes it; unknown IDs are ignored. Register during `construct()` and unregister during `stop()`.
13
28
 
14
29
  ```ts [Contract]
15
30
  interface InvoiceLineItemsContext {
@@ -30,16 +45,45 @@ interface InvoiceLineItem {
30
45
  metadata?: Record<string, string>;
31
46
  }
32
47
 
48
+ type InvoiceLineItemsResolution =
49
+ | { status: "ready"; lines: InvoiceLineItem[] }
50
+ | { status: "not_ready"; reason: string };
51
+
52
+ interface InvoiceUsageGap {
53
+ tenantId: string;
54
+ invoiceId: string;
55
+ periodStart: Date;
56
+ periodEnd: Date;
57
+ reasons: string[];
58
+ }
59
+
33
60
  type InvoiceLineItemsResolver = (
34
61
  context: InvoiceLineItemsContext,
35
- ) => Promise<InvoiceLineItem[]> | InvoiceLineItem[];
62
+ ) =>
63
+ | Promise<InvoiceLineItem[] | InvoiceLineItemsResolution>
64
+ | InvoiceLineItem[]
65
+ | InvoiceLineItemsResolution;
36
66
  ```
37
67
 
38
- The runtime asks providers for `subscription_cycle` renewal invoices, not initial or one-off invoices. The dates cover the cycle just closed, clipped to the subscription's paid usage period. Complimentary/grace usage is excluded; no provider runs for an empty covered window. Read tenant-scoped, pre-aggregated usage because the resolver runs inside the webhook request.
68
+ The runtime asks providers for `subscription_cycle` renewal invoices, not initial or one-off invoices. The dates cover the cycle just closed, clipped to the subscription's paid usage period. Complimentary/grace usage is excluded; no provider runs for an empty covered window. Read tenant-scoped, pre-aggregated usage because the resolver runs inside the webhook request or the recovery worker, and return the same lines every time for a closed window.
39
69
 
40
70
  `amountCents` is the safe-integer line total in the invoice currency, including negative credits. Quantity and unit are audit metadata, not factors multiplied into the total. Zero amounts are dropped. Empty keys/descriptions, non-safe-integer amounts, keys containing `:`, or combined keys over 150 characters are invalid. Provider IDs must not contain `:`; registration throws if they do. IDs must be globally unique across modules: a collision replaces the earlier provider, and collisions before attachment can collapse silently.
41
71
 
42
- Keep each line key stable. The runtime injects at most one line per invoice/provider/key across webhook replays and concurrent workers. A throwing provider is logged and skipped so others can run, but partial/invalid injection ultimately fails the webhook to expose underbilling. Returning lines is not a guarantee that Stripe accepted the invoice items.
72
+ Keep each line key stable. The runtime injects at most one line per invoice/provider/key across webhook replays and concurrent workers. Returning lines is not a guarantee that Stripe accepted the invoice items.
73
+
74
+ On a closing invoice the runtime first suspends the draft (`auto_advance=false`) and hands the injection to a durable task. The invoice is always finalized: once every provider's lines are on it, or 48 hours after it was registered with the lines available:
75
+
76
+ | Resolver answer | Effect |
77
+ | --- | --- |
78
+ | An array, or `{ status: "ready", lines }` | The lines are injected; an empty array states an empty bill. |
79
+ | `{ status: "not_ready", reason }`, or a thrown error | The draft stays suspended and the provider is asked again later; past the deadline, the invoice is finalized without its lines. |
80
+ | Anything else | Treated as `not_ready` with reason `invalid_resolution` (`INVALID_RESOLUTION_REASON`); `normalizeInvoiceLineItemsResolution` applies that rule. |
81
+
82
+ An invoice finalized without some of its lines — a provider not ready at the deadline, invalid lines, Stripe refusing a line, or a draft changed outside dms-saas — never bills the missing usage: the gap favours the customer. The runtime logs it at error level (`invoice finalized with missing usage`) and calls `onUsageGap` on every provider the invoice was registered with, so the provider can raise an alert and its owner can fix the system. Each reason starts with a stable code (`provider_not_ready`, `managed_lines_unexpected_or_changed`, `before_finalize`, ...) followed by `:` and its detail.
83
+
84
+ `periodStart` is inclusive and `periodEnd` exclusive, so two adjacent cycle invoices cover disjoint windows. A preview covers the open cycle up to the request time; it is a quote of the next invoice, not an addition to it. A negative `amountCents` is a credit line.
85
+
86
+ A provider that may still be loading when an invoice is created is listed in the runtime's `invoiceLineRequiredProviders` option so the invoice waits for it. See the [runtime configuration](/docs/modules/saas/configuration).
43
87
 
44
88
  Preview calls set `isPreview: true`, use a synthetic `upcoming_<subscription id>` invoice ID, and end at the request time. They quote usage without invoicing it. Do not mutate usage accounting inside a resolver. A failed resolver or invalid line makes the preview unavailable.
45
89
 
@@ -49,6 +93,29 @@ Preview calls set `isPreview: true`, use a synthetic `upcoming_<subscription id>
49
93
 
50
94
  `selectInvoiceLineItemsToCreate(providerId: string, items: readonly InvoiceLineItem[], alreadyInjectedKeys: ReadonlySet<string>): InvoiceLineItemSelection` is synchronous and has no Stripe side effects. It returns `accepted: PreparedInvoiceLineItem[]` (`{ lineKey, item }`, with trimmed item keys) and `skipped: SkippedInvoiceLineItem[]` (`{ lineKey, reason }`). `SkippedLineItemReason` is `already_invoiced`, `duplicate_key`, `zero_amount`, or `invalid`. The set must contain full provider-prefixed keys. This selection helper does not itself provide transactional idempotency.
51
95
 
96
+ ## Plan changes
97
+
98
+ Import from `/plan-changes`. A module that owns tenant inventory (applications, environments, seats it counts) registers the policy SaaS consults before a paid-to-Free downgrade lands:
99
+
100
+ ```ts [Contract]
101
+ interface PlanChangePolicy {
102
+ name: string;
103
+ validatePlanChange(
104
+ request: PlanChangeValidationRequest,
105
+ ): Promise<PlanChangeIncompatibility[]>;
106
+ }
107
+ ```
108
+
109
+ `RegisterPlanChangePolicy(policy)` registers the sole policy and `UnregisterPlanChangePolicy(name)` removes it; registering opts deferred changes into the guarded paid-to-Free flow. `validatePlanChange` runs for the `preview`, `schedule` and `effective` phases; the effective call runs after DMS tenant admission is paused and earlier membership writers have drained. It must not mutate inventory or call Stripe. A missing policy, when the runtime's `requiredPlanChangePolicy` names one, fails closed.
110
+
111
+ | Function | Use |
112
+ | --- | --- |
113
+ | `GetTenantPlanConstraints(tenantId)` | Current and pending plan, `blocked`/`admissionBlocked` and the incompatibilities, for inventory writers to check after entering their own admission. Read-only, not a reservation. |
114
+ | `CountOccupiedSeats(tenantId)` | Occupied seats, including unexpired invitations and excluding platform support. |
115
+ | `GetPlanChangeActivation(tenantId)` | `{ planChangeOperationId, operationId, gateId }` of the only downgrade hold an activation consumer may release, or `null`. Match both operation IDs on the lifecycle message, evaluate every DMS access gate (`EvaluateTenantAccess`) and preserve every other denial. |
116
+
117
+ `TenantLifecycleMessage.planChangeOperationId` marks a lifecycle delivery produced by a guarded downgrade; never treat one you cannot authorize as an ordinary resume.
118
+
52
119
  ## Tenant lifecycle
53
120
 
54
121
  Import from `/tenant-lifecycle`. `TENANT_LIFECYCLE_TRANSITIONS` contains `created`, `suspended` and `reactivation_requested`; `TenantLifecycleTransition` is their union.
@@ -42,14 +42,15 @@ Import from `/plans`. These helpers do not charge customers or authorize access.
42
42
  | `monthlyPrice(plan: Plan): number` | Returns the price as a monthly amount; yearly prices divide by 12 |
43
43
  | `isDowngrade(current: Plan \| null, target: Plan, seats?: number): boolean` | Compares monthly cost, multiplying seat plans by at least one seat; seats default to 1. No current plan returns false; equal cost is not a downgrade |
44
44
  | `localizeFeature(feature: Feature, locale: string): Feature` | Applies localization to `displayName`, `description`, `tooltip`, and `unit`, listed by exported `FEATURE_LOCALIZED_FIELDS`; missing translations fall back to the table locale (`en`) |
45
- | `buildTenantPlanCatalog(planModel: PlanModel, featureModel: FeatureModel, plans: Plan[], locale: string): Promise<TenantPlanCatalog>` | Reads features, resolves plan inheritance, excludes unknown feature IDs and sorts plans/features by order; model read failures reject |
45
+ | `localizePlan(plan: Plan, locale: string): Plan` | Applies localization to `name`, `description`, and `borderLabel`, listed by exported `PLAN_LOCALIZED_FIELDS`; missing translations fall back to `PLAN_FALLBACK_LOCALE` (`en`). `PlanModel` reads already return plans unlocked in that fallback locale |
46
+ | `buildTenantPlanCatalog(planModel: PlanModel, featureModel: FeatureModel, plans: Plan[], locale: string): Promise<TenantPlanCatalog>` | Reads features, resolves plan inheritance, excludes unknown feature IDs and sorts plans/features by order; plan names and feature labels are read in `locale`; model read failures reject |
46
47
 
47
48
  `TenantPlanCatalog` has `plans: TenantPlanView[]` and `features: TenantPlanFeature[]`.
48
49
 
49
50
  - `TenantPlanView`: `_id: string`, `name: string`, `price: number`, `currency: string`, `interval: PlanInterval` (`month` or `year`), `order: number`, `checkoutAvailable: boolean`, and `featureValues: Record<string, unknown>`. Checkout availability reflects a Stripe price reference, not an authorization decision.
50
51
  - `TenantPlanFeature`: `featureId: string`, `displayName: string`, `tooltip: string | null`, `unit: string | null`, `valueType: FeatureValueType` (`boolean`, `number`, or `string`), `isDetailRow: boolean`, and `order: number`.
51
52
 
52
- Keep caller-supplied plan/model scopes authorized. The catalogue builder does not filter an arbitrary plan list to what a user may buy. Write localized feature values using the canonical model's `localize("*")` convention; see the [feature integration guide](/docs/modules/saas/extending#plan-feature-labels-and-values).
53
+ Keep caller-supplied plan/model scopes authorized. The catalogue builder does not filter an arbitrary plan list to what a user may buy. Write localized plan and feature texts using the canonical model's `localize("*")` convention, one value per locale (`{ en: "Pro", fr: "Pro" }`), never `$` i18n keys; see the [feature integration guide](/docs/modules/saas/extending#plan-feature-labels-and-values).
53
54
 
54
55
  ## HiddenStringFilter
55
56
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/interface-dms-saas",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "AntelopeJS interface for the DMS SaaS module: billing, plans, registration, workspace pages and lifecycle extension points.",
5
5
  "keywords": [
6
6
  "antelopejs",
@@ -71,7 +71,7 @@
71
71
  },
72
72
  "dependencies": {
73
73
  "@antelopejs/interface-data-api": ">=0.2.2 <1.0.0",
74
- "@antelopejs/interface-dms": ">=0.7.2 <1.0.0"
74
+ "@antelopejs/interface-dms": ">=0.7.4 <1.0.0"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@antelopejs/interface-core": ">=0.2.4 <1.0.0",