@openhi/constructs 0.0.159 → 0.0.161

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 (129) hide show
  1. package/lib/{chunk-HQ67J7BP.mjs → chunk-5S6VFBLT.mjs} +12 -70
  2. package/lib/chunk-5S6VFBLT.mjs.map +1 -0
  3. package/lib/{chunk-MVQWAIMC.mjs → chunk-6BB4CRSS.mjs} +3 -312
  4. package/lib/chunk-6BB4CRSS.mjs.map +1 -0
  5. package/lib/{chunk-WPCBVDFZ.mjs → chunk-76UM2LQ5.mjs} +2 -2
  6. package/lib/chunk-7TRO2STL.mjs +4616 -0
  7. package/lib/chunk-7TRO2STL.mjs.map +1 -0
  8. package/lib/chunk-BUAYVN3C.mjs +87 -0
  9. package/lib/chunk-BUAYVN3C.mjs.map +1 -0
  10. package/lib/{chunk-23PUSHBV.mjs → chunk-D2Y6DDOC.mjs} +2 -2
  11. package/lib/chunk-DWSWCUZR.mjs +123 -0
  12. package/lib/chunk-DWSWCUZR.mjs.map +1 -0
  13. package/lib/{chunk-VZCPGQXA.mjs → chunk-EUIP2U5F.mjs} +69 -1
  14. package/lib/{chunk-VZCPGQXA.mjs.map → chunk-EUIP2U5F.mjs.map} +1 -1
  15. package/lib/chunk-GJTPXJKD.mjs +46 -0
  16. package/lib/chunk-GJTPXJKD.mjs.map +1 -0
  17. package/lib/chunk-I6LUPJUY.mjs +61 -0
  18. package/lib/chunk-I6LUPJUY.mjs.map +1 -0
  19. package/lib/{chunk-KR2Y2CVQ.mjs → chunk-KA3OMP3X.mjs} +2 -2
  20. package/lib/{chunk-ZM4GDHHC.mjs → chunk-KMEWULMX.mjs} +51 -3
  21. package/lib/chunk-KMEWULMX.mjs.map +1 -0
  22. package/lib/chunk-LKKLO66E.mjs +25 -0
  23. package/lib/chunk-LKKLO66E.mjs.map +1 -0
  24. package/lib/{chunk-CFJDATDK.mjs → chunk-MLFMW5IF.mjs} +43 -9
  25. package/lib/chunk-MLFMW5IF.mjs.map +1 -0
  26. package/lib/chunk-O5VQWB6U.mjs +315 -0
  27. package/lib/chunk-O5VQWB6U.mjs.map +1 -0
  28. package/lib/{chunk-7BQHLC7U.mjs → chunk-P3CTZWC2.mjs} +8 -40
  29. package/lib/chunk-P3CTZWC2.mjs.map +1 -0
  30. package/lib/chunk-P3NFCKTZ.mjs +502 -0
  31. package/lib/chunk-P3NFCKTZ.mjs.map +1 -0
  32. package/lib/{chunk-M7Y3BOQW.mjs → chunk-Q3MKITPY.mjs} +5 -5
  33. package/lib/chunk-Q64MOYJ7.mjs +218 -0
  34. package/lib/chunk-Q64MOYJ7.mjs.map +1 -0
  35. package/lib/chunk-RQKJNMX5.mjs +89 -0
  36. package/lib/chunk-RQKJNMX5.mjs.map +1 -0
  37. package/lib/{chunk-ZWSGM6PZ.mjs → chunk-SD7J3N3C.mjs} +2 -2
  38. package/lib/{chunk-7RZHFI77.mjs → chunk-VESULYQQ.mjs} +2 -2
  39. package/lib/{chunk-AOSEKL7U.mjs → chunk-WOTU36P3.mjs} +6 -103
  40. package/lib/chunk-WOTU36P3.mjs.map +1 -0
  41. package/lib/{chunk-X5E4YJGZ.mjs → chunk-YPTJJ35S.mjs} +2 -2
  42. package/lib/counter-apply-operation-DZM3MIDm.d.mts +63 -0
  43. package/lib/counter-apply-operation-DZM3MIDm.d.ts +63 -0
  44. package/lib/counter-maintenance.handler.d.mts +38 -0
  45. package/lib/counter-maintenance.handler.d.ts +38 -0
  46. package/lib/counter-maintenance.handler.js +2885 -0
  47. package/lib/counter-maintenance.handler.js.map +1 -0
  48. package/lib/counter-maintenance.handler.mjs +180 -0
  49. package/lib/counter-maintenance.handler.mjs.map +1 -0
  50. package/lib/counter-reconciliation.handler.d.mts +116 -0
  51. package/lib/counter-reconciliation.handler.d.ts +116 -0
  52. package/lib/counter-reconciliation.handler.js +3324 -0
  53. package/lib/counter-reconciliation.handler.js.map +1 -0
  54. package/lib/counter-reconciliation.handler.mjs +295 -0
  55. package/lib/counter-reconciliation.handler.mjs.map +1 -0
  56. package/lib/data-store-postgres-replication.handler.js +50 -2
  57. package/lib/data-store-postgres-replication.handler.js.map +1 -1
  58. package/lib/data-store-postgres-replication.handler.mjs +2 -2
  59. package/lib/delete-chunk.handler.js +118 -2
  60. package/lib/delete-chunk.handler.js.map +1 -1
  61. package/lib/delete-chunk.handler.mjs +3 -3
  62. package/lib/{events-DTgo2dcW.d.mts → events-TG654e7L.d.mts} +68 -19
  63. package/lib/{events-DTgo2dcW.d.ts → events-TG654e7L.d.ts} +68 -19
  64. package/lib/finalize.handler.js +50 -2
  65. package/lib/finalize.handler.js.map +1 -1
  66. package/lib/finalize.handler.mjs +4 -4
  67. package/lib/firehose-archive-transform.handler.js +50 -2
  68. package/lib/firehose-archive-transform.handler.js.map +1 -1
  69. package/lib/firehose-archive-transform.handler.mjs +2 -2
  70. package/lib/index.d.mts +1283 -4
  71. package/lib/index.d.ts +1389 -24
  72. package/lib/index.js +4113 -320
  73. package/lib/index.js.map +1 -1
  74. package/lib/index.mjs +602 -195
  75. package/lib/index.mjs.map +1 -1
  76. package/lib/list-chunks.handler.js +118 -2
  77. package/lib/list-chunks.handler.js.map +1 -1
  78. package/lib/list-chunks.handler.mjs +3 -3
  79. package/lib/platform-deploy-bridge.handler.js +50 -2
  80. package/lib/platform-deploy-bridge.handler.js.map +1 -1
  81. package/lib/platform-deploy-bridge.handler.mjs +1 -1
  82. package/lib/pre-token-generation.handler.js +68 -0
  83. package/lib/pre-token-generation.handler.js.map +1 -1
  84. package/lib/pre-token-generation.handler.mjs +9 -5
  85. package/lib/pre-token-generation.handler.mjs.map +1 -1
  86. package/lib/provision-default-workspace.handler.js +887 -4
  87. package/lib/provision-default-workspace.handler.js.map +1 -1
  88. package/lib/provision-default-workspace.handler.mjs +14 -9
  89. package/lib/provision-default-workspace.handler.mjs.map +1 -1
  90. package/lib/rename-finalize.handler.js +50 -2
  91. package/lib/rename-finalize.handler.js.map +1 -1
  92. package/lib/rename-finalize.handler.mjs +2 -2
  93. package/lib/rename-list-targets.handler.js +118 -2
  94. package/lib/rename-list-targets.handler.js.map +1 -1
  95. package/lib/rename-list-targets.handler.mjs +11 -9
  96. package/lib/rename-list-targets.handler.mjs.map +1 -1
  97. package/lib/rename-rewrite-chunk.handler.js +68 -0
  98. package/lib/rename-rewrite-chunk.handler.js.map +1 -1
  99. package/lib/rename-rewrite-chunk.handler.mjs +2 -2
  100. package/lib/rest-api-lambda.handler.js +1454 -251
  101. package/lib/rest-api-lambda.handler.js.map +1 -1
  102. package/lib/rest-api-lambda.handler.mjs +673 -821
  103. package/lib/rest-api-lambda.handler.mjs.map +1 -1
  104. package/lib/seed-demo-data.handler.d.mts +1 -1
  105. package/lib/seed-demo-data.handler.d.ts +1 -1
  106. package/lib/seed-demo-data.handler.js +4004 -201
  107. package/lib/seed-demo-data.handler.js.map +1 -1
  108. package/lib/seed-demo-data.handler.mjs +10 -7
  109. package/lib/seed-system-data.handler.js +118 -2
  110. package/lib/seed-system-data.handler.js.map +1 -1
  111. package/lib/seed-system-data.handler.mjs +5 -5
  112. package/package.json +1 -1
  113. package/lib/chunk-7BQHLC7U.mjs.map +0 -1
  114. package/lib/chunk-AOSEKL7U.mjs.map +0 -1
  115. package/lib/chunk-BQMJSDOD.mjs +0 -1136
  116. package/lib/chunk-BQMJSDOD.mjs.map +0 -1
  117. package/lib/chunk-CFJDATDK.mjs.map +0 -1
  118. package/lib/chunk-E6MCKJVS.mjs +0 -212
  119. package/lib/chunk-E6MCKJVS.mjs.map +0 -1
  120. package/lib/chunk-HQ67J7BP.mjs.map +0 -1
  121. package/lib/chunk-MVQWAIMC.mjs.map +0 -1
  122. package/lib/chunk-ZM4GDHHC.mjs.map +0 -1
  123. /package/lib/{chunk-WPCBVDFZ.mjs.map → chunk-76UM2LQ5.mjs.map} +0 -0
  124. /package/lib/{chunk-23PUSHBV.mjs.map → chunk-D2Y6DDOC.mjs.map} +0 -0
  125. /package/lib/{chunk-KR2Y2CVQ.mjs.map → chunk-KA3OMP3X.mjs.map} +0 -0
  126. /package/lib/{chunk-M7Y3BOQW.mjs.map → chunk-Q3MKITPY.mjs.map} +0 -0
  127. /package/lib/{chunk-ZWSGM6PZ.mjs.map → chunk-SD7J3N3C.mjs.map} +0 -0
  128. /package/lib/{chunk-7RZHFI77.mjs.map → chunk-VESULYQQ.mjs.map} +0 -0
  129. /package/lib/{chunk-X5E4YJGZ.mjs.map → chunk-YPTJJ35S.mjs.map} +0 -0
