@antelopejs/interface-dms-saas 0.0.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.
Files changed (165) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +51 -0
  3. package/dist/billing.d.ts +25 -0
  4. package/dist/billing.js +15 -0
  5. package/dist/billing.js.map +1 -0
  6. package/dist/data-api.d.ts +1 -0
  7. package/dist/data-api.js +6 -0
  8. package/dist/data-api.js.map +1 -0
  9. package/dist/db/index.d.ts +2 -0
  10. package/dist/db/index.js +19 -0
  11. package/dist/db/index.js.map +1 -0
  12. package/dist/db/models/billingSettings.model.d.ts +22 -0
  13. package/dist/db/models/billingSettings.model.js +9 -0
  14. package/dist/db/models/billingSettings.model.js.map +1 -0
  15. package/dist/db/models/creditNotes.model.d.ts +25 -0
  16. package/dist/db/models/creditNotes.model.js +26 -0
  17. package/dist/db/models/creditNotes.model.js.map +1 -0
  18. package/dist/db/models/features.model.d.ts +22 -0
  19. package/dist/db/models/features.model.js +9 -0
  20. package/dist/db/models/features.model.js.map +1 -0
  21. package/dist/db/models/index.d.ts +19 -0
  22. package/dist/db/models/index.js +36 -0
  23. package/dist/db/models/index.js.map +1 -0
  24. package/dist/db/models/invoices.model.d.ts +29 -0
  25. package/dist/db/models/invoices.model.js +60 -0
  26. package/dist/db/models/invoices.model.js.map +1 -0
  27. package/dist/db/models/legalDocuments.model.d.ts +22 -0
  28. package/dist/db/models/legalDocuments.model.js +9 -0
  29. package/dist/db/models/legalDocuments.model.js.map +1 -0
  30. package/dist/db/models/planMigrations.model.d.ts +29 -0
  31. package/dist/db/models/planMigrations.model.js +70 -0
  32. package/dist/db/models/planMigrations.model.js.map +1 -0
  33. package/dist/db/models/plans.model.d.ts +31 -0
  34. package/dist/db/models/plans.model.js +74 -0
  35. package/dist/db/models/plans.model.js.map +1 -0
  36. package/dist/db/models/platformNotes.model.d.ts +33 -0
  37. package/dist/db/models/platformNotes.model.js +27 -0
  38. package/dist/db/models/platformNotes.model.js.map +1 -0
  39. package/dist/db/models/refunds.model.d.ts +23 -0
  40. package/dist/db/models/refunds.model.js +17 -0
  41. package/dist/db/models/refunds.model.js.map +1 -0
  42. package/dist/db/models/revision.d.ts +1 -0
  43. package/dist/db/models/revision.js +14 -0
  44. package/dist/db/models/revision.js.map +1 -0
  45. package/dist/db/models/segments.model.d.ts +29 -0
  46. package/dist/db/models/segments.model.js +81 -0
  47. package/dist/db/models/segments.model.js.map +1 -0
  48. package/dist/db/models/stripeWebhookEvents.model.d.ts +26 -0
  49. package/dist/db/models/stripeWebhookEvents.model.js +70 -0
  50. package/dist/db/models/stripeWebhookEvents.model.js.map +1 -0
  51. package/dist/db/models/supportMessages.model.d.ts +23 -0
  52. package/dist/db/models/supportMessages.model.js +17 -0
  53. package/dist/db/models/supportMessages.model.js.map +1 -0
  54. package/dist/db/models/supportTicketEvents.model.d.ts +22 -0
  55. package/dist/db/models/supportTicketEvents.model.js +9 -0
  56. package/dist/db/models/supportTicketEvents.model.js.map +1 -0
  57. package/dist/db/models/supportTickets.model.d.ts +25 -0
  58. package/dist/db/models/supportTickets.model.js +32 -0
  59. package/dist/db/models/supportTickets.model.js.map +1 -0
  60. package/dist/db/models/tenantBillingInfo.model.d.ts +24 -0
  61. package/dist/db/models/tenantBillingInfo.model.js +20 -0
  62. package/dist/db/models/tenantBillingInfo.model.js.map +1 -0
  63. package/dist/db/models/tenantBillingState.model.d.ts +28 -0
  64. package/dist/db/models/tenantBillingState.model.js +72 -0
  65. package/dist/db/models/tenantBillingState.model.js.map +1 -0
  66. package/dist/db/models/tenantSubscriptions.model.d.ts +51 -0
  67. package/dist/db/models/tenantSubscriptions.model.js +305 -0
  68. package/dist/db/models/tenantSubscriptions.model.js.map +1 -0
  69. package/dist/db/models/trialConsumptions.model.d.ts +24 -0
  70. package/dist/db/models/trialConsumptions.model.js +30 -0
  71. package/dist/db/models/trialConsumptions.model.js.map +1 -0
  72. package/dist/db/models/update-result.d.ts +1 -0
  73. package/dist/db/models/update-result.js +13 -0
  74. package/dist/db/models/update-result.js.map +1 -0
  75. package/dist/db/models/userSegments.model.d.ts +30 -0
  76. package/dist/db/models/userSegments.model.js +97 -0
  77. package/dist/db/models/userSegments.model.js.map +1 -0
  78. package/dist/db/tables/billingSettings.table.d.ts +22 -0
  79. package/dist/db/tables/billingSettings.table.js +73 -0
  80. package/dist/db/tables/billingSettings.table.js.map +1 -0
  81. package/dist/db/tables/creditNotes.table.d.ts +26 -0
  82. package/dist/db/tables/creditNotes.table.js +110 -0
  83. package/dist/db/tables/creditNotes.table.js.map +1 -0
  84. package/dist/db/tables/features.table.d.ts +18 -0
  85. package/dist/db/tables/features.table.js +70 -0
  86. package/dist/db/tables/features.table.js.map +1 -0
  87. package/dist/db/tables/index.d.ts +19 -0
  88. package/dist/db/tables/index.js +36 -0
  89. package/dist/db/tables/index.js.map +1 -0
  90. package/dist/db/tables/invoices.table.d.ts +47 -0
  91. package/dist/db/tables/invoices.table.js +140 -0
  92. package/dist/db/tables/invoices.table.js.map +1 -0
  93. package/dist/db/tables/legalDocuments.table.d.ts +10 -0
  94. package/dist/db/tables/legalDocuments.table.js +44 -0
  95. package/dist/db/tables/legalDocuments.table.js.map +1 -0
  96. package/dist/db/tables/planMigrations.table.d.ts +61 -0
  97. package/dist/db/tables/planMigrations.table.js +114 -0
  98. package/dist/db/tables/planMigrations.table.js.map +1 -0
  99. package/dist/db/tables/plans.table.d.ts +41 -0
  100. package/dist/db/tables/plans.table.js +125 -0
  101. package/dist/db/tables/plans.table.js.map +1 -0
  102. package/dist/db/tables/platformNotes.table.d.ts +13 -0
  103. package/dist/db/tables/platformNotes.table.js +58 -0
  104. package/dist/db/tables/platformNotes.table.js.map +1 -0
  105. package/dist/db/tables/refunds.table.d.ts +15 -0
  106. package/dist/db/tables/refunds.table.js +70 -0
  107. package/dist/db/tables/refunds.table.js.map +1 -0
  108. package/dist/db/tables/segments.table.d.ts +37 -0
  109. package/dist/db/tables/segments.table.js +79 -0
  110. package/dist/db/tables/segments.table.js.map +1 -0
  111. package/dist/db/tables/stripeWebhookEvents.table.d.ts +12 -0
  112. package/dist/db/tables/stripeWebhookEvents.table.js +54 -0
  113. package/dist/db/tables/stripeWebhookEvents.table.js.map +1 -0
  114. package/dist/db/tables/supportMessages.table.d.ts +14 -0
  115. package/dist/db/tables/supportMessages.table.js +62 -0
  116. package/dist/db/tables/supportMessages.table.js.map +1 -0
  117. package/dist/db/tables/supportTicketEvents.table.d.ts +14 -0
  118. package/dist/db/tables/supportTicketEvents.table.js +61 -0
  119. package/dist/db/tables/supportTicketEvents.table.js.map +1 -0
  120. package/dist/db/tables/supportTickets.table.d.ts +25 -0
  121. package/dist/db/tables/supportTickets.table.js +109 -0
  122. package/dist/db/tables/supportTickets.table.js.map +1 -0
  123. package/dist/db/tables/tenantBillingInfo.table.d.ts +24 -0
  124. package/dist/db/tables/tenantBillingInfo.table.js +62 -0
  125. package/dist/db/tables/tenantBillingInfo.table.js.map +1 -0
  126. package/dist/db/tables/tenantBillingState.table.d.ts +12 -0
  127. package/dist/db/tables/tenantBillingState.table.js +59 -0
  128. package/dist/db/tables/tenantBillingState.table.js.map +1 -0
  129. package/dist/db/tables/tenantSubscriptions.table.d.ts +46 -0
  130. package/dist/db/tables/tenantSubscriptions.table.js +157 -0
  131. package/dist/db/tables/tenantSubscriptions.table.js.map +1 -0
  132. package/dist/db/tables/trialConsumptions.table.d.ts +10 -0
  133. package/dist/db/tables/trialConsumptions.table.js +55 -0
  134. package/dist/db/tables/trialConsumptions.table.js.map +1 -0
  135. package/dist/db/tables/userSegments.table.d.ts +11 -0
  136. package/dist/db/tables/userSegments.table.js +56 -0
  137. package/dist/db/tables/userSegments.table.js.map +1 -0
  138. package/dist/hidden-filter.d.ts +1 -0
  139. package/dist/hidden-filter.js +10 -0
  140. package/dist/hidden-filter.js.map +1 -0
  141. package/dist/index.d.ts +8 -0
  142. package/dist/index.js +48 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/invoice-line-items.d.ts +42 -0
  145. package/dist/invoice-line-items.js +83 -0
  146. package/dist/invoice-line-items.js.map +1 -0
  147. package/dist/page-definitions.d.ts +17 -0
  148. package/dist/page-definitions.js +60 -0
  149. package/dist/page-definitions.js.map +1 -0
  150. package/dist/pages.d.ts +59 -0
  151. package/dist/pages.js +88 -0
  152. package/dist/pages.js.map +1 -0
  153. package/dist/plans.d.ts +27 -0
  154. package/dist/plans.js +60 -0
  155. package/dist/plans.js.map +1 -0
  156. package/dist/provisioning.d.ts +5 -0
  157. package/dist/provisioning.js +3 -0
  158. package/dist/provisioning.js.map +1 -0
  159. package/dist/registration.d.ts +6 -0
  160. package/dist/registration.js +9 -0
  161. package/dist/registration.js.map +1 -0
  162. package/dist/workspace-lifecycle.d.ts +27 -0
  163. package/dist/workspace-lifecycle.js +30 -0
  164. package/dist/workspace-lifecycle.js.map +1 -0
  165. package/package.json +108 -0
