@antelopejs/interface-dms 0.7.3 → 0.7.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.7.4
4
+
5
+ [compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.7.3...v0.7.4)
6
+
7
+ ### 🚀 Enhancements
8
+
9
+ - **tenant-lifecycle:** Pause producer admission and evaluate every tenant access gate ([#366](https://github.com/AntelopeJS/dms/pull/366))
10
+
11
+ ### 🩹 Fixes
12
+
13
+ - **deps:** Require the shared preview presentation contract ([#340](https://github.com/AntelopeJS/dms/pull/340))
14
+ - **frontend:** Read the onboarding status and permissions through the data layer ([#357](https://github.com/AntelopeJS/dms/pull/357))
15
+
16
+ ### 🏡 Chore
17
+
18
+ - **release:** @antelopejs/dms v0.9.5 ([a8e395eb](https://github.com/AntelopeJS/dms/commit/a8e395eb))
19
+
20
+ ### ❤️ Contributors
21
+
22
+ - Antony Rizzitelli <rizzitelli.antony@pm.me>
23
+ - Alessandro Aloisio ([@alessaloisio](http://github.com/alessaloisio))
24
+
3
25
  ## v0.7.3
4
26
 
5
27
  [compare changes](https://github.com/AntelopeJS/dms/compare/interface-v0.7.2...v0.7.3)
@@ -3,14 +3,14 @@ import { TenantMember, TenantMemberModel } from "../db";
3
3
  import { DefaultDataTypes } from "../base/data-types/default-types";
4
4
  declare const memberSettingDataAPI_base: import("@antelopejs/interface-core/decorators").Class<import("@antelopejs/interface-data-api").ExtractDefCallbacks<{
5
5
  new: DataControllerCallback;
6
+ edit: DataControllerCallback;
7
+ delete: DataControllerCallback;
6
8
  get: DataControllerCallback;
7
9
  list: DataControllerCallback;
8
10
  select: import("@antelopejs/interface-data-api").DataControllerCallbackWithOptions<any>;
9
11
  count: DataControllerCallback;
10
12
  countBatch: import("@antelopejs/interface-data-api").DataControllerCallbackWithOptions<any>;
11
13
  summary: import("@antelopejs/interface-data-api").DataControllerCallbackWithOptions<any>;
12
- edit: DataControllerCallback;
13
- delete: DataControllerCallback;
14
14
  archive: DataControllerCallback;
15
15
  restore: DataControllerCallback;
16
16
  }> & {
@@ -31,14 +31,21 @@ const SYSTEM_MANAGED_FIELD = {
31
31
  view: types_1.ReadonlyBehaviorType.disabled,
32
32
  new: types_1.ReadonlyBehaviorType.hidden,
33
33
  };
34
- const admittedMemberCreation = {
35
- ...table_view_1.TableViewRoutes.New,
36
- async func(...args) {
37
- const [ctx] = args;
38
- return (0, tenant_lifecycle_1.runTenantLifecycleOperation)((0, request_tenant_1.getRequestTenantId)(ctx), () => table_view_1.TableViewRoutes.New.func.apply(this, args));
39
- },
40
- };
41
- class memberSettingDataAPI extends (0, interface_data_api_1.DataController)(db_1.TenantMember, { ...table_view_1.TableViewRoutes.All, new: admittedMemberCreation }, (0, interface_api_1.Controller)("/api/tables/members")) {
34
+ function admittedMemberRoute(route) {
35
+ return {
36
+ ...route,
37
+ async func(...args) {
38
+ const [ctx] = args;
39
+ return (0, tenant_lifecycle_1.runTenantLifecycleOperation)((0, request_tenant_1.getRequestTenantId)(ctx), () => route.func.apply(this, args));
40
+ },
41
+ };
42
+ }
43
+ class memberSettingDataAPI extends (0, interface_data_api_1.DataController)(db_1.TenantMember, {
44
+ ...table_view_1.TableViewRoutes.All,
45
+ new: admittedMemberRoute(table_view_1.TableViewRoutes.New),
46
+ edit: admittedMemberRoute(table_view_1.TableViewRoutes.Edit),
47
+ delete: admittedMemberRoute(table_view_1.TableViewRoutes.Delete),
48
+ }, (0, interface_api_1.Controller)("/api/tables/members")) {
42
49
  }
43
50
  exports.memberSettingDataAPI = memberSettingDataAPI;
44
51
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/data-controllers/members.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/data-controllers/members.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,10 @@ export declare class TenantLifecycleModel extends TenantLifecycleModel_base {
29
29
  private transition;
30
30
  /** Only a confirmed admission permits effects; unknown outcomes fail closed. */
31
31
  admit(tenantId: string, attemptId: string): Promise<void>;
32
+ /** One CAS only: a delayed caller must not acquire against a newer revision. */
33
+ pause(tenantId: string, barrierId: string, expectedRevision: string): Promise<boolean>;
34
+ /** Also revokes an in-flight acquisition when no barrier has landed yet. */
35
+ resume(tenantId: string, barrierId: string): Promise<boolean>;
32
36
  /** Called only by the invocation that has finished every awaited producer effect. */
33
37
  finish(tenantId: string, attemptId: string): Promise<void>;
34
38
  /** Closes permanently before testing quiescence; active or uncertain work blocks deletion. */
@@ -54,12 +54,35 @@ class TenantLifecycleModel extends (0, interface_database_decorators_1.BasicData
54
54
  const state = await this.state(tenantId);
55
55
  if (state.closed)
56
56
  throw new Error("Tenant lifecycle admission is closed");
57
+ if (state.barrierId)
58
+ throw new Error("Tenant lifecycle admission is paused");
57
59
  if (await this.transition(state, {
58
60
  activeAttemptIds: [...state.activeAttemptIds, attemptId],
59
61
  }))
60
62
  return;
61
63
  }
62
64
  }
65
+ /** One CAS only: a delayed caller must not acquire against a newer revision. */
66
+ async pause(tenantId, barrierId, expectedRevision) {
67
+ if (!barrierId)
68
+ throw new Error("Tenant lifecycle barrier requires an identity");
69
+ const state = await this.state(tenantId);
70
+ if (state.closed || state.barrierId || state.revision !== expectedRevision)
71
+ return false;
72
+ return this.transition(state, { barrierId });
73
+ }
74
+ /** Also revokes an in-flight acquisition when no barrier has landed yet. */
75
+ async resume(tenantId, barrierId) {
76
+ if (!barrierId)
77
+ throw new Error("Tenant lifecycle barrier requires an identity");
78
+ while (true) {
79
+ const state = await this.state(tenantId);
80
+ if (state.closed || (state.barrierId && state.barrierId !== barrierId))
81
+ return false;
82
+ if (await this.transition(state, { barrierId: null }))
83
+ return true;
84
+ }
85
+ }
63
86
  /** Called only by the invocation that has finished every awaited producer effect. */
64
87
  async finish(tenantId, attemptId) {
65
88
  while (true) {
@@ -1 +1 @@
1
- {"version":3,"file":"tenantLifecycle.model.js","sourceRoot":"","sources":["../../../src/db/internal/tenantLifecycle.model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenantLifecycle.model.js","sourceRoot":"","sources":["../../../src/db/internal/tenantLifecycle.model.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,5 @@ export declare class TenantLifecycle extends Table {
11
11
  revision: string;
12
12
  closed: boolean;
13
13
  activeAttemptIds: string[];
14
+ barrierId?: string | null;
14
15
  }
@@ -38,6 +38,10 @@ __decorate([
38
38
  (0, interface_database_decorators_1.Field)(["string"]),
39
39
  __metadata("design:type", Array)
40
40
  ], TenantLifecycle.prototype, "activeAttemptIds", void 0);
41
+ __decorate([
42
+ (0, interface_database_decorators_1.Field)("string"),
43
+ __metadata("design:type", Object)
44
+ ], TenantLifecycle.prototype, "barrierId", void 0);
41
45
  exports.TenantLifecycle = TenantLifecycle = __decorate([
42
46
  (0, interface_database_decorators_1.RegisterTable)(exports.tenantLifecycleTableName, constants_1.TENANT_SCHEMA_NAME)
43
47
  ], TenantLifecycle);
@@ -1 +1 @@
1
- {"version":3,"file":"tenantLifecycle.table.js","sourceRoot":"","sources":["../../../src/db/internal/tenantLifecycle.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAImD;AACnD,+CAAqD;AAErD,gBAAgB;AACH,QAAA,wBAAwB,GAAG,kBAAkB,CAAC;AAE3D;;;;GAIG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAK;CAKzC,CAAA;AALY,0CAAe;AACD;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CAAqB;AACZ;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDAA0B;AAChB;IAAzB,IAAA,qCAAK,EAAC,SAAS,CAAC;;+CAAyB;AACf;IAA1B,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;;yDAAoC;0BAJ3C,eAAe;IAD3B,IAAA,6CAAa,EAAC,gCAAwB,EAAE,8BAAkB,CAAC;GAC/C,eAAe,CAK3B"}
1
+ {"version":3,"file":"tenantLifecycle.table.js","sourceRoot":"","sources":["../../../src/db/internal/tenantLifecycle.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAImD;AACnD,+CAAqD;AAErD,gBAAgB;AACH,QAAA,wBAAwB,GAAG,kBAAkB,CAAC;AAE3D;;;;GAIG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAK;CAMzC,CAAA;AANY,0CAAe;AACD;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CAAqB;AACZ;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDAA0B;AAChB;IAAzB,IAAA,qCAAK,EAAC,SAAS,CAAC;;+CAAyB;AACf;IAA1B,IAAA,qCAAK,EAAC,CAAC,QAAQ,CAAC,CAAC;;yDAAoC;AAC7B;IAAxB,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDAAmC;0BALxC,eAAe;IAD3B,IAAA,6CAAa,EAAC,gCAAwB,EAAE,8BAAkB,CAAC;GAC/C,eAAe,CAM3B"}
package/dist/hooks.d.ts CHANGED
@@ -41,6 +41,8 @@ export declare enum Hook {
41
41
  INVITE_CREATED = "invite:created",
42
42
  INVITE_DELETED = "invite:deleted",
43
43
  MEMBER_BEING_ADDED = "member:being-added",
44
+ /** Policy veto under lifecycle admission, before a membership write. */
45
+ MEMBER_BEING_CHANGED = "member:being-changed",
44
46
  MEMBER_ADDED = "member:added",
45
47
  MEMBER_REMOVED = "member:removed",
46
48
  USER_REGISTERED = "user:registered",
@@ -107,6 +109,11 @@ export interface InviteDeletedHookPayload {
107
109
  /** Payloads the invitation carried, for handlers that must undo their work. */
108
110
  extensions?: InviteExtensionPayloads | null;
109
111
  }
112
+ /** Seat classification belongs to the consumer, including support exemptions. */
113
+ export interface MemberChangeHookPayload extends MemberHookPayload {
114
+ /** Null for a new membership; deliveryId does not exempt it from policy. */
115
+ previousIsTenantOwner: boolean | null;
116
+ }
110
117
  export interface MemberHookPayload {
111
118
  tenantId: string;
112
119
  userId: string;
@@ -171,6 +178,10 @@ export interface HookSignatures {
171
178
  args: [payload: MemberHookPayload];
172
179
  result: undefined;
173
180
  };
181
+ [Hook.MEMBER_BEING_CHANGED]: {
182
+ args: [payload: MemberChangeHookPayload];
183
+ result: undefined;
184
+ };
174
185
  [Hook.MEMBER_ADDED]: {
175
186
  args: [payload: MemberHookPayload];
176
187
  result: undefined;
package/dist/hooks.js CHANGED
@@ -67,6 +67,8 @@ var Hook;
67
67
  Hook["INVITE_CREATED"] = "invite:created";
68
68
  Hook["INVITE_DELETED"] = "invite:deleted";
69
69
  Hook["MEMBER_BEING_ADDED"] = "member:being-added";
70
+ /** Policy veto under lifecycle admission, before a membership write. */
71
+ Hook["MEMBER_BEING_CHANGED"] = "member:being-changed";
70
72
  Hook["MEMBER_ADDED"] = "member:added";
71
73
  Hook["MEMBER_REMOVED"] = "member:removed";
72
74
  Hook["USER_REGISTERED"] = "user:registered";
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ async function beginMembership(resolution) {
18
18
  await model.advanceMembership(resolution, "applied");
19
19
  return;
20
20
  }
21
+ await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_BEING_CHANGED, {
22
+ tenantId,
23
+ userId,
24
+ isTenantOwner: invite.asTenantOwner,
25
+ previousIsTenantOwner: null,
26
+ deliveryId: resolution._id,
27
+ });
21
28
  await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_BEING_ADDED, {
22
29
  tenantId,
23
30
  userId,
@@ -1 +1 @@
1
- {"version":3,"file":"invite-membership.js","sourceRoot":"","sources":["../../src/internal/invite-membership.ts"],"names":[],"mappings":";;AA+EA,wDAwBC;AAvGD,6FAAqE;AACrE,oFAAgF;AAEhF,+DAA0D;AAC1D,0EAAqE;AAErE,oCAA8C;AAC9C,yDAAkE;AAClE,0DAA2E;AAE3E,KAAK,UAAU,eAAe,CAAC,UAA4B;IACzD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,uCAAiB,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,kBAAkB,EAAE;QAC1C,QAAQ;QACR,MAAM;QACN,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAAE,OAAO;IACrE,MAAM,IAAA,+CAA4B,EAAC,IAAA,wCAAQ,EAAC,uBAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;QACxE,OAAO,EAAE,MAAM,CAAC,SAAS;QACzB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7D,MAAM,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,UAA4B;IAE5B,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAC3B,uCAAiB,EACjB,UAAU,CAAC,QAAQ,CACpB,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,MAAM,EAAE,gBAAgB,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IACD,MAAM,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAC3E,UAAU,EACV,SAAS,CACV,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,UAA4B,EAC5B,MAAoB;IAEpB,IAAI,MAAM,CAAC,gBAAgB,KAAK,UAAU,CAAC,GAAG;QAAE,OAAO;IACvD,MAAM,IAAA,uDAAoC,EACxC,IAAA,wCAAQ,EAAC,uBAAS,CAAC,EACnB,MAAM,CAAC,MAAM,EACb,UAAU,CAAC,QAAQ,EACnB,MAAM,CAAC,aAAa,CACrB,CAAC;IACF,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,YAAY,EAAE;QACpC,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,UAAU,CAAC,GAAG;KAC3B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,sBAAsB,CAC1C,UAA4B;IAE5B,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,gDAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,UAAU,CAAC;IACzB,OAAO,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CACzE,OAAO,CAAC,eAAe,CACxB,CAAC;QACF,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC1D,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAQ,EAAC,uCAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAC1E,OAAO,CAAC,MAAM,CACf,CAAC;IACF,IAAI,CAAC,MAAM;QACT,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"invite-membership.js","sourceRoot":"","sources":["../../src/internal/invite-membership.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,15 @@ async function applyAdmittedTenantOwnership(userModel, userId, tenantId, patch)
50
50
  const memberModel = (0, interface_database_decorators_1.GetModel)(tenantMembers_model_1.TenantMemberModel, tenantId);
51
51
  const existing = await memberModel.getByUser(userId);
52
52
  const isNewMember = !existing;
53
+ // Invite delivery checks policy before its durable applying phase, not here.
54
+ if (!patch.deliveryId) {
55
+ await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_BEING_CHANGED, {
56
+ tenantId,
57
+ userId,
58
+ isTenantOwner: patch.isTenantOwner,
59
+ previousIsTenantOwner: existing ? existing.isTenantOwner === true : null,
60
+ });
61
+ }
53
62
  if (isNewMember && !patch.deliveryId) {
54
63
  const payload = {
55
64
  tenantId,
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../../src/internal/tenant-ownership.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../../src/internal/tenant-ownership.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,21 @@ export declare function RegisterTenantAccessGate(info: TenantAccessGateInfo): vo
50
50
  * undefined for unauthenticated requests.
51
51
  */
52
52
  export declare const CheckTenantAccess: (userId: string | undefined, tenantId: string) => Promise<TenantAccessResult>;
53
+ /** One denying gate, identified independently of its user-facing error code. */
54
+ export interface TenantAccessDenial {
55
+ gateId: string;
56
+ code: string;
57
+ }
58
+ /**
59
+ * Server-side evaluation of every registered gate, in gate order. Returns all
60
+ * denials (empty when allowed); any exception rejects the whole evaluation.
61
+ * Unlike CheckTenantAccess, an early denial does not hide later blockers.
62
+ * This is an observation, not an authorization receipt or an atomic snapshot
63
+ * of external state. Callers must preserve other holds and revalidate their
64
+ * operation's authorization before effects. Never infer ownership from code.
65
+ * Does not change the first-denial response of user-facing access checks.
66
+ */
67
+ export declare const EvaluateTenantAccess: (userId: string | undefined, tenantId: string) => Promise<TenantAccessDenial[]>;
53
68
  /**
54
69
  * Assert that the tenant is accessible; throws a 403 whose body is the
55
70
  * denying gate's `code` (a machine-readable i18n key) otherwise.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CheckTenantAccess = exports.internal = void 0;
3
+ exports.EvaluateTenantAccess = exports.CheckTenantAccess = exports.internal = void 0;
4
4
  exports.RegisterTenantAccessGate = RegisterTenantAccessGate;
5
5
  exports.AssertTenantAccess = AssertTenantAccess;
6
6
  const interface_api_1 = require("@antelopejs/interface-api");
@@ -48,6 +48,16 @@ function RegisterTenantAccessGate(info) {
48
48
  * undefined for unauthenticated requests.
49
49
  */
50
50
  exports.CheckTenantAccess = (0, interface_core_1.InterfaceFunction)();
51
+ /**
52
+ * Server-side evaluation of every registered gate, in gate order. Returns all
53
+ * denials (empty when allowed); any exception rejects the whole evaluation.
54
+ * Unlike CheckTenantAccess, an early denial does not hide later blockers.
55
+ * This is an observation, not an authorization receipt or an atomic snapshot
56
+ * of external state. Callers must preserve other holds and revalidate their
57
+ * operation's authorization before effects. Never infer ownership from code.
58
+ * Does not change the first-denial response of user-facing access checks.
59
+ */
60
+ exports.EvaluateTenantAccess = (0, interface_core_1.InterfaceFunction)();
51
61
  /**
52
62
  * Assert that the tenant is accessible; throws a 403 whose body is the
53
63
  * denying gate's `code` (a machine-readable i18n key) otherwise.
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-access.js","sourceRoot":"","sources":["../src/tenant-access.ts"],"names":[],"mappings":";;;AA0DA,4DAEC;AAmBD,gDAQC;AAvFD,6DAAuD;AACvD,+DAGoC;AAEpC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAiBlC;;GAEG;AACH,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,iCAAwB,GAAG,IAAI,iCAAgB,EAEzD,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,wBAAwB,CAAC,IAA0B;IACjE,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACU,QAAA,iBAAiB,GAC5B,IAAA,kCAAiB,GAKd,CAAC;AAEN;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAA0B,EAC1B,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,0BAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tenant-access.js","sourceRoot":"","sources":["../src/tenant-access.ts"],"names":[],"mappings":";;;AA0DA,4DAEC;AA0CD,gDAQC;AA9GD,6DAAuD;AACvD,+DAGoC;AAEpC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAiBlC;;GAEG;AACH,IAAiB,QAAQ,CAIxB;AAJD,WAAiB,QAAQ;IACV,iCAAwB,GAAG,IAAI,iCAAgB,EAEzD,CAAC;AACN,CAAC,EAJgB,QAAQ,wBAAR,QAAQ,QAIxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,wBAAwB,CAAC,IAA0B;IACjE,QAAQ,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACU,QAAA,iBAAiB,GAC5B,IAAA,kCAAiB,GAKd,CAAC;AAQN;;;;;;;;GAQG;AACU,QAAA,oBAAoB,GAC/B,IAAA,kCAAiB,GAKd,CAAC;AAEN;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAA0B,EAC1B,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,0BAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -13,3 +13,30 @@ export declare function runTenantLifecycleOperation<T>(tenantId: string, work: (
13
13
  * rejection requires preserving data, never timeout-based takeover or reopening.
14
14
  */
15
15
  export declare function closeTenantLifecycleAdmission(tenantId: string): Promise<void>;
16
+ /** A non-destructive snapshot; no attempt expires or is retired by observation. */
17
+ export interface TenantLifecycleObservation {
18
+ revision: string;
19
+ barrierId: string | null;
20
+ activeAttemptIds: string[];
21
+ closed: boolean;
22
+ }
23
+ /** Observe outside a producer callback: an initiator must not drain itself. */
24
+ export declare function observeTenantLifecycle(tenantId: string): Promise<TenantLifecycleObservation>;
25
+ /**
26
+ * Publish a temporary barrier on the same CAS revision as producer admission.
27
+ * Use a unique identity per phase, never reuse it. Observe the revision BEFORE
28
+ * checking the durable business intent, then attempt this single CAS. After
29
+ * acquisition recheck that intent; release if abandoned. False requires a new
30
+ * observation and intent check, not a blind retry. Unknown outcomes throw.
31
+ * Existing attempts keep running; only an empty observation while this barrier
32
+ * remains owned permits inventory validation. No Stripe calls under a barrier.
33
+ */
34
+ export declare function pauseTenantLifecycleAdmission(tenantId: string, barrierId: string, expectedRevision: string): Promise<boolean>;
35
+ /**
36
+ * Release this owner's barrier, or invalidate the revision when none is held.
37
+ * The latter revokes a delayed acquisition after its business intent is aborted.
38
+ * Never reopens permanent deletion closure or another owner's barrier (false).
39
+ * Retains every active/uncertain attempt; timeout is not evidence of completion.
40
+ * Publish pending policy before release so newly admitted producers read it.
41
+ */
42
+ export declare function resumeTenantLifecycleAdmission(tenantId: string, barrierId: string): Promise<boolean>;
@@ -2,6 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runTenantLifecycleOperation = runTenantLifecycleOperation;
4
4
  exports.closeTenantLifecycleAdmission = closeTenantLifecycleAdmission;
5
+ exports.observeTenantLifecycle = observeTenantLifecycle;
6
+ exports.pauseTenantLifecycleAdmission = pauseTenantLifecycleAdmission;
7
+ exports.resumeTenantLifecycleAdmission = resumeTenantLifecycleAdmission;
5
8
  const node_crypto_1 = require("node:crypto");
6
9
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
7
10
  const tenantLifecycle_model_1 = require("./db/internal/tenantLifecycle.model");
@@ -55,4 +58,36 @@ async function runTenantLifecycleOperation(tenantId, work) {
55
58
  async function closeTenantLifecycleAdmission(tenantId) {
56
59
  await (0, interface_database_decorators_1.GetModel)(tenantLifecycle_model_1.TenantLifecycleModel, tenantId).close(tenantId);
57
60
  }
61
+ /** Observe outside a producer callback: an initiator must not drain itself. */
62
+ async function observeTenantLifecycle(tenantId) {
63
+ const state = await (0, interface_database_decorators_1.GetModel)(tenantLifecycle_model_1.TenantLifecycleModel, tenantId).state(tenantId);
64
+ return {
65
+ revision: state.revision,
66
+ barrierId: state.barrierId ?? null,
67
+ activeAttemptIds: [...state.activeAttemptIds],
68
+ closed: state.closed,
69
+ };
70
+ }
71
+ /**
72
+ * Publish a temporary barrier on the same CAS revision as producer admission.
73
+ * Use a unique identity per phase, never reuse it. Observe the revision BEFORE
74
+ * checking the durable business intent, then attempt this single CAS. After
75
+ * acquisition recheck that intent; release if abandoned. False requires a new
76
+ * observation and intent check, not a blind retry. Unknown outcomes throw.
77
+ * Existing attempts keep running; only an empty observation while this barrier
78
+ * remains owned permits inventory validation. No Stripe calls under a barrier.
79
+ */
80
+ async function pauseTenantLifecycleAdmission(tenantId, barrierId, expectedRevision) {
81
+ return (0, interface_database_decorators_1.GetModel)(tenantLifecycle_model_1.TenantLifecycleModel, tenantId).pause(tenantId, barrierId, expectedRevision);
82
+ }
83
+ /**
84
+ * Release this owner's barrier, or invalidate the revision when none is held.
85
+ * The latter revokes a delayed acquisition after its business intent is aborted.
86
+ * Never reopens permanent deletion closure or another owner's barrier (false).
87
+ * Retains every active/uncertain attempt; timeout is not evidence of completion.
88
+ * Publish pending policy before release so newly admitted producers read it.
89
+ */
90
+ async function resumeTenantLifecycleAdmission(tenantId, barrierId) {
91
+ return (0, interface_database_decorators_1.GetModel)(tenantLifecycle_model_1.TenantLifecycleModel, tenantId).resume(tenantId, barrierId);
92
+ }
58
93
  //# sourceMappingURL=tenant-lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-lifecycle.js","sourceRoot":"","sources":["../src/tenant-lifecycle.ts"],"names":[],"mappings":";;AAkCA,kEAoBC;AAMD,sEAIC;AAhED,6CAAyC;AACzC,6FAAqE;AACrE,+EAA2E;AAE3E,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAOlC;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,SAAS,GAAI,KAAuC,EAAE,SAAS,CAAC;IACtE,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,MAAM,IAAI,qBAAqB,IAAI,MAAM,GAAG,qBAAqB,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,2BAA2B,CAC/C,QAAgB,EAChB,IAAsB;IAEtB,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACvC,IAAI,MAAS,CAAC;IACd,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,wEAAwE;YACxE,mDAAmD;YACnD,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,6BAA6B,CACjD,QAAgB;IAEhB,MAAM,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"tenant-lifecycle.js","sourceRoot":"","sources":["../src/tenant-lifecycle.ts"],"names":[],"mappings":";;AAkCA,kEAoBC;AAMD,sEAIC;AAWD,wDAUC;AAWD,sEAUC;AASD,wEAKC;AAxHD,6CAAyC;AACzC,6FAAqE;AACrE,+EAA2E;AAE3E,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAOlC;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,SAAS,GAAI,KAAuC,EAAE,SAAS,CAAC;IACtE,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,MAAM,IAAI,qBAAqB,IAAI,MAAM,GAAG,qBAAqB,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,2BAA2B,CAC/C,QAAgB,EAChB,IAAsB;IAEtB,MAAM,KAAK,GAAG,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACvC,IAAI,MAAS,CAAC;IACd,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,wEAAwE;YACxE,mDAAmD;YACnD,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,6BAA6B,CACjD,QAAgB;IAEhB,MAAM,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC;AAUD,+EAA+E;AACxE,KAAK,UAAU,sBAAsB,CAC1C,QAAgB;IAEhB,MAAM,KAAK,GAAG,MAAM,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7E,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,gBAAgB,EAAE,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAC7C,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,6BAA6B,CACjD,QAAgB,EAChB,SAAiB,EACjB,gBAAwB;IAExB,OAAO,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC,KAAK,CACnD,QAAQ,EACR,SAAS,EACT,gBAAgB,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,8BAA8B,CAClD,QAAgB,EAChB,SAAiB;IAEjB,OAAO,IAAA,wCAAQ,EAAC,4CAAoB,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC9E,CAAC"}
@@ -3,11 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.applyTenantOwnership = applyTenantOwnership;
4
4
  exports.syncPlatformOwnerOnTenantOwnerChange = syncPlatformOwnerOnTenantOwnerChange;
5
5
  exports.clearPlatformOwnerOnMemberRemoval = clearPlatformOwnerOnMemberRemoval;
6
+ const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
7
+ const tenantMembers_model_1 = require("./db/models/tenantMembers.model");
8
+ const hooks_1 = require("./hooks");
6
9
  const tenant_lifecycle_1 = require("./tenant-lifecycle");
7
10
  const tenant_ownership_1 = require("./internal/tenant-ownership");
8
11
  /** Admits membership writes before a tenant can begin destructive deletion. */
9
12
  async function applyTenantOwnership(userModel, userId, tenantId, patch) {
10
- await (0, tenant_lifecycle_1.runTenantLifecycleOperation)(tenantId, () => (0, tenant_ownership_1.applyAdmittedTenantOwnership)(userModel, userId, tenantId, patch));
13
+ await (0, tenant_lifecycle_1.runTenantLifecycleOperation)(tenantId, async () => {
14
+ // Public callers supplying a delivery identity still need the policy veto.
15
+ // Internal resolution checks it before persisting its applying phase.
16
+ if (patch.deliveryId &&
17
+ !(await (0, interface_database_decorators_1.GetModel)(tenantMembers_model_1.TenantMemberModel, tenantId).getByUser(userId))) {
18
+ await (0, hooks_1.ExecuteHooks)(hooks_1.Hook.MEMBER_BEING_CHANGED, {
19
+ tenantId,
20
+ userId,
21
+ isTenantOwner: patch.isTenantOwner,
22
+ previousIsTenantOwner: null,
23
+ deliveryId: patch.deliveryId,
24
+ });
25
+ }
26
+ await (0, tenant_ownership_1.applyAdmittedTenantOwnership)(userModel, userId, tenantId, patch);
27
+ });
11
28
  }
12
29
  async function syncPlatformOwnerOnTenantOwnerChange(userModel, userId, tenantId, nextIsTenantOwner) {
13
30
  await (0, tenant_ownership_1.mirrorPlatformOwner)(userModel, userId, tenantId, nextIsTenantOwner);
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../src/tenant-ownership.ts"],"names":[],"mappings":";;AAgBA,oDASC;AAED,oFAOC;AAED,8EAQC;AA3CD,yDAAiE;AACjE,kEAGqC;AAUrC,+EAA+E;AACxE,KAAK,UAAU,oBAAoB,CACxC,SAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,KAA4B;IAE5B,MAAM,IAAA,8CAA2B,EAAC,QAAQ,EAAE,GAAG,EAAE,CAC/C,IAAA,+CAA4B,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CACjE,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,oCAAoC,CACxD,SAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,iBAA0B;IAE1B,MAAM,IAAA,sCAAmB,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC5E,CAAC;AAEM,KAAK,UAAU,iCAAiC,CACrD,SAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,2BAAoC;IAEpC,IAAI,CAAC,2BAA2B;QAAE,OAAO;IACzC,MAAM,IAAA,sCAAmB,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"tenant-ownership.js","sourceRoot":"","sources":["../src/tenant-ownership.ts"],"names":[],"mappings":";;AAmBA,oDAuBC;AAED,oFAOC;AAED,8EAQC;AA5DD,6FAAqE;AACrE,yEAAoE;AACpE,mCAA6C;AAC7C,yDAAiE;AACjE,kEAGqC;AAUrC,+EAA+E;AACxE,KAAK,UAAU,oBAAoB,CACxC,SAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,KAA4B;IAE5B,MAAM,IAAA,8CAA2B,EAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACrD,2EAA2E;QAC3E,sEAAsE;QACtE,IACE,KAAK,CAAC,UAAU;YAChB,CAAC,CAAC,MAAM,IAAA,wCAAQ,EAAC,uCAAiB,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAChE,CAAC;YACD,MAAM,IAAA,oBAAY,EAAC,YAAI,CAAC,oBAAoB,EAAE;gBAC5C,QAAQ;gBACR,MAAM;gBACN,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,qBAAqB,EAAE,IAAI;gBAC3B,UAAU,EAAE,KAAK,CAAC,UAAU;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAA,+CAA4B,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,oCAAoC,CACxD,SAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,iBAA0B;IAE1B,MAAM,IAAA,sCAAmB,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC5E,CAAC;AAEM,KAAK,UAAU,iCAAiC,CACrD,SAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,2BAAoC;IAEpC,IAAI,CAAC,2BAA2B;QAAE,OAAO;IACzC,MAAM,IAAA,sCAAmB,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -234,6 +234,7 @@ Two functions evaluate the gates:
234
234
  | -------- | -------- |
235
235
  | `CheckTenantAccess(userId, tenantId)` | Resolves to the first denial, or `{ allowed: true }`. |
236
236
  | `AssertTenantAccess(userId, tenantId)` | Calls `CheckTenantAccess` and throws a `403` whose body is the denying gate's `code`. |
237
+ | `EvaluateTenantAccess(userId, tenantId)` | Server-side only. Resolves to every denial as `{ gateId, code }[]`, in gate order, `[]` when none; a gate that throws rejects the whole evaluation. |
237
238
 
238
239
  ```typescript
239
240
  import {
@@ -251,6 +252,8 @@ await AssertTenantAccess(user._id, tenantId); // or let it throw
251
252
 
252
253
  `AuthTenantOwner` and `AuthTenantMember` call `AssertTenantAccess` unless the route opts out with `bypassTenantAccessGate` ([Permissions](/docs/interfaces/core/permissions)).
253
254
 
255
+ `EvaluateTenantAccess` exists for modules that must know whether a denial other than their own is in place, for example before lifting a hold: identify gates by `gateId`, never by `code`, which two gates may share. Its result is an observation, not an authorization receipt or an atomic snapshot of external state; revalidate before acting on it.
256
+
254
257
  Use a gate to deny a tenant outright; use a permissions resolver to shape what its users may do.
255
258
 
256
259
  ## Memberships and Ownership
@@ -276,7 +279,7 @@ await applyTenantOwnership(GetModel(UserModel), userId, tenantId, {
276
279
  | `isTenantOwner` | `boolean` | Ownership flag after the write. |
277
280
  | `invitedBy` | `string \| null` | Recorded on insert. Ignored when the membership row already exists. |
278
281
 
279
- When the user is not yet a member, `applyTenantOwnership` fires `Hook.MEMBER_BEING_ADDED` before the write and `Hook.MEMBER_ADDED` after it. For an existing member it updates `roleIds` and `isTenantOwner` and fires neither ([Hooks](/docs/interfaces/core/hooks)).
282
+ `applyTenantOwnership` fires `Hook.MEMBER_BEING_CHANGED` before any write, so a module can veto it. When the user is not yet a member, it also fires `Hook.MEMBER_BEING_ADDED` before the write and `Hook.MEMBER_ADDED` after it. For an existing member it updates `roleIds` and `isTenantOwner` and fires neither of those two ([Hooks](/docs/interfaces/core/hooks)).
280
283
 
281
284
  Two helpers keep the legacy platform-owner flag on the user row aligned with tenant ownership:
282
285
 
@@ -316,6 +319,18 @@ Membership and invite producers coordinate with tenant deletion through `@antelo
316
319
 
317
320
  A successful callback releases its admission. A deliberate HTTP 4xx refusal also attempts release and rethrows the original refusal; other failures retain admission because their effects may be indeterminate. Retrying is a new invocation and never retires the failed one's identity. There is no automatic expiry or reconciliation API.
318
321
 
322
+ ### Pausing Admission
323
+
324
+ A module that must validate a tenant's inventory with no membership writer in flight, such as a plan downgrade, pauses admission instead of closing it:
325
+
326
+ | Function | Behavior |
327
+ | -------- | -------- |
328
+ | `observeTenantLifecycle(tenantId)` | Resolves to `{ revision, barrierId, activeAttemptIds, closed }`. Never retires an attempt. |
329
+ | `pauseTenantLifecycleAdmission(tenantId, barrierId, expectedRevision)` | Publishes the barrier with one compare-and-set on `expectedRevision`. Resolves `false` when the revision moved, a barrier is held or admission is closed. |
330
+ | `resumeTenantLifecycleAdmission(tenantId, barrierId)` | Releases this barrier; with no barrier held, it invalidates the revision so a delayed `pause` fails. Resolves `false` for another owner's barrier or closed admission. |
331
+
332
+ While a barrier is held, `runTenantLifecycleOperation` rejects new work without running it; admitted work keeps running. Observe the revision before checking your own business intent, pause with that revision, recheck the intent, then wait for an observation with no active attempt before validating. A `false` from `pause` needs a new observation, not a blind retry. Use a unique `barrierId` per phase, and do not observe or pause from inside a `runTenantLifecycleOperation` callback: the caller would wait for itself.
333
+
319
334
  ### `closeTenantLifecycleAdmission`
320
335
 
321
336
  `closeTenantLifecycleAdmission(tenantId: string): Promise<void>` permanently closes admission, then checks that no admitted operation remains. It rejects if work is active or indeterminate, or if the database cannot confirm the transition. Rejection can leave admission closed: it never authorizes deletion or reopening.
@@ -76,6 +76,7 @@ UnregisterHook(Hook.MEMBER_ADDED, onMemberAdded);
76
76
  | `Hook.INVITE_CREATED` | `"invite:created"` | `InviteCreatedHookPayload` | `undefined` |
77
77
  | `Hook.INVITE_DELETED` | `"invite:deleted"` | `InviteDeletedHookPayload` | `undefined` |
78
78
  | `Hook.MEMBER_BEING_ADDED` | `"member:being-added"` | `MemberHookPayload` | `undefined` |
79
+ | `Hook.MEMBER_BEING_CHANGED` | `"member:being-changed"` | `MemberChangeHookPayload` | `undefined` — fires under tenant lifecycle admission before a membership is created or its ownership changes; throwing vetoes the write |
79
80
  | `Hook.MEMBER_ADDED` | `"member:added"` | `MemberHookPayload` | `undefined` |
80
81
  | `Hook.MEMBER_REMOVED` | `"member:removed"` | `MemberRemovedHookPayload` | `undefined` |
81
82
  | `Hook.USER_REGISTERED` | `"user:registered"` | `UserRegisteredHookPayload` | `undefined` |
@@ -140,6 +141,8 @@ interface UserDeletedHookPayload {
140
141
 
141
142
  The shapes are not uniform, and the difference between the addition and removal payloads is deliberate: `MEMBER_BEING_ADDED` and `MEMBER_ADDED` describe one member with `userId`, while `MEMBER_REMOVED` carries `userIds`, because a removal can cover several members at once. Let the handler's inferred parameter type guide you.
142
143
 
144
+ `MemberChangeHookPayload` extends `MemberHookPayload` with `previousIsTenantOwner`, `null` for a new membership. An invitation acceptance carries its `deliveryId` and is vetoed before the acceptance is persisted, including on replay: a `deliveryId` is not a policy exemption.
145
+
143
146
  `UserDeletedHookPayload.tenantIds` lists the workspaces the user was a member of, all left before the deletion; delete the per-user rows your module keeps in them. `reason` is `"self"` today, the user deleting their own account.
144
147
 
145
148
  `InviteCreatedHookPayload` carries the invite `token`. It is a signup credential: keep it inside the handler rather than forwarding it to a wider surface.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antelopejs/interface-dms",
3
- "version": "0.7.3",
3
+ "version": "0.7.4",
4
4
  "description": "Public AntelopeJS interfaces of the DMS: pages, components, permissions, tenancy, auth, notifications and HTML rendering.",
5
5
  "keywords": [
6
6
  "antelopejs",