@antelopejs/interface-dms-saas 0.4.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/db/models/stripeWebhookEvents.model.d.ts +1 -0
- package/dist/db/models/stripeWebhookEvents.model.js +24 -0
- package/dist/db/models/stripeWebhookEvents.model.js.map +1 -1
- package/dist/db/models/tenantSubscriptions.model.js +4 -1
- package/dist/db/models/tenantSubscriptions.model.js.map +1 -1
- package/dist/db/tables/tenantSubscriptions.table.d.ts +14 -0
- package/dist/db/tables/tenantSubscriptions.table.js +4 -0
- package/dist/db/tables/tenantSubscriptions.table.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/invoice-line-items.d.ts +16 -1
- package/dist/invoice-line-items.js +13 -1
- package/dist/invoice-line-items.js.map +1 -1
- package/dist/plan-changes.d.ts +41 -0
- package/dist/plan-changes.js +22 -0
- package/dist/plan-changes.js.map +1 -0
- package/dist/tenant-lifecycle.d.ts +28 -0
- package/dist/tenant-lifecycle.js +30 -0
- package/dist/tenant-lifecycle.js.map +1 -0
- package/docs/1.index.md +6 -5
- package/docs/2.billing.md +25 -0
- package/docs/3.lifecycle-and-usage.md +82 -21
- package/package.json +2 -2
- package/dist/workspace-lifecycle.d.ts +0 -27
- package/dist/workspace-lifecycle.js +0 -30
- package/dist/workspace-lifecycle.js.map +0 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ The AntelopeJS interface to extend the DMS SaaS module: billing, plans, registra
|
|
|
17
17
|
- Builds plan projections and catalogues, and normalizes prices.
|
|
18
18
|
- Extends registration and the provisioning of a new workspace.
|
|
19
19
|
- Adds workspace settings categories and blocks to the tenant billing page.
|
|
20
|
-
- Listens to
|
|
20
|
+
- Listens to tenant lifecycle events and operator actions, and exposes the canonical SaaS tables and models (`/db`).
|
|
21
21
|
|
|
22
22
|
A module that extends [`@antelopejs/dms-saas`](https://www.npmjs.com/package/@antelopejs/dms-saas) depends on this package, never on the runtime.
|
|
23
23
|
|
|
@@ -29,13 +29,13 @@ pnpm add @antelopejs/interface-dms-saas
|
|
|
29
29
|
|
|
30
30
|
## Quick start
|
|
31
31
|
|
|
32
|
-
The root entry holds every extension point except `db`, with `invoiceLineItems` and `
|
|
32
|
+
The root entry holds every extension point except `db`, with `invoiceLineItems` and `tenantLifecycle` as namespaces:
|
|
33
33
|
|
|
34
34
|
```ts docs-check
|
|
35
|
-
import { invoiceLineItems,
|
|
35
|
+
import { invoiceLineItems, tenantLifecycle } from "@antelopejs/interface-dms-saas";
|
|
36
36
|
|
|
37
37
|
export const usageKey = invoiceLineItems.buildInvoiceLineKey("example.compute", "minutes");
|
|
38
|
-
export const isProvisioningCommitted =
|
|
38
|
+
export const isProvisioningCommitted = tenantLifecycle.IsTenantProvisioningCommitted;
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Use the [entry-point reference](./docs/1.index.md#entry-points) for supported
|
|
@@ -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.
|
|
58
|
+
| `@antelopejs/interface-dms` | `>=0.7.4 <1.0.0` |
|
|
59
59
|
|
|
60
60
|
Peer dependencies:
|
|
61
61
|
|
|
@@ -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;
|
|
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.
|
|
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,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;
|
|
@@ -32,6 +45,7 @@ export declare class TenantSubscription extends Table {
|
|
|
32
45
|
currentPeriodEnd: Date | null;
|
|
33
46
|
pendingPlanId: string | null;
|
|
34
47
|
pendingPlanChangeAt: Date | null;
|
|
48
|
+
guardedPlanChange: GuardedPlanChange | null;
|
|
35
49
|
domainTransition: SubscriptionTransition | null;
|
|
36
50
|
revision: string;
|
|
37
51
|
createdBy: string | null;
|
|
@@ -101,6 +101,10 @@ __decorate([
|
|
|
101
101
|
(0, interface_database_decorators_1.Field)("date"),
|
|
102
102
|
__metadata("design:type", Object)
|
|
103
103
|
], TenantSubscription.prototype, "pendingPlanChangeAt", void 0);
|
|
104
|
+
__decorate([
|
|
105
|
+
(0, interface_database_decorators_1.Field)("any"),
|
|
106
|
+
__metadata("design:type", Object)
|
|
107
|
+
], TenantSubscription.prototype, "guardedPlanChange", void 0);
|
|
104
108
|
__decorate([
|
|
105
109
|
(0, interface_database_decorators_1.Field)("any"),
|
|
106
110
|
__metadata("design:type", Object)
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"tenantSubscriptions.table.js","sourceRoot":"","sources":["../../../src/db/tables/tenantSubscriptions.table.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export * from "./plans";
|
|
|
5
5
|
export * from "./provisioning";
|
|
6
6
|
export * from "./registration";
|
|
7
7
|
export * as invoiceLineItems from "./invoice-line-items";
|
|
8
|
-
export * as
|
|
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.
|
|
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);
|
|
@@ -44,5 +44,6 @@ __exportStar(require("./plans"), exports);
|
|
|
44
44
|
__exportStar(require("./provisioning"), exports);
|
|
45
45
|
__exportStar(require("./registration"), exports);
|
|
46
46
|
exports.invoiceLineItems = __importStar(require("./invoice-line-items"));
|
|
47
|
-
exports.
|
|
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,
|
|
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,7 +15,22 @@ export interface InvoiceLineItemsContext {
|
|
|
15
15
|
periodEnd: Date;
|
|
16
16
|
isPreview?: boolean;
|
|
17
17
|
}
|
|
18
|
-
export
|
|
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 interface InvoiceLineItemsBlocked {
|
|
27
|
+
status: "blocked";
|
|
28
|
+
reason: string;
|
|
29
|
+
}
|
|
30
|
+
export type InvoiceLineItemsResolution = InvoiceLineItemsReady | InvoiceLineItemsNotReady | InvoiceLineItemsBlocked;
|
|
31
|
+
export type InvoiceLineItemsResolver = (context: InvoiceLineItemsContext) => Promise<InvoiceLineItem[] | InvoiceLineItemsResolution> | InvoiceLineItem[] | InvoiceLineItemsResolution;
|
|
32
|
+
export declare const INVALID_RESOLUTION_REASON = "invalid_resolution";
|
|
33
|
+
export declare function normalizeInvoiceLineItemsResolution(value: unknown): InvoiceLineItemsResolution;
|
|
19
34
|
export interface InvoiceLineItemsProvider {
|
|
20
35
|
id: string;
|
|
21
36
|
resolve: InvoiceLineItemsResolver;
|
|
@@ -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" || candidate?.status === "blocked")
|
|
18
|
+
return { status: candidate.status, reason: String(candidate.reason) };
|
|
19
|
+
return { status: "blocked", 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) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice-line-items.js","sourceRoot":"","sources":["../src/invoice-line-items.ts"],"names":[],"mappings":";;;
|
|
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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { RegisteringProxy } from "@antelopejs/interface-core";
|
|
2
|
+
export declare const TENANT_LIFECYCLE_TRANSITIONS: readonly ["created", "suspended", "reactivation_requested"];
|
|
3
|
+
export type TenantLifecycleTransition = (typeof TENANT_LIFECYCLE_TRANSITIONS)[number];
|
|
4
|
+
export interface TenantLifecycleMessage {
|
|
5
|
+
tenantId: string;
|
|
6
|
+
operationId: string;
|
|
7
|
+
transition: TenantLifecycleTransition;
|
|
8
|
+
requestedAt: Date;
|
|
9
|
+
planChangeOperationId?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TenantLifecycleReceipt {
|
|
12
|
+
receiptId: string;
|
|
13
|
+
effectiveAt?: Date;
|
|
14
|
+
}
|
|
15
|
+
export interface TenantLifecycleConsumer {
|
|
16
|
+
name: string;
|
|
17
|
+
transitions: readonly TenantLifecycleTransition[];
|
|
18
|
+
consume(message: TenantLifecycleMessage): Promise<TenantLifecycleReceipt>;
|
|
19
|
+
}
|
|
20
|
+
export interface TenantLifecycleConsumerRegistration {
|
|
21
|
+
unregister(): void;
|
|
22
|
+
}
|
|
23
|
+
export declare const IsTenantProvisioningCommitted: (tenantId: string) => Promise<boolean>;
|
|
24
|
+
export declare namespace internal {
|
|
25
|
+
const RegisterTenantLifecycleConsumer: RegisteringProxy<(name: string, consumer: TenantLifecycleConsumer) => void>;
|
|
26
|
+
}
|
|
27
|
+
export declare function UnregisterTenantLifecycleConsumer(name: string): void;
|
|
28
|
+
export declare function RegisterTenantLifecycleConsumer(consumer: TenantLifecycleConsumer): TenantLifecycleConsumerRegistration;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.internal = exports.IsTenantProvisioningCommitted = exports.TENANT_LIFECYCLE_TRANSITIONS = void 0;
|
|
4
|
+
exports.UnregisterTenantLifecycleConsumer = UnregisterTenantLifecycleConsumer;
|
|
5
|
+
exports.RegisterTenantLifecycleConsumer = RegisterTenantLifecycleConsumer;
|
|
6
|
+
const interface_core_1 = require("@antelopejs/interface-core");
|
|
7
|
+
const CONSUMER_NAME_PATTERN = /^[a-z][a-z0-9._-]{2,63}$/;
|
|
8
|
+
exports.TENANT_LIFECYCLE_TRANSITIONS = [
|
|
9
|
+
"created",
|
|
10
|
+
"suspended",
|
|
11
|
+
"reactivation_requested",
|
|
12
|
+
];
|
|
13
|
+
exports.IsTenantProvisioningCommitted = (0, interface_core_1.InterfaceFunction)();
|
|
14
|
+
var internal;
|
|
15
|
+
(function (internal) {
|
|
16
|
+
internal.RegisterTenantLifecycleConsumer = new interface_core_1.RegisteringProxy();
|
|
17
|
+
})(internal || (exports.internal = internal = {}));
|
|
18
|
+
function UnregisterTenantLifecycleConsumer(name) {
|
|
19
|
+
internal.RegisterTenantLifecycleConsumer.unregister(name);
|
|
20
|
+
}
|
|
21
|
+
function RegisterTenantLifecycleConsumer(consumer) {
|
|
22
|
+
if (!CONSUMER_NAME_PATTERN.test(consumer.name)) {
|
|
23
|
+
throw new Error("Invalid workspace lifecycle consumer name");
|
|
24
|
+
}
|
|
25
|
+
internal.RegisterTenantLifecycleConsumer.register(consumer.name, consumer);
|
|
26
|
+
return {
|
|
27
|
+
unregister: () => UnregisterTenantLifecycleConsumer(consumer.name),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=tenant-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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
|
@@ -11,26 +11,27 @@ Consumers depend on `@antelopejs/interface-dms-saas`, not the runtime's private
|
|
|
11
11
|
|
|
12
12
|
| Import after `@antelopejs/interface-dms-saas` | Contract |
|
|
13
13
|
| --- | --- |
|
|
14
|
-
| Root | Billing, data API, pages, plans, provisioning and registration exports; `invoiceLineItems` and `
|
|
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
|
-
| `/
|
|
17
|
+
| `/plan-changes` | [Inventory policy and guarded Free downgrade](./3.lifecycle-and-usage.md#plan-changes) |
|
|
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) |
|
|
20
21
|
| `/plans` | [Plan projections, localization and pricing helpers](./4.pages-plans-data.md#plan-helpers) |
|
|
21
22
|
| `/data-api`, `/hidden-filter` | [HiddenStringFilter](./4.pages-plans-data.md#hiddenstringfilter) |
|
|
22
23
|
| `/db`, `/db/models`, `/db/tables` | Canonical SaaS models and table classes; see the data boundary below |
|
|
23
24
|
|
|
24
|
-
`invoiceLineItems` and `
|
|
25
|
+
`invoiceLineItems` and `tenantLifecycle` are namespaces at the root, not flat exports. Use their direct subpaths for individual functions. Their `internal` proxy namespaces are implementation plumbing, not consumer APIs.
|
|
25
26
|
|
|
26
27
|
```ts docs-check
|
|
27
|
-
import { invoiceLineItems,
|
|
28
|
+
import { invoiceLineItems, tenantLifecycle } from "@antelopejs/interface-dms-saas";
|
|
28
29
|
|
|
29
30
|
export const usageKey = invoiceLineItems.buildInvoiceLineKey("example.compute", "minutes");
|
|
30
31
|
|
|
31
32
|
export async function mayProvision(tenantId: string): Promise<boolean> {
|
|
32
33
|
// Errors propagate: unavailable storage must not grant eligibility.
|
|
33
|
-
return
|
|
34
|
+
return tenantLifecycle.IsTenantProvisioningCommitted(tenantId);
|
|
34
35
|
}
|
|
35
36
|
```
|
|
36
37
|
|
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.
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Lifecycle and usage
|
|
3
|
-
description: Registration extras, durable
|
|
3
|
+
description: Registration extras, durable tenant lifecycle consumers and idempotent invoice usage providers.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Lifecycle and usage
|
|
7
7
|
|
|
8
|
-
Use the direct subpaths below or the root's `invoiceLineItems` and `
|
|
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
|
+
|
|
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.
|
|
9
24
|
|
|
10
25
|
## Invoice line items
|
|
11
26
|
|
|
@@ -30,16 +45,37 @@ 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
|
+
| { status: "blocked"; reason: string };
|
|
52
|
+
|
|
33
53
|
type InvoiceLineItemsResolver = (
|
|
34
54
|
context: InvoiceLineItemsContext,
|
|
35
|
-
) =>
|
|
55
|
+
) =>
|
|
56
|
+
| Promise<InvoiceLineItem[] | InvoiceLineItemsResolution>
|
|
57
|
+
| InvoiceLineItem[]
|
|
58
|
+
| InvoiceLineItemsResolution;
|
|
36
59
|
```
|
|
37
60
|
|
|
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.
|
|
61
|
+
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
62
|
|
|
40
63
|
`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
64
|
|
|
42
|
-
Keep each line key stable. The runtime injects at most one line per invoice/provider/key across webhook replays and concurrent workers.
|
|
65
|
+
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.
|
|
66
|
+
|
|
67
|
+
On a closing invoice the runtime first suspends the draft (`auto_advance=false`) and hands the injection to a durable task, then finalizes the invoice only once every provider's lines are on it:
|
|
68
|
+
|
|
69
|
+
| Resolver answer | Effect |
|
|
70
|
+
| --- | --- |
|
|
71
|
+
| An array, or `{ status: "ready", lines }` | The lines are injected; an empty array states an empty bill. |
|
|
72
|
+
| `{ status: "not_ready", reason }`, or a thrown error | The draft stays suspended and the provider is asked again later. |
|
|
73
|
+
| `{ status: "blocked", reason }` | The draft stays suspended for an operator; it is never finalized without the lines. |
|
|
74
|
+
| Anything else | Treated as `blocked` with reason `invalid_resolution` (`INVALID_RESOLUTION_REASON`); `normalizeInvoiceLineItemsResolution` applies that rule. |
|
|
75
|
+
|
|
76
|
+
`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. A `blocked` answer from any provider, listed in `invoiceLineRequiredProviders` or not, holds the whole invoice for an operator.
|
|
77
|
+
|
|
78
|
+
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
79
|
|
|
44
80
|
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
81
|
|
|
@@ -49,42 +85,67 @@ Preview calls set `isPreview: true`, use a synthetic `upcoming_<subscription id>
|
|
|
49
85
|
|
|
50
86
|
`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
87
|
|
|
52
|
-
##
|
|
88
|
+
## Plan changes
|
|
89
|
+
|
|
90
|
+
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:
|
|
91
|
+
|
|
92
|
+
```ts [Contract]
|
|
93
|
+
interface PlanChangePolicy {
|
|
94
|
+
name: string;
|
|
95
|
+
validatePlanChange(
|
|
96
|
+
request: PlanChangeValidationRequest,
|
|
97
|
+
): Promise<PlanChangeIncompatibility[]>;
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`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.
|
|
102
|
+
|
|
103
|
+
| Function | Use |
|
|
104
|
+
| --- | --- |
|
|
105
|
+
| `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. |
|
|
106
|
+
| `CountOccupiedSeats(tenantId)` | Occupied seats, including unexpired invitations and excluding platform support. |
|
|
107
|
+
| `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. |
|
|
108
|
+
|
|
109
|
+
`TenantLifecycleMessage.planChangeOperationId` marks a lifecycle delivery produced by a guarded downgrade; never treat one you cannot authorize as an ordinary resume.
|
|
110
|
+
|
|
111
|
+
## Tenant lifecycle
|
|
112
|
+
|
|
113
|
+
Import from `/tenant-lifecycle`. `TENANT_LIFECYCLE_TRANSITIONS` contains `created`, `suspended` and `reactivation_requested`; `TenantLifecycleTransition` is their union.
|
|
53
114
|
|
|
54
|
-
|
|
115
|
+
**Breaking migration:** Update `@antelopejs/interface-dms-saas` and `@antelopejs/dms-saas` together. The old `RegisterWorkspaceLifecycleConsumer`, `UnregisterWorkspaceLifecycleConsumer`, `WorkspaceLifecycle*` types, `WORKSPACE_LIFECYCLE_TRANSITIONS`, `IsWorkspaceProvisioningCommitted`, `/workspace-lifecycle` subpath and root `workspaceLifecycle` namespace are removed, without compatibility aliases. Use the tenant-named API below and root `tenantLifecycle` namespace instead. Persisted consumer IDs, transition values and operation IDs remain unchanged; keep existing consumer names and deduplication keys.
|
|
55
116
|
|
|
56
117
|
```ts [Contract]
|
|
57
|
-
import type {
|
|
118
|
+
import type { TenantLifecycleTransition } from "@antelopejs/interface-dms-saas/tenant-lifecycle";
|
|
58
119
|
|
|
59
|
-
interface
|
|
120
|
+
interface TenantLifecycleMessage {
|
|
60
121
|
tenantId: string;
|
|
61
122
|
operationId: string;
|
|
62
|
-
transition:
|
|
123
|
+
transition: TenantLifecycleTransition;
|
|
63
124
|
requestedAt: Date;
|
|
64
125
|
}
|
|
65
|
-
interface
|
|
126
|
+
interface TenantLifecycleReceipt {
|
|
66
127
|
receiptId: string;
|
|
67
128
|
effectiveAt?: Date;
|
|
68
129
|
}
|
|
69
|
-
interface
|
|
130
|
+
interface TenantLifecycleConsumer {
|
|
70
131
|
name: string;
|
|
71
|
-
transitions: readonly
|
|
72
|
-
consume(message:
|
|
132
|
+
transitions: readonly TenantLifecycleTransition[];
|
|
133
|
+
consume(message: TenantLifecycleMessage): Promise<TenantLifecycleReceipt>;
|
|
73
134
|
}
|
|
74
|
-
interface
|
|
135
|
+
interface TenantLifecycleConsumerRegistration { unregister(): void; }
|
|
75
136
|
|
|
76
|
-
declare function
|
|
77
|
-
consumer:
|
|
78
|
-
):
|
|
79
|
-
declare function
|
|
80
|
-
declare function
|
|
137
|
+
declare function RegisterTenantLifecycleConsumer(
|
|
138
|
+
consumer: TenantLifecycleConsumer,
|
|
139
|
+
): TenantLifecycleConsumerRegistration;
|
|
140
|
+
declare function UnregisterTenantLifecycleConsumer(name: string): void;
|
|
141
|
+
declare function IsTenantProvisioningCommitted(tenantId: string): Promise<boolean>;
|
|
81
142
|
```
|
|
82
143
|
|
|
83
144
|
Names must match `/^[a-z][a-z0-9._-]{2,63}$/`; invalid names throw synchronously. Pick a stable unique name and explicitly select transitions. Unregister via the returned handle or by name when the module stops.
|
|
84
145
|
|
|
85
146
|
Delivery is **at least once**. Deduplicate by `operationId`, durably link provisioned resources, then return a durable receipt. A rejection is not an acknowledgement. Suspension closes SaaS access before delivery; reactivation keeps access closed until every registered required consumer returns a receipt. `created` arrives after ownership, billing and pre-provisioning hooks succeed and the first invoice is paid, or no payment is required.
|
|
86
147
|
|
|
87
|
-
`
|
|
148
|
+
`IsTenantProvisioningCommitted` returns false for preparing, unpaid or cancelled self-service workspaces; true for committed creations and legacy/bootstrap tenants without a marker. It is not an existence, membership or access check. Storage and missing-implementation errors propagate; fail closed instead of treating an unavailable check as eligibility.
|
|
88
149
|
|
|
89
150
|
## Registration and provisioning
|
|
90
151
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/interface-dms-saas",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
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.
|
|
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",
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { RegisteringProxy } from "@antelopejs/interface-core";
|
|
2
|
-
export declare const WORKSPACE_LIFECYCLE_TRANSITIONS: readonly ["created", "suspended", "reactivation_requested"];
|
|
3
|
-
export type WorkspaceLifecycleTransition = (typeof WORKSPACE_LIFECYCLE_TRANSITIONS)[number];
|
|
4
|
-
export interface WorkspaceLifecycleMessage {
|
|
5
|
-
tenantId: string;
|
|
6
|
-
operationId: string;
|
|
7
|
-
transition: WorkspaceLifecycleTransition;
|
|
8
|
-
requestedAt: Date;
|
|
9
|
-
}
|
|
10
|
-
export interface WorkspaceLifecycleReceipt {
|
|
11
|
-
receiptId: string;
|
|
12
|
-
effectiveAt?: Date;
|
|
13
|
-
}
|
|
14
|
-
export interface WorkspaceLifecycleConsumer {
|
|
15
|
-
name: string;
|
|
16
|
-
transitions: readonly WorkspaceLifecycleTransition[];
|
|
17
|
-
consume(message: WorkspaceLifecycleMessage): Promise<WorkspaceLifecycleReceipt>;
|
|
18
|
-
}
|
|
19
|
-
export interface WorkspaceLifecycleConsumerRegistration {
|
|
20
|
-
unregister(): void;
|
|
21
|
-
}
|
|
22
|
-
export declare const IsWorkspaceProvisioningCommitted: (tenantId: string) => Promise<boolean>;
|
|
23
|
-
export declare namespace internal {
|
|
24
|
-
const RegisterWorkspaceLifecycleConsumer: RegisteringProxy<(name: string, consumer: WorkspaceLifecycleConsumer) => void>;
|
|
25
|
-
}
|
|
26
|
-
export declare function UnregisterWorkspaceLifecycleConsumer(name: string): void;
|
|
27
|
-
export declare function RegisterWorkspaceLifecycleConsumer(consumer: WorkspaceLifecycleConsumer): WorkspaceLifecycleConsumerRegistration;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.internal = exports.IsWorkspaceProvisioningCommitted = exports.WORKSPACE_LIFECYCLE_TRANSITIONS = void 0;
|
|
4
|
-
exports.UnregisterWorkspaceLifecycleConsumer = UnregisterWorkspaceLifecycleConsumer;
|
|
5
|
-
exports.RegisterWorkspaceLifecycleConsumer = RegisterWorkspaceLifecycleConsumer;
|
|
6
|
-
const interface_core_1 = require("@antelopejs/interface-core");
|
|
7
|
-
const CONSUMER_NAME_PATTERN = /^[a-z][a-z0-9._-]{2,63}$/;
|
|
8
|
-
exports.WORKSPACE_LIFECYCLE_TRANSITIONS = [
|
|
9
|
-
"created",
|
|
10
|
-
"suspended",
|
|
11
|
-
"reactivation_requested",
|
|
12
|
-
];
|
|
13
|
-
exports.IsWorkspaceProvisioningCommitted = (0, interface_core_1.InterfaceFunction)();
|
|
14
|
-
var internal;
|
|
15
|
-
(function (internal) {
|
|
16
|
-
internal.RegisterWorkspaceLifecycleConsumer = new interface_core_1.RegisteringProxy();
|
|
17
|
-
})(internal || (exports.internal = internal = {}));
|
|
18
|
-
function UnregisterWorkspaceLifecycleConsumer(name) {
|
|
19
|
-
internal.RegisterWorkspaceLifecycleConsumer.unregister(name);
|
|
20
|
-
}
|
|
21
|
-
function RegisterWorkspaceLifecycleConsumer(consumer) {
|
|
22
|
-
if (!CONSUMER_NAME_PATTERN.test(consumer.name)) {
|
|
23
|
-
throw new Error("Invalid workspace lifecycle consumer name");
|
|
24
|
-
}
|
|
25
|
-
internal.RegisterWorkspaceLifecycleConsumer.register(consumer.name, consumer);
|
|
26
|
-
return {
|
|
27
|
-
unregister: () => UnregisterWorkspaceLifecycleConsumer(consumer.name),
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=workspace-lifecycle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-lifecycle.js","sourceRoot":"","sources":["../src/workspace-lifecycle.ts"],"names":[],"mappings":";;;AAiEA,oFAEC;AAWD,gFAUC;AAxFD,+DAGoC;AAEpC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAG5C,QAAA,+BAA+B,GAAG;IAC7C,SAAS;IACT,WAAW;IACX,wBAAwB;CAChB,CAAC;AA0CE,QAAA,gCAAgC,GAC3C,IAAA,kCAAiB,GAA0C,CAAC;AAG9D,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,2CAAkC,GAAG,IAAI,iCAAgB,EAEnE,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AAGD,SAAgB,oCAAoC,CAAC,IAAY;IAC/D,QAAQ,CAAC,kCAAkC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAWD,SAAgB,kCAAkC,CAChD,QAAoC;IAEpC,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,kCAAkC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9E,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,CAAC,oCAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC;KACtE,CAAC;AACJ,CAAC"}
|