@@ -0,0 +1,59 @@
1
+ import type { Component, PlacementSide } from "@antelopejs/interface-dms/component";
2
+ import { type CategoryInfo, type PageExtensionComponent } from "@antelopejs/interface-dms/page";
3
+ export declare const workspaceSettingsCategory: CategoryInfo;
4
+ export declare const GetWorkspaceSettingsCategory: () => Promise<CategoryInfo>;
5
+ export declare const tenantBillingPage: {
6
+ readonly id: "billing";
7
+ readonly fullId: "settings.workspace.billing";
8
+ readonly fullSlug: "/settings/workspace/billing";
9
+ readonly components: {
10
+ readonly freeAccessBanner: "freeAccessBanner";
11
+ readonly pastDueAlert: "pastDueAlert";
12
+ readonly planCard: "planCard";
13
+ readonly paymentMethod: "paymentMethod";
14
+ readonly billingForm: "billingForm";
15
+ readonly refundButton: "refundButton";
16
+ readonly table: "table";
17
+ };
18
+ };
19
+ export type TenantBillingPageComponentKey = (typeof tenantBillingPage.components)[keyof typeof tenantBillingPage.components];
20
+ export interface TenantBillingPageExtensionComponentBase {
21
+ key: string;
22
+ component: Component;
23
+ order?: number;
24
+ }
25
+ export interface TenantBillingPageAnchoredExtensionComponent extends TenantBillingPageExtensionComponentBase {
26
+ side: Extract<PlacementSide, "before" | "after">;
27
+ anchorKey: TenantBillingPageComponentKey;
28
+ }
29
+ export interface TenantBillingPageAppendedExtensionComponent extends TenantBillingPageExtensionComponentBase {
30
+ side?: Extract<PlacementSide, "end">;
31
+ anchorKey?: never;
32
+ }
33
+ export type TenantBillingPageExtensionComponent = TenantBillingPageAnchoredExtensionComponent | TenantBillingPageAppendedExtensionComponent;
34
+ export interface TenantBillingPageExtension {
35
+ name: string;
36
+ components: readonly TenantBillingPageExtensionComponent[];
37
+ }
38
+ export interface TenantBillingPageExtensionRegistration {
39
+ unregister(): void;
40
+ }
41
+ export declare const platformSaasModule: CategoryInfo;
42
+ export declare const GetPlatformSaasModule: () => Promise<CategoryInfo>;
43
+ export declare const platformWorkspaceDetailPage: {
44
+ readonly fullId: "modules.saas.customers.workspaces.detail";
45
+ readonly components: {
46
+ readonly header: "header";
47
+ readonly summary: "summary";
48
+ readonly body: "body";
49
+ };
50
+ };
51
+ export interface PlatformWorkspaceDetailPageExtension {
52
+ name: string;
53
+ components: readonly PageExtensionComponent[];
54
+ }
55
+ export interface PlatformWorkspaceDetailPageExtensionRegistration {
56
+ unregister(): void;
57
+ }
58
+ export declare function RegisterTenantBillingPageExtension(extension: TenantBillingPageExtension): TenantBillingPageExtensionRegistration;
59
+ export declare function RegisterPlatformWorkspaceDetailPageExtension(extension: PlatformWorkspaceDetailPageExtension): PlatformWorkspaceDetailPageExtensionRegistration;
package/dist/pages.js ADDED
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.platformWorkspaceDetailPage = exports.GetPlatformSaasModule = exports.platformSaasModule = exports.tenantBillingPage = exports.GetWorkspaceSettingsCategory = exports.workspaceSettingsCategory = void 0;
4
+ exports.RegisterTenantBillingPageExtension = RegisterTenantBillingPageExtension;
5
+ exports.RegisterPlatformWorkspaceDetailPageExtension = RegisterPlatformWorkspaceDetailPageExtension;
6
+ const interface_core_1 = require("@antelopejs/interface-core");
7
+ const page_1 = require("@antelopejs/interface-dms/page");
8
+ const page_definitions_1 = require("./page-definitions");
9
+ exports.workspaceSettingsCategory = {
10
+ ...page_definitions_1.WORKSPACE_SETTINGS_CATEGORY_DEFINITION,
11
+ category: page_definitions_1.SETTINGS_ROOT_DEFINITION,
12
+ urlTransparent: false,
13
+ hidden: undefined,
14
+ bypassTenantAccessGate: undefined,
15
+ };
16
+ exports.GetWorkspaceSettingsCategory = (0, interface_core_1.InterfaceFunction)();
17
+ exports.tenantBillingPage = {
18
+ id: "billing",
19
+ fullId: "settings.workspace.billing",
20
+ fullSlug: "/settings/workspace/billing",
21
+ components: {
22
+ freeAccessBanner: "freeAccessBanner",
23
+ pastDueAlert: "pastDueAlert",
24
+ planCard: "planCard",
25
+ paymentMethod: "paymentMethod",
26
+ billingForm: "billingForm",
27
+ refundButton: "refundButton",
28
+ table: "table",
29
+ },
30
+ };
31
+ exports.platformSaasModule = {
32
+ id: page_definitions_1.SAAS_MODULE_DEFINITION.registration.id,
33
+ fullId: page_definitions_1.SAAS_MODULE_DEFINITION.fullId,
34
+ fullSlug: page_definitions_1.SAAS_MODULE_DEFINITION.fullSlug,
35
+ category: page_definitions_1.MODULES_ROOT_DEFINITION,
36
+ displayName: page_definitions_1.SAAS_MODULE_DEFINITION.registration.title,
37
+ description: page_definitions_1.SAAS_MODULE_DEFINITION.registration.description,
38
+ icon: page_definitions_1.SAAS_MODULE_DEFINITION.registration.icon,
39
+ urlSlug: page_definitions_1.SAAS_MODULE_DEFINITION.registration.id,
40
+ type: "label",
41
+ isModuleRoot: true,
42
+ urlTransparent: false,
43
+ hidden: undefined,
44
+ bypassTenantAccessGate: undefined,
45
+ };
46
+ exports.GetPlatformSaasModule = (0, interface_core_1.InterfaceFunction)();
47
+ exports.platformWorkspaceDetailPage = {
48
+ fullId: "modules.saas.customers.workspaces.detail",
49
+ components: {
50
+ header: "header",
51
+ summary: "summary",
52
+ body: "body",
53
+ },
54
+ };
55
+ function toPageExtensionComponent(input) {
56
+ const component = {
57
+ key: input.key,
58
+ component: input.component,
59
+ side: input.side ?? "end",
60
+ order: input.order ?? 0,
61
+ };
62
+ if (input.anchorKey)
63
+ component.anchorPath = [input.anchorKey];
64
+ return component;
65
+ }
66
+ function RegisterTenantBillingPageExtension(extension) {
67
+ const info = {
68
+ extensionName: extension.name,
69
+ targetFullId: exports.tenantBillingPage.fullId,
70
+ components: extension.components.map(toPageExtensionComponent),
71
+ };
72
+ page_1.internal.RegisterPageExtension.register(info);
73
+ return {
74
+ unregister: () => page_1.internal.RegisterPageExtension.unregister(info),
75
+ };
76
+ }
77
+ function RegisterPlatformWorkspaceDetailPageExtension(extension) {
78
+ const info = {
79
+ extensionName: extension.name,
80
+ targetFullId: exports.platformWorkspaceDetailPage.fullId,
81
+ components: [...extension.components],
82
+ };
83
+ page_1.internal.RegisterPageExtension.register(info);
84
+ return {
85
+ unregister: () => page_1.internal.RegisterPageExtension.unregister(info),
86
+ };
87
+ }
88
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { FeatureModel, FeatureValueType, Plan, PlanInterval, PlanModel } from "./db";
2
+ export interface TenantPlanFeature {
3
+ featureId: string;
4
+ displayName: string;
5
+ tooltip: string | null;
6
+ unit: string | null;
7
+ valueType: FeatureValueType;
8
+ isDetailRow: boolean;
9
+ order: number;
10
+ }
11
+ export interface TenantPlanView {
12
+ _id: string;
13
+ name: string;
14
+ price: number;
15
+ currency: string;
16
+ interval: PlanInterval;
17
+ order: number;
18
+ checkoutAvailable: boolean;
19
+ featureValues: Record<string, unknown>;
20
+ }
21
+ export interface TenantPlanCatalog {
22
+ plans: TenantPlanView[];
23
+ features: TenantPlanFeature[];
24
+ }
25
+ export declare function monthlyPrice(plan: Plan): number;
26
+ export declare function isDowngrade(current: Plan | null, target: Plan): boolean;
27
+ export declare function buildTenantPlanCatalog(planModel: PlanModel, featureModel: FeatureModel, plans: Plan[]): Promise<TenantPlanCatalog>;
package/dist/plans.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.monthlyPrice = monthlyPrice;
4
+ exports.isDowngrade = isDowngrade;
5
+ exports.buildTenantPlanCatalog = buildTenantPlanCatalog;
6
+ const db_1 = require("./db");
7
+ const MONTHS_PER_INTERVAL = {
8
+ month: 1,
9
+ year: 12,
10
+ };
11
+ function monthlyPrice(plan) {
12
+ return plan.price / MONTHS_PER_INTERVAL[plan.interval];
13
+ }
14
+ function isDowngrade(current, target) {
15
+ if (!current)
16
+ return false;
17
+ return monthlyPrice(target) < monthlyPrice(current);
18
+ }
19
+ function toPlanFeature(feature) {
20
+ return {
21
+ featureId: feature._id,
22
+ displayName: feature.displayName,
23
+ tooltip: feature.tooltip ?? null,
24
+ unit: feature.unit ?? null,
25
+ valueType: feature.valueType,
26
+ isDetailRow: !!feature.isDetailRow,
27
+ order: feature.order ?? db_1.FEATURE_DEFAULT_ORDER,
28
+ };
29
+ }
30
+ async function toPlanView(planModel, plan, knownFeatureIds) {
31
+ const resolved = await planModel.resolveInheritance(plan);
32
+ const featureValues = {};
33
+ for (const entry of resolved.features) {
34
+ if (!knownFeatureIds.has(entry.featureId))
35
+ continue;
36
+ featureValues[entry.featureId] = entry.value;
37
+ }
38
+ return {
39
+ _id: plan._id,
40
+ name: plan.name,
41
+ price: plan.price,
42
+ currency: plan.currency,
43
+ interval: plan.interval,
44
+ order: plan.order,
45
+ checkoutAvailable: !!plan.paymentProviderRefs?.stripePriceId,
46
+ featureValues,
47
+ };
48
+ }
49
+ async function buildTenantPlanCatalog(planModel, featureModel, plans) {
50
+ const features = await featureModel.getAll();
51
+ const knownFeatureIds = new Set(features.map((feature) => feature._id));
52
+ const views = await Promise.all(plans.map((plan) => toPlanView(planModel, plan, knownFeatureIds)));
53
+ return {
54
+ plans: views.sort((left, right) => left.order - right.order),
55
+ features: features
56
+ .map(toPlanFeature)
57
+ .sort((left, right) => left.order - right.order),
58
+ };
59
+ }
60
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":";;AA6CA,oCAEC;AAMD,kCAGC;AA0CD,wDAgBC;AA1GD,6BAA6C;AAE7C,MAAM,mBAAmB,GAAiC;IACxD,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,EAAE;CACT,CAAC;AAgCF,SAAgB,YAAY,CAAC,IAAU;IACrC,OAAO,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAMD,SAAgB,WAAW,CAAC,OAAoB,EAAE,MAAY;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB;IACrC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,0BAAqB;KAC9C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,SAAoB,EACpB,IAAU,EACV,eAA4B;IAE5B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,aAAa,GAA4B,EAAE,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,SAAS;QACpD,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC/C,CAAC;IACD,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,aAAa;QAC5D,aAAa;KACd,CAAC;AACJ,CAAC;AAOM,KAAK,UAAU,sBAAsB,CAC1C,SAAoB,EACpB,YAA0B,EAC1B,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;IAC7C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAClE,CAAC;IACF,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5D,QAAQ,EAAE,QAAQ;aACf,GAAG,CAAC,aAAa,CAAC;aAClB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface TenantBeingProvisionedPayload {
2
+ tenantId: string;
3
+ userId: string;
4
+ extras?: Record<string, unknown>;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=provisioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../src/provisioning.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export interface RegistrationExtrasLimits {
2
+ maxSerialisedBytes: number;
3
+ maxKeys: number;
4
+ maxDepth: number;
5
+ }
6
+ export declare const REGISTRATION_EXTRAS_LIMITS: RegistrationExtrasLimits;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REGISTRATION_EXTRAS_LIMITS = void 0;
4
+ exports.REGISTRATION_EXTRAS_LIMITS = {
5
+ maxSerialisedBytes: 4096,
6
+ maxKeys: 64,
7
+ maxDepth: 4,
8
+ };
9
+ //# sourceMappingURL=registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration.js","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":";;;AAQa,QAAA,0BAA0B,GAA6B;IAClE,kBAAkB,EAAE,IAAI;IACxB,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,CAAC;CACZ,CAAC"}
@@ -0,0 +1,27 @@
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;
@@ -0,0 +1,30 @@
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
@@ -0,0 +1 @@
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"}
package/package.json ADDED
@@ -0,0 +1,108 @@
1
+ {
2
+ "name": "@antelopejs/interface-dms-saas",
3
+ "version": "0.0.1",
4
+ "description": "Public interfaces for the DMS SaaS module",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/AntelopeJS/dms-saas.git"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "package.json",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "main": "dist/index.js",
17
+ "types": "dist/index.d.ts",
18
+ "typesVersions": {
19
+ "*": {
20
+ "dist/*": [
21
+ "dist/*",
22
+ "dist/*/index.d.ts"
23
+ ],
24
+ "*": [
25
+ "dist/*",
26
+ "dist/*/index.d.ts"
27
+ ]
28
+ }
29
+ },
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "./package.json": "./package.json",
36
+ "./db": {
37
+ "types": "./dist/db/index.d.ts",
38
+ "default": "./dist/db/index.js"
39
+ },
40
+ "./db/models": {
41
+ "types": "./dist/db/models/index.d.ts",
42
+ "default": "./dist/db/models/index.js"
43
+ },
44
+ "./db/tables": {
45
+ "types": "./dist/db/tables/index.d.ts",
46
+ "default": "./dist/db/tables/index.js"
47
+ },
48
+ "./dist": {
49
+ "types": "./dist/index.d.ts"
50
+ },
51
+ "./dist/db": {
52
+ "types": "./dist/db/index.d.ts"
53
+ },
54
+ "./dist/db/models": {
55
+ "types": "./dist/db/models/index.d.ts"
56
+ },
57
+ "./dist/db/tables": {
58
+ "types": "./dist/db/tables/index.d.ts"
59
+ },
60
+ "./dist/*": {
61
+ "types": "./dist/*.d.ts"
62
+ },
63
+ "./*": {
64
+ "types": "./dist/*.d.ts",
65
+ "default": "./dist/*.js"
66
+ }
67
+ },
68
+ "publishConfig": {
69
+ "access": "public",
70
+ "provenance": true,
71
+ "registry": "https://registry.npmjs.org/"
72
+ },
73
+ "dependencies": {
74
+ "@antelopejs/interface-data-api": ">=0.1.9 <1.0.0",
75
+ "@antelopejs/interface-dms": ">=0.0.1 <1.0.0"
76
+ },
77
+ "devDependencies": {
78
+ "@antelopejs/interface-core": "^0.0.12",
79
+ "@antelopejs/interface-database": ">=0.1.7 <1.0.0",
80
+ "@antelopejs/interface-database-decorators": ">=0.1.6 <1.0.0",
81
+ "@types/node": "^24.0.0",
82
+ "knip": "^6.34.0",
83
+ "oxfmt": "^0.66.0",
84
+ "oxlint": "1.81.0",
85
+ "oxlint-tsgolint": "^7.0.2001",
86
+ "release-it": "^19.2.4",
87
+ "release-it-changelogen": "^0.1.0",
88
+ "rimraf": "^6.1.3",
89
+ "typescript": "^5.9.3"
90
+ },
91
+ "peerDependencies": {
92
+ "@antelopejs/interface-core": ">=0.0.12 <1.0.0",
93
+ "@antelopejs/interface-database": ">=0.1.7 <1.0.0",
94
+ "@antelopejs/interface-database-decorators": ">=0.1.6 <1.0.0"
95
+ },
96
+ "antelopeJs": {},
97
+ "scripts": {
98
+ "build": "rimraf dist && tsc -p tsconfig.build.json",
99
+ "lint": "oxlint && oxfmt --check .",
100
+ "lint:fix": "oxlint --fix --max-warnings=1000000 && oxfmt .",
101
+ "format": "oxfmt .",
102
+ "typecheck": "tsc -p tsconfig.json",
103
+ "check:package-contract": "node scripts/check-package-contract.mjs",
104
+ "knip": "knip --dependencies",
105
+ "knip:all": "knip",
106
+ "release": "pnpm run lint && pnpm run build && release-it"
107
+ }
108
+ }