@@ -8,16 +8,19 @@ import {
8
8
  productionCognitoProvisioner,
9
9
  runSeedDemoData,
10
10
  seedDemoGraph
11
- } from "./chunk-BQMJSDOD.mjs";
12
- import "./chunk-E6MCKJVS.mjs";
13
- import "./chunk-ZM4GDHHC.mjs";
14
- import "./chunk-CFJDATDK.mjs";
15
- import "./chunk-HQ67J7BP.mjs";
11
+ } from "./chunk-7TRO2STL.mjs";
12
+ import "./chunk-P3NFCKTZ.mjs";
13
+ import "./chunk-MLFMW5IF.mjs";
14
+ import "./chunk-BUAYVN3C.mjs";
15
+ import "./chunk-5S6VFBLT.mjs";
16
+ import "./chunk-I6LUPJUY.mjs";
16
17
  import "./chunk-QJDHVMKT.mjs";
17
- import "./chunk-MVQWAIMC.mjs";
18
+ import "./chunk-6BB4CRSS.mjs";
19
+ import "./chunk-O5VQWB6U.mjs";
18
20
  import "./chunk-FYHBHHWK.mjs";
19
- import "./chunk-VZCPGQXA.mjs";
21
+ import "./chunk-EUIP2U5F.mjs";
20
22
  import "./chunk-TRY7JGWO.mjs";
23
+ import "./chunk-KMEWULMX.mjs";
21
24
  import "./chunk-LZOMFHX3.mjs";
22
25
  export {
23
26
  SEED_DEMO_DATA_USER_POOL_ID_ENV_VAR,
@@ -139,7 +139,7 @@ var require_control_plane = __commonJS({
139
139
  "../workflows/lib/detail-types/control-plane.js"(exports2) {
140
140
  "use strict";
141
141
  Object.defineProperty(exports2, "__esModule", { value: true });
142
- exports2.ControlPlaneRenameFailedV1 = exports2.ControlPlaneRenameCompleteV1 = exports2.ControlPlaneRenameV1 = exports2.RENAMABLE_ENTITY_TYPE = exports2.ControlPlaneOwningDeleteFailedV1 = exports2.ControlPlaneOwningDeleteCompleteV1 = exports2.ControlPlaneOwningDeleteV1 = exports2.OWNING_ENTITY_TYPE = void 0;
142
+ exports2.ControlPlaneWorkspaceDeletedV1 = exports2.ControlPlaneWorkspaceCreatedV1 = exports2.ControlPlaneRoleAssignmentDeletedV1 = exports2.ControlPlaneRoleAssignmentCreatedV1 = exports2.ControlPlaneMembershipDeletedV1 = exports2.ControlPlaneMembershipCreatedV1 = exports2.ControlPlaneRenameFailedV1 = exports2.ControlPlaneRenameCompleteV1 = exports2.ControlPlaneRenameV1 = exports2.RENAMABLE_ENTITY_TYPE = exports2.ControlPlaneOwningDeleteFailedV1 = exports2.ControlPlaneOwningDeleteCompleteV1 = exports2.ControlPlaneOwningDeleteV1 = exports2.OWNING_ENTITY_TYPE = void 0;
143
143
  var sources_1 = require_sources();
144
144
  var registry_1 = require_registry();
145
145
  exports2.OWNING_ENTITY_TYPE = {
@@ -181,6 +181,36 @@ var require_control_plane = __commonJS({
181
181
  source: sources_1.OPENHI_OPS_SOURCE,
182
182
  dedupRequired: true
183
183
  });
184
+ exports2.ControlPlaneMembershipCreatedV1 = (0, registry_1.defineDetailType)({
185
+ detailType: "control-plane.membership-created.v1",
186
+ source: sources_1.OPENHI_CONTROL_SOURCE,
187
+ dedupRequired: true
188
+ });
189
+ exports2.ControlPlaneMembershipDeletedV1 = (0, registry_1.defineDetailType)({
190
+ detailType: "control-plane.membership-deleted.v1",
191
+ source: sources_1.OPENHI_CONTROL_SOURCE,
192
+ dedupRequired: true
193
+ });
194
+ exports2.ControlPlaneRoleAssignmentCreatedV1 = (0, registry_1.defineDetailType)({
195
+ detailType: "control-plane.role-assignment-created.v1",
196
+ source: sources_1.OPENHI_CONTROL_SOURCE,
197
+ dedupRequired: true
198
+ });
199
+ exports2.ControlPlaneRoleAssignmentDeletedV1 = (0, registry_1.defineDetailType)({
200
+ detailType: "control-plane.role-assignment-deleted.v1",
201
+ source: sources_1.OPENHI_CONTROL_SOURCE,
202
+ dedupRequired: true
203
+ });
204
+ exports2.ControlPlaneWorkspaceCreatedV1 = (0, registry_1.defineDetailType)({
205
+ detailType: "control-plane.workspace-created.v1",
206
+ source: sources_1.OPENHI_CONTROL_SOURCE,
207
+ dedupRequired: true
208
+ });
209
+ exports2.ControlPlaneWorkspaceDeletedV1 = (0, registry_1.defineDetailType)({
210
+ detailType: "control-plane.workspace-deleted.v1",
211
+ source: sources_1.OPENHI_CONTROL_SOURCE,
212
+ dedupRequired: true
213
+ });
184
214
  }
185
215
  });
186
216
 
@@ -578,7 +608,7 @@ var require_lib = __commonJS({
578
608
  "../workflows/lib/index.js"(exports2) {
579
609
  "use strict";
580
610
  Object.defineProperty(exports2, "__esModule", { value: true });
581
- exports2.workflowDedupClient = exports2.recordIfAbsent = exports2.markFailed = exports2.encodeSortKey = exports2.WorkflowDedupTableNameMissingError = exports2.WorkflowDedupInvalidInputError = exports2.WORKFLOW_DEDUP_TABLE_NAME_ENV_VAR = exports2.WORKFLOW_DEDUP_MAX_CONSUMER_NAME_LENGTH = exports2.WORKFLOW_DEDUP_DEFAULT_TTL_SECONDS = exports2.parseWorkflowEvent = exports2.UnsupportedEnvelopeVersionError = exports2.InvalidWorkflowEventError = exports2.workflowsClient = exports2.publishWorkflowEvent = exports2.WorkflowPublishError = exports2.isWellFormedDetailType = exports2.defineDetailType = exports2.RENAMABLE_ENTITY_TYPE = exports2.PlatformSystemDataSeededV1 = exports2.PlatformDeploymentCompletedV1 = exports2.OWNING_ENTITY_TYPE = exports2.InvalidDetailTypeRegistrationError = exports2.ControlPlaneRenameV1 = exports2.ControlPlaneRenameFailedV1 = exports2.ControlPlaneRenameCompleteV1 = exports2.ControlPlaneOwningDeleteV1 = exports2.ControlPlaneOwningDeleteFailedV1 = exports2.ControlPlaneOwningDeleteCompleteV1 = exports2.OPENHI_OPS_SOURCE = exports2.OPENHI_DATA_SOURCE = exports2.OPENHI_CONTROL_SOURCE = exports2.DEFAULT_BUS_NAME_BY_SOURCE = exports2.workflowUserActorFromClaims = exports2.isWorkflowUserActor = exports2.isWorkflowSystemActor = exports2.MissingActorContextError = exports2.isSupportedEnvelopeVersion = exports2.ENVELOPE_VERSION = void 0;
611
+ exports2.workflowDedupClient = exports2.recordIfAbsent = exports2.markFailed = exports2.encodeSortKey = exports2.WorkflowDedupTableNameMissingError = exports2.WorkflowDedupInvalidInputError = exports2.WORKFLOW_DEDUP_TABLE_NAME_ENV_VAR = exports2.WORKFLOW_DEDUP_MAX_CONSUMER_NAME_LENGTH = exports2.WORKFLOW_DEDUP_DEFAULT_TTL_SECONDS = exports2.parseWorkflowEvent = exports2.UnsupportedEnvelopeVersionError = exports2.InvalidWorkflowEventError = exports2.workflowsClient = exports2.publishWorkflowEvent = exports2.WorkflowPublishError = exports2.isWellFormedDetailType = exports2.defineDetailType = exports2.RENAMABLE_ENTITY_TYPE = exports2.PlatformSystemDataSeededV1 = exports2.PlatformDeploymentCompletedV1 = exports2.OWNING_ENTITY_TYPE = exports2.InvalidDetailTypeRegistrationError = exports2.ControlPlaneWorkspaceDeletedV1 = exports2.ControlPlaneWorkspaceCreatedV1 = exports2.ControlPlaneRoleAssignmentDeletedV1 = exports2.ControlPlaneRoleAssignmentCreatedV1 = exports2.ControlPlaneRenameV1 = exports2.ControlPlaneRenameFailedV1 = exports2.ControlPlaneRenameCompleteV1 = exports2.ControlPlaneOwningDeleteV1 = exports2.ControlPlaneOwningDeleteFailedV1 = exports2.ControlPlaneOwningDeleteCompleteV1 = exports2.ControlPlaneMembershipDeletedV1 = exports2.ControlPlaneMembershipCreatedV1 = exports2.OPENHI_OPS_SOURCE = exports2.OPENHI_DATA_SOURCE = exports2.OPENHI_CONTROL_SOURCE = exports2.DEFAULT_BUS_NAME_BY_SOURCE = exports2.workflowUserActorFromClaims = exports2.isWorkflowUserActor = exports2.isWorkflowSystemActor = exports2.MissingActorContextError = exports2.isSupportedEnvelopeVersion = exports2.ENVELOPE_VERSION = void 0;
582
612
  var envelope_version_1 = require_envelope_version();
583
613
  Object.defineProperty(exports2, "ENVELOPE_VERSION", { enumerable: true, get: function() {
584
614
  return envelope_version_1.ENVELOPE_VERSION;
@@ -613,6 +643,12 @@ var require_lib = __commonJS({
613
643
  return sources_1.OPENHI_OPS_SOURCE;
614
644
  } });
615
645
  var detail_types_1 = require_detail_types();
646
+ Object.defineProperty(exports2, "ControlPlaneMembershipCreatedV1", { enumerable: true, get: function() {
647
+ return detail_types_1.ControlPlaneMembershipCreatedV1;
648
+ } });
649
+ Object.defineProperty(exports2, "ControlPlaneMembershipDeletedV1", { enumerable: true, get: function() {
650
+ return detail_types_1.ControlPlaneMembershipDeletedV1;
651
+ } });
616
652
  Object.defineProperty(exports2, "ControlPlaneOwningDeleteCompleteV1", { enumerable: true, get: function() {
617
653
  return detail_types_1.ControlPlaneOwningDeleteCompleteV1;
618
654
  } });
@@ -631,6 +667,18 @@ var require_lib = __commonJS({
631
667
  Object.defineProperty(exports2, "ControlPlaneRenameV1", { enumerable: true, get: function() {
632
668
  return detail_types_1.ControlPlaneRenameV1;
633
669
  } });
670
+ Object.defineProperty(exports2, "ControlPlaneRoleAssignmentCreatedV1", { enumerable: true, get: function() {
671
+ return detail_types_1.ControlPlaneRoleAssignmentCreatedV1;
672
+ } });
673
+ Object.defineProperty(exports2, "ControlPlaneRoleAssignmentDeletedV1", { enumerable: true, get: function() {
674
+ return detail_types_1.ControlPlaneRoleAssignmentDeletedV1;
675
+ } });
676
+ Object.defineProperty(exports2, "ControlPlaneWorkspaceCreatedV1", { enumerable: true, get: function() {
677
+ return detail_types_1.ControlPlaneWorkspaceCreatedV1;
678
+ } });
679
+ Object.defineProperty(exports2, "ControlPlaneWorkspaceDeletedV1", { enumerable: true, get: function() {
680
+ return detail_types_1.ControlPlaneWorkspaceDeletedV1;
681
+ } });
634
682
  Object.defineProperty(exports2, "InvalidDetailTypeRegistrationError", { enumerable: true, get: function() {
635
683
  return detail_types_1.InvalidDetailTypeRegistrationError;
636
684
  } });
@@ -2168,6 +2216,24 @@ var TenantEntity = new import_electrodb11.Entity({
2168
2216
  type: "string",
2169
2217
  required: true
2170
2218
  },
2219
+ /**
2220
+ * ADR-028 denormalized counter — number of tenant-scoped Memberships
2221
+ * (users) in this tenant. Maintained by the counter-maintenance
2222
+ * consumer via atomic ADD; absent/0 until first event or reconciliation.
2223
+ */
2224
+ usersInTenant: {
2225
+ type: "number",
2226
+ required: false
2227
+ },
2228
+ /**
2229
+ * ADR-028 denormalized counter — number of Workspaces in this tenant.
2230
+ * Maintained by the counter-maintenance consumer via atomic ADD;
2231
+ * absent/0 until first event or reconciliation.
2232
+ */
2233
+ workspacesInTenant: {
2234
+ type: "number",
2235
+ required: false
2236
+ },
2171
2237
  gsi1Shard: gsi1ShardAttribute,
2172
2238
  /** Derived GSI1 sort key — name-based when extractable; else `<lastUpdated>#<id>`. */
2173
2239
  gsi1sk: gsi1skAttribute,
@@ -2272,6 +2338,26 @@ var UserEntity = new import_electrodb12.Entity({
2272
2338
  type: "string",
2273
2339
  required: true
2274
2340
  },
2341
+ /**
2342
+ * ADR-028 denormalized counter — number of tenant-scoped Memberships
2343
+ * (tenants) this user belongs to. Maintained by the
2344
+ * counter-maintenance consumer via atomic ADD; absent/0 until first
2345
+ * event or reconciliation.
2346
+ */
2347
+ tenantsForUser: {
2348
+ type: "number",
2349
+ required: false
2350
+ },
2351
+ /**
2352
+ * ADR-028 denormalized counter — number of workspace-scoped
2353
+ * Memberships (workspaces) this user belongs to. Maintained by the
2354
+ * counter-maintenance consumer via atomic ADD; absent/0 until first
2355
+ * event or reconciliation.
2356
+ */
2357
+ workspacesForUser: {
2358
+ type: "number",
2359
+ required: false
2360
+ },
2275
2361
  gsi1Shard: gsi1ShardAttribute,
2276
2362
  /** Derived GSI1 sort key — name-based when extractable; else `<lastUpdated>#<id>`. */
2277
2363
  gsi1sk: gsi1skAttribute,
@@ -2416,6 +2502,36 @@ var WorkspaceEntity = new import_electrodb13.Entity({
2416
2502
  type: "string",
2417
2503
  required: true
2418
2504
  },
2505
+ /**
2506
+ * ADR-028 denormalized counter — number of workspace-scoped
2507
+ * Memberships (users) in this workspace. Maintained by the
2508
+ * counter-maintenance consumer via atomic ADD; absent/0 until first
2509
+ * event or reconciliation.
2510
+ */
2511
+ usersInWorkspace: {
2512
+ type: "number",
2513
+ required: false
2514
+ },
2515
+ /**
2516
+ * ADR-028 denormalized counter — number of workspace-scoped
2517
+ * RoleAssignments classified as admin-tier in this workspace.
2518
+ * Maintained by the counter-maintenance consumer via atomic ADD;
2519
+ * absent/0 until first event or reconciliation.
2520
+ */
2521
+ adminUsersInWorkspace: {
2522
+ type: "number",
2523
+ required: false
2524
+ },
2525
+ /**
2526
+ * ADR-028 denormalized counter — number of workspace-scoped
2527
+ * RoleAssignments classified as non-admin in this workspace.
2528
+ * Maintained by the counter-maintenance consumer via atomic ADD;
2529
+ * absent/0 until first event or reconciliation.
2530
+ */
2531
+ normalUsersInWorkspace: {
2532
+ type: "number",
2533
+ required: false
2534
+ },
2419
2535
  gsi1Shard: gsi1ShardAttribute,
2420
2536
  /** Derived GSI1 sort key — name-based when extractable; else `<lastUpdated>#<id>`. */
2421
2537
  gsi1sk: gsi1skAttribute,