@openhi/constructs 0.0.160 → 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 (121) 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-QFHYTCVY.mjs → chunk-7TRO2STL.mjs} +7 -7
  7. package/lib/chunk-BUAYVN3C.mjs +87 -0
  8. package/lib/chunk-BUAYVN3C.mjs.map +1 -0
  9. package/lib/{chunk-23PUSHBV.mjs → chunk-D2Y6DDOC.mjs} +2 -2
  10. package/lib/chunk-DWSWCUZR.mjs +123 -0
  11. package/lib/chunk-DWSWCUZR.mjs.map +1 -0
  12. package/lib/{chunk-VZCPGQXA.mjs → chunk-EUIP2U5F.mjs} +69 -1
  13. package/lib/{chunk-VZCPGQXA.mjs.map → chunk-EUIP2U5F.mjs.map} +1 -1
  14. package/lib/chunk-GJTPXJKD.mjs +46 -0
  15. package/lib/chunk-GJTPXJKD.mjs.map +1 -0
  16. package/lib/chunk-I6LUPJUY.mjs +61 -0
  17. package/lib/chunk-I6LUPJUY.mjs.map +1 -0
  18. package/lib/{chunk-KR2Y2CVQ.mjs → chunk-KA3OMP3X.mjs} +2 -2
  19. package/lib/{chunk-ZM4GDHHC.mjs → chunk-KMEWULMX.mjs} +51 -3
  20. package/lib/chunk-KMEWULMX.mjs.map +1 -0
  21. package/lib/chunk-LKKLO66E.mjs +25 -0
  22. package/lib/chunk-LKKLO66E.mjs.map +1 -0
  23. package/lib/{chunk-CFJDATDK.mjs → chunk-MLFMW5IF.mjs} +43 -9
  24. package/lib/chunk-MLFMW5IF.mjs.map +1 -0
  25. package/lib/chunk-O5VQWB6U.mjs +315 -0
  26. package/lib/chunk-O5VQWB6U.mjs.map +1 -0
  27. package/lib/{chunk-7BQHLC7U.mjs → chunk-P3CTZWC2.mjs} +8 -40
  28. package/lib/chunk-P3CTZWC2.mjs.map +1 -0
  29. package/lib/{chunk-EFB5OFM7.mjs → chunk-P3NFCKTZ.mjs} +6 -4
  30. package/lib/{chunk-EFB5OFM7.mjs.map → chunk-P3NFCKTZ.mjs.map} +1 -1
  31. package/lib/{chunk-M7Y3BOQW.mjs → chunk-Q3MKITPY.mjs} +5 -5
  32. package/lib/chunk-Q64MOYJ7.mjs +218 -0
  33. package/lib/chunk-Q64MOYJ7.mjs.map +1 -0
  34. package/lib/chunk-RQKJNMX5.mjs +89 -0
  35. package/lib/chunk-RQKJNMX5.mjs.map +1 -0
  36. package/lib/{chunk-ZWSGM6PZ.mjs → chunk-SD7J3N3C.mjs} +2 -2
  37. package/lib/{chunk-7RZHFI77.mjs → chunk-VESULYQQ.mjs} +2 -2
  38. package/lib/{chunk-AOSEKL7U.mjs → chunk-WOTU36P3.mjs} +6 -103
  39. package/lib/chunk-WOTU36P3.mjs.map +1 -0
  40. package/lib/{chunk-X5E4YJGZ.mjs → chunk-YPTJJ35S.mjs} +2 -2
  41. package/lib/counter-apply-operation-DZM3MIDm.d.mts +63 -0
  42. package/lib/counter-apply-operation-DZM3MIDm.d.ts +63 -0
  43. package/lib/counter-maintenance.handler.d.mts +38 -0
  44. package/lib/counter-maintenance.handler.d.ts +38 -0
  45. package/lib/counter-maintenance.handler.js +2885 -0
  46. package/lib/counter-maintenance.handler.js.map +1 -0
  47. package/lib/counter-maintenance.handler.mjs +180 -0
  48. package/lib/counter-maintenance.handler.mjs.map +1 -0
  49. package/lib/counter-reconciliation.handler.d.mts +116 -0
  50. package/lib/counter-reconciliation.handler.d.ts +116 -0
  51. package/lib/counter-reconciliation.handler.js +3324 -0
  52. package/lib/counter-reconciliation.handler.js.map +1 -0
  53. package/lib/counter-reconciliation.handler.mjs +295 -0
  54. package/lib/counter-reconciliation.handler.mjs.map +1 -0
  55. package/lib/data-store-postgres-replication.handler.js +50 -2
  56. package/lib/data-store-postgres-replication.handler.js.map +1 -1
  57. package/lib/data-store-postgres-replication.handler.mjs +2 -2
  58. package/lib/delete-chunk.handler.js +118 -2
  59. package/lib/delete-chunk.handler.js.map +1 -1
  60. package/lib/delete-chunk.handler.mjs +3 -3
  61. package/lib/finalize.handler.js +50 -2
  62. package/lib/finalize.handler.js.map +1 -1
  63. package/lib/finalize.handler.mjs +4 -4
  64. package/lib/firehose-archive-transform.handler.js +50 -2
  65. package/lib/firehose-archive-transform.handler.js.map +1 -1
  66. package/lib/firehose-archive-transform.handler.mjs +2 -2
  67. package/lib/index.d.mts +140 -2
  68. package/lib/index.d.ts +143 -5
  69. package/lib/index.js +493 -196
  70. package/lib/index.js.map +1 -1
  71. package/lib/index.mjs +360 -193
  72. package/lib/index.mjs.map +1 -1
  73. package/lib/list-chunks.handler.js +118 -2
  74. package/lib/list-chunks.handler.js.map +1 -1
  75. package/lib/list-chunks.handler.mjs +3 -3
  76. package/lib/platform-deploy-bridge.handler.js +50 -2
  77. package/lib/platform-deploy-bridge.handler.js.map +1 -1
  78. package/lib/platform-deploy-bridge.handler.mjs +1 -1
  79. package/lib/pre-token-generation.handler.js +68 -0
  80. package/lib/pre-token-generation.handler.js.map +1 -1
  81. package/lib/pre-token-generation.handler.mjs +9 -5
  82. package/lib/pre-token-generation.handler.mjs.map +1 -1
  83. package/lib/provision-default-workspace.handler.js +883 -0
  84. package/lib/provision-default-workspace.handler.js.map +1 -1
  85. package/lib/provision-default-workspace.handler.mjs +10 -5
  86. package/lib/provision-default-workspace.handler.mjs.map +1 -1
  87. package/lib/rename-finalize.handler.js +50 -2
  88. package/lib/rename-finalize.handler.js.map +1 -1
  89. package/lib/rename-finalize.handler.mjs +2 -2
  90. package/lib/rename-list-targets.handler.js +118 -2
  91. package/lib/rename-list-targets.handler.js.map +1 -1
  92. package/lib/rename-list-targets.handler.mjs +11 -9
  93. package/lib/rename-list-targets.handler.mjs.map +1 -1
  94. package/lib/rename-rewrite-chunk.handler.js +68 -0
  95. package/lib/rename-rewrite-chunk.handler.js.map +1 -1
  96. package/lib/rename-rewrite-chunk.handler.mjs +2 -2
  97. package/lib/rest-api-lambda.handler.js +1454 -251
  98. package/lib/rest-api-lambda.handler.js.map +1 -1
  99. package/lib/rest-api-lambda.handler.mjs +415 -291
  100. package/lib/rest-api-lambda.handler.mjs.map +1 -1
  101. package/lib/seed-demo-data.handler.js +205 -8
  102. package/lib/seed-demo-data.handler.js.map +1 -1
  103. package/lib/seed-demo-data.handler.mjs +10 -7
  104. package/lib/seed-system-data.handler.js +118 -2
  105. package/lib/seed-system-data.handler.js.map +1 -1
  106. package/lib/seed-system-data.handler.mjs +5 -5
  107. package/package.json +1 -1
  108. package/lib/chunk-7BQHLC7U.mjs.map +0 -1
  109. package/lib/chunk-AOSEKL7U.mjs.map +0 -1
  110. package/lib/chunk-CFJDATDK.mjs.map +0 -1
  111. package/lib/chunk-HQ67J7BP.mjs.map +0 -1
  112. package/lib/chunk-MVQWAIMC.mjs.map +0 -1
  113. package/lib/chunk-ZM4GDHHC.mjs.map +0 -1
  114. /package/lib/{chunk-WPCBVDFZ.mjs.map → chunk-76UM2LQ5.mjs.map} +0 -0
  115. /package/lib/{chunk-QFHYTCVY.mjs.map → chunk-7TRO2STL.mjs.map} +0 -0
  116. /package/lib/{chunk-23PUSHBV.mjs.map → chunk-D2Y6DDOC.mjs.map} +0 -0
  117. /package/lib/{chunk-KR2Y2CVQ.mjs.map → chunk-KA3OMP3X.mjs.map} +0 -0
  118. /package/lib/{chunk-M7Y3BOQW.mjs.map → chunk-Q3MKITPY.mjs.map} +0 -0
  119. /package/lib/{chunk-ZWSGM6PZ.mjs.map → chunk-SD7J3N3C.mjs.map} +0 -0
  120. /package/lib/{chunk-7RZHFI77.mjs.map → chunk-VESULYQQ.mjs.map} +0 -0
  121. /package/lib/{chunk-X5E4YJGZ.mjs.map → chunk-YPTJJ35S.mjs.map} +0 -0
package/lib/index.js CHANGED
@@ -199,7 +199,7 @@ var require_control_plane = __commonJS({
199
199
  "../workflows/lib/detail-types/control-plane.js"(exports2) {
200
200
  "use strict";
201
201
  Object.defineProperty(exports2, "__esModule", { value: true });
202
- exports2.ControlPlaneRenameFailedV1 = exports2.ControlPlaneRenameCompleteV1 = exports2.ControlPlaneRenameV1 = exports2.RENAMABLE_ENTITY_TYPE = exports2.ControlPlaneOwningDeleteFailedV1 = exports2.ControlPlaneOwningDeleteCompleteV1 = exports2.ControlPlaneOwningDeleteV1 = exports2.OWNING_ENTITY_TYPE = void 0;
202
+ 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;
203
203
  var sources_1 = require_sources();
204
204
  var registry_1 = require_registry();
205
205
  exports2.OWNING_ENTITY_TYPE = {
@@ -241,6 +241,36 @@ var require_control_plane = __commonJS({
241
241
  source: sources_1.OPENHI_OPS_SOURCE,
242
242
  dedupRequired: true
243
243
  });
244
+ exports2.ControlPlaneMembershipCreatedV1 = (0, registry_1.defineDetailType)({
245
+ detailType: "control-plane.membership-created.v1",
246
+ source: sources_1.OPENHI_CONTROL_SOURCE,
247
+ dedupRequired: true
248
+ });
249
+ exports2.ControlPlaneMembershipDeletedV1 = (0, registry_1.defineDetailType)({
250
+ detailType: "control-plane.membership-deleted.v1",
251
+ source: sources_1.OPENHI_CONTROL_SOURCE,
252
+ dedupRequired: true
253
+ });
254
+ exports2.ControlPlaneRoleAssignmentCreatedV1 = (0, registry_1.defineDetailType)({
255
+ detailType: "control-plane.role-assignment-created.v1",
256
+ source: sources_1.OPENHI_CONTROL_SOURCE,
257
+ dedupRequired: true
258
+ });
259
+ exports2.ControlPlaneRoleAssignmentDeletedV1 = (0, registry_1.defineDetailType)({
260
+ detailType: "control-plane.role-assignment-deleted.v1",
261
+ source: sources_1.OPENHI_CONTROL_SOURCE,
262
+ dedupRequired: true
263
+ });
264
+ exports2.ControlPlaneWorkspaceCreatedV1 = (0, registry_1.defineDetailType)({
265
+ detailType: "control-plane.workspace-created.v1",
266
+ source: sources_1.OPENHI_CONTROL_SOURCE,
267
+ dedupRequired: true
268
+ });
269
+ exports2.ControlPlaneWorkspaceDeletedV1 = (0, registry_1.defineDetailType)({
270
+ detailType: "control-plane.workspace-deleted.v1",
271
+ source: sources_1.OPENHI_CONTROL_SOURCE,
272
+ dedupRequired: true
273
+ });
244
274
  }
245
275
  });
246
276
 
@@ -299,17 +329,17 @@ var require_publisher = __commonJS({
299
329
  Object.defineProperty(exports2, "__esModule", { value: true });
300
330
  exports2.WorkflowPublishError = void 0;
301
331
  exports2.workflowsClient = workflowsClient;
302
- exports2.publishWorkflowEvent = publishWorkflowEvent;
332
+ exports2.publishWorkflowEvent = publishWorkflowEvent2;
303
333
  var node_crypto_1 = require("crypto");
304
334
  var client_eventbridge_1 = require("@aws-sdk/client-eventbridge");
305
335
  var envelope_version_1 = require_envelope_version();
306
336
  var sources_1 = require_sources();
307
337
  function workflowsClient(bridge, options = {}) {
308
338
  return {
309
- publish: (entry, payload, ctx) => publishWorkflowEvent(bridge, entry, payload, ctx, options)
339
+ publish: (entry, payload, ctx) => publishWorkflowEvent2(bridge, entry, payload, ctx, options)
310
340
  };
311
341
  }
312
- async function publishWorkflowEvent(bridge, entry, payload, ctx, options = {}) {
342
+ async function publishWorkflowEvent2(bridge, entry, payload, ctx, options = {}) {
313
343
  const eventIdGenerator = options.eventIdGenerator ?? (() => (0, node_crypto_1.randomUUID)());
314
344
  const correlationIdGenerator = options.correlationIdGenerator ?? (() => (0, node_crypto_1.randomUUID)());
315
345
  const now = options.now ?? (() => /* @__PURE__ */ new Date());
@@ -638,7 +668,7 @@ var require_lib2 = __commonJS({
638
668
  "../workflows/lib/index.js"(exports2) {
639
669
  "use strict";
640
670
  Object.defineProperty(exports2, "__esModule", { value: true });
641
- 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;
671
+ 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;
642
672
  var envelope_version_1 = require_envelope_version();
643
673
  Object.defineProperty(exports2, "ENVELOPE_VERSION", { enumerable: true, get: function() {
644
674
  return envelope_version_1.ENVELOPE_VERSION;
@@ -673,6 +703,12 @@ var require_lib2 = __commonJS({
673
703
  return sources_1.OPENHI_OPS_SOURCE;
674
704
  } });
675
705
  var detail_types_1 = require_detail_types();
706
+ Object.defineProperty(exports2, "ControlPlaneMembershipCreatedV1", { enumerable: true, get: function() {
707
+ return detail_types_1.ControlPlaneMembershipCreatedV1;
708
+ } });
709
+ Object.defineProperty(exports2, "ControlPlaneMembershipDeletedV1", { enumerable: true, get: function() {
710
+ return detail_types_1.ControlPlaneMembershipDeletedV1;
711
+ } });
676
712
  Object.defineProperty(exports2, "ControlPlaneOwningDeleteCompleteV1", { enumerable: true, get: function() {
677
713
  return detail_types_1.ControlPlaneOwningDeleteCompleteV1;
678
714
  } });
@@ -691,6 +727,18 @@ var require_lib2 = __commonJS({
691
727
  Object.defineProperty(exports2, "ControlPlaneRenameV1", { enumerable: true, get: function() {
692
728
  return detail_types_1.ControlPlaneRenameV1;
693
729
  } });
730
+ Object.defineProperty(exports2, "ControlPlaneRoleAssignmentCreatedV1", { enumerable: true, get: function() {
731
+ return detail_types_1.ControlPlaneRoleAssignmentCreatedV1;
732
+ } });
733
+ Object.defineProperty(exports2, "ControlPlaneRoleAssignmentDeletedV1", { enumerable: true, get: function() {
734
+ return detail_types_1.ControlPlaneRoleAssignmentDeletedV1;
735
+ } });
736
+ Object.defineProperty(exports2, "ControlPlaneWorkspaceCreatedV1", { enumerable: true, get: function() {
737
+ return detail_types_1.ControlPlaneWorkspaceCreatedV1;
738
+ } });
739
+ Object.defineProperty(exports2, "ControlPlaneWorkspaceDeletedV1", { enumerable: true, get: function() {
740
+ return detail_types_1.ControlPlaneWorkspaceDeletedV1;
741
+ } });
694
742
  Object.defineProperty(exports2, "InvalidDetailTypeRegistrationError", { enumerable: true, get: function() {
695
743
  return detail_types_1.InvalidDetailTypeRegistrationError;
696
744
  } });
@@ -779,6 +827,8 @@ __export(src_exports, {
779
827
  CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE: () => CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE,
780
828
  CONDITION_CLINICAL_STATUS_SYSTEM: () => CONDITION_CLINICAL_STATUS_SYSTEM,
781
829
  CONTROL_EVENT_BUS_NAME_ENV_VAR: () => CONTROL_EVENT_BUS_NAME_ENV_VAR,
830
+ COUNTER_MAINTENANCE_CONSUMER_NAME: () => COUNTER_MAINTENANCE_CONSUMER_NAME,
831
+ COUNTER_MAINTENANCE_DETAIL_TYPES: () => COUNTER_MAINTENANCE_DETAIL_TYPES,
782
832
  COVERAGE_PAYOR_TYPE_SYSTEM: () => COVERAGE_PAYOR_TYPE_SYSTEM,
783
833
  COVERAGE_QMB_STATUS_EXTENSION_URL: () => COVERAGE_QMB_STATUS_EXTENSION_URL,
784
834
  COVERAGE_VERIFICATION_DATE_EXTENSION_URL: () => COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
@@ -790,12 +840,22 @@ __export(src_exports, {
790
840
  CognitoUserPoolDomain: () => CognitoUserPoolDomain,
791
841
  CognitoUserPoolKmsKey: () => CognitoUserPoolKmsKey,
792
842
  ControlEventBus: () => ControlEventBus,
793
- ControlPlaneOwningDeleteCompleteV1: () => import_workflows5.ControlPlaneOwningDeleteCompleteV1,
794
- ControlPlaneOwningDeleteFailedV1: () => import_workflows5.ControlPlaneOwningDeleteFailedV1,
795
- ControlPlaneOwningDeleteV1: () => import_workflows5.ControlPlaneOwningDeleteV1,
796
- ControlPlaneRenameCompleteV1: () => import_workflows6.ControlPlaneRenameCompleteV1,
797
- ControlPlaneRenameFailedV1: () => import_workflows6.ControlPlaneRenameFailedV1,
798
- ControlPlaneRenameV1: () => import_workflows6.ControlPlaneRenameV1,
843
+ ControlPlaneMembershipCreatedV1: () => import_workflows2.ControlPlaneMembershipCreatedV1,
844
+ ControlPlaneMembershipDeletedV1: () => import_workflows2.ControlPlaneMembershipDeletedV1,
845
+ ControlPlaneOwningDeleteCompleteV1: () => import_workflows7.ControlPlaneOwningDeleteCompleteV1,
846
+ ControlPlaneOwningDeleteFailedV1: () => import_workflows7.ControlPlaneOwningDeleteFailedV1,
847
+ ControlPlaneOwningDeleteV1: () => import_workflows7.ControlPlaneOwningDeleteV1,
848
+ ControlPlaneRenameCompleteV1: () => import_workflows8.ControlPlaneRenameCompleteV1,
849
+ ControlPlaneRenameFailedV1: () => import_workflows8.ControlPlaneRenameFailedV1,
850
+ ControlPlaneRenameV1: () => import_workflows8.ControlPlaneRenameV1,
851
+ ControlPlaneRoleAssignmentCreatedV1: () => import_workflows2.ControlPlaneRoleAssignmentCreatedV1,
852
+ ControlPlaneRoleAssignmentDeletedV1: () => import_workflows2.ControlPlaneRoleAssignmentDeletedV1,
853
+ ControlPlaneWorkspaceCreatedV1: () => import_workflows2.ControlPlaneWorkspaceCreatedV1,
854
+ ControlPlaneWorkspaceDeletedV1: () => import_workflows2.ControlPlaneWorkspaceDeletedV1,
855
+ CounterMaintenanceLambda: () => CounterMaintenanceLambda,
856
+ CounterMaintenanceWorkflow: () => CounterMaintenanceWorkflow,
857
+ CounterReconciliationLambda: () => CounterReconciliationLambda,
858
+ CounterReconciliationWorkflow: () => CounterReconciliationWorkflow,
799
859
  DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES: () => DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES,
800
860
  DATA_STORE_CHANGE_DETAIL_TYPE: () => DATA_STORE_CHANGE_DETAIL_TYPE,
801
861
  DEFAULT_PREVIEW_EXPIRATION_DAYS: () => DEFAULT_PREVIEW_EXPIRATION_DAYS,
@@ -858,7 +918,7 @@ __export(src_exports, {
858
918
  OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY: () => OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY,
859
919
  OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES: () => OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES,
860
920
  OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR: () => OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR,
861
- OWNING_ENTITY_TYPE: () => import_workflows5.OWNING_ENTITY_TYPE,
921
+ OWNING_ENTITY_TYPE: () => import_workflows7.OWNING_ENTITY_TYPE,
862
922
  OpenHiApp: () => OpenHiApp,
863
923
  OpenHiAuthService: () => OpenHiAuthService,
864
924
  OpenHiDataService: () => OpenHiDataService,
@@ -904,14 +964,14 @@ __export(src_exports, {
904
964
  PerBranchHostname: () => PerBranchHostname,
905
965
  PlatformDeployBridge: () => PlatformDeployBridge,
906
966
  PlatformDeployBridgeLambda: () => PlatformDeployBridgeLambda,
907
- PlatformDeploymentCompletedV1: () => import_workflows4.PlatformDeploymentCompletedV1,
967
+ PlatformDeploymentCompletedV1: () => import_workflows6.PlatformDeploymentCompletedV1,
908
968
  PostAuthenticationLambda: () => PostAuthenticationLambda,
909
969
  PostConfirmationLambda: () => PostConfirmationLambda,
910
970
  PreTokenGenerationLambda: () => PreTokenGenerationLambda,
911
971
  ProvisionDefaultWorkspaceLambda: () => ProvisionDefaultWorkspaceLambda,
912
972
  QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL: () => QMB_EFFECTIVE_DATE_SUB_EXTENSION_URL,
913
973
  QMB_STATUS_VALUE_SUB_EXTENSION_URL: () => QMB_STATUS_VALUE_SUB_EXTENSION_URL,
914
- RENAMABLE_ENTITY_TYPE: () => import_workflows6.RENAMABLE_ENTITY_TYPE,
974
+ RENAMABLE_ENTITY_TYPE: () => import_workflows8.RENAMABLE_ENTITY_TYPE,
915
975
  RENAME_CASCADE_CONSUMER_NAME: () => RENAME_CASCADE_CONSUMER_NAME,
916
976
  RENAME_CASCADE_DEFAULT_CONCURRENCY: () => RENAME_CASCADE_DEFAULT_CONCURRENCY,
917
977
  RENAME_CASCADE_FAILED_THRESHOLD: () => RENAME_CASCADE_FAILED_THRESHOLD,
@@ -3218,9 +3278,129 @@ var _OpenHiGlobalService = class _OpenHiGlobalService extends OpenHiService {
3218
3278
  _OpenHiGlobalService.SERVICE_TYPE = "global";
3219
3279
  var OpenHiGlobalService = _OpenHiGlobalService;
3220
3280
 
3281
+ // src/workflows/control-plane/counter-maintenance/events.ts
3282
+ var import_workflows2 = __toESM(require_lib2());
3283
+ var COUNTER_MAINTENANCE_CONSUMER_NAME = "counter-maintenance";
3284
+ var COUNTER_MAINTENANCE_DETAIL_TYPES = [
3285
+ import_workflows2.ControlPlaneMembershipCreatedV1.detailType,
3286
+ import_workflows2.ControlPlaneMembershipDeletedV1.detailType,
3287
+ import_workflows2.ControlPlaneRoleAssignmentCreatedV1.detailType,
3288
+ import_workflows2.ControlPlaneRoleAssignmentDeletedV1.detailType,
3289
+ import_workflows2.ControlPlaneWorkspaceCreatedV1.detailType,
3290
+ import_workflows2.ControlPlaneWorkspaceDeletedV1.detailType
3291
+ ];
3292
+
3293
+ // src/workflows/control-plane/counter-maintenance/counter-maintenance-lambda.ts
3294
+ var import_node_fs7 = __toESM(require("fs"));
3295
+ var import_node_path7 = __toESM(require("path"));
3296
+ var import_aws_cdk_lib13 = require("aws-cdk-lib");
3297
+ var import_aws_events6 = require("aws-cdk-lib/aws-events");
3298
+ var import_aws_events_targets2 = require("aws-cdk-lib/aws-events-targets");
3299
+ var import_aws_lambda8 = require("aws-cdk-lib/aws-lambda");
3300
+ var import_aws_lambda_nodejs8 = require("aws-cdk-lib/aws-lambda-nodejs");
3301
+ var import_constructs13 = require("constructs");
3302
+ var HANDLER_NAME7 = "counter-maintenance.handler.js";
3303
+ function resolveHandlerEntry7(dirname) {
3304
+ const sameDir = import_node_path7.default.join(dirname, HANDLER_NAME7);
3305
+ if (import_node_fs7.default.existsSync(sameDir)) {
3306
+ return sameDir;
3307
+ }
3308
+ return import_node_path7.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME7);
3309
+ }
3310
+ var CounterMaintenanceLambda = class extends import_constructs13.Construct {
3311
+ constructor(scope, props) {
3312
+ super(scope, "counter-maintenance-lambda");
3313
+ this.lambda = new import_aws_lambda_nodejs8.NodejsFunction(this, "handler", {
3314
+ entry: resolveHandlerEntry7(__dirname),
3315
+ runtime: import_aws_lambda8.Runtime.NODEJS_LATEST,
3316
+ memorySize: 256,
3317
+ timeout: import_aws_cdk_lib13.Duration.minutes(1),
3318
+ environment: {
3319
+ DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
3320
+ }
3321
+ });
3322
+ props.dataStoreTable.grant(this.lambda, "dynamodb:UpdateItem");
3323
+ this.rule = new import_aws_events6.Rule(this, "rule", {
3324
+ eventBus: props.controlEventBus,
3325
+ eventPattern: {
3326
+ source: [import_workflows2.ControlPlaneMembershipCreatedV1.source],
3327
+ detailType: [...COUNTER_MAINTENANCE_DETAIL_TYPES]
3328
+ },
3329
+ targets: [
3330
+ new import_aws_events_targets2.LambdaFunction(this.lambda, {
3331
+ retryAttempts: 2,
3332
+ maxEventAge: import_aws_cdk_lib13.Duration.hours(2)
3333
+ })
3334
+ ]
3335
+ });
3336
+ }
3337
+ };
3338
+
3339
+ // src/workflows/control-plane/counter-maintenance/counter-maintenance-workflow.ts
3340
+ var import_constructs14 = require("constructs");
3341
+ var CounterMaintenanceWorkflow = class extends import_constructs14.Construct {
3342
+ constructor(scope, props) {
3343
+ super(scope, "counter-maintenance-workflow");
3344
+ this.counterMaintenance = new CounterMaintenanceLambda(this, {
3345
+ controlEventBus: props.controlEventBus,
3346
+ dataStoreTable: props.dataStoreTable
3347
+ });
3348
+ WorkflowDedupTable.grantConsumerFromLookup(
3349
+ this,
3350
+ this.counterMaintenance.lambda,
3351
+ COUNTER_MAINTENANCE_CONSUMER_NAME
3352
+ );
3353
+ }
3354
+ };
3355
+
3356
+ // src/workflows/control-plane/counter-reconciliation/counter-reconciliation-lambda.ts
3357
+ var import_node_fs8 = __toESM(require("fs"));
3358
+ var import_node_path8 = __toESM(require("path"));
3359
+ var import_aws_cdk_lib14 = require("aws-cdk-lib");
3360
+ var import_aws_lambda9 = require("aws-cdk-lib/aws-lambda");
3361
+ var import_aws_lambda_nodejs9 = require("aws-cdk-lib/aws-lambda-nodejs");
3362
+ var import_constructs15 = require("constructs");
3363
+ var HANDLER_NAME8 = "counter-reconciliation.handler.js";
3364
+ function resolveHandlerEntry8(dirname) {
3365
+ const sameDir = import_node_path8.default.join(dirname, HANDLER_NAME8);
3366
+ if (import_node_fs8.default.existsSync(sameDir)) {
3367
+ return sameDir;
3368
+ }
3369
+ return import_node_path8.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME8);
3370
+ }
3371
+ var CounterReconciliationLambda = class extends import_constructs15.Construct {
3372
+ constructor(scope, props) {
3373
+ super(scope, "counter-reconciliation-lambda");
3374
+ this.lambda = new import_aws_lambda_nodejs9.NodejsFunction(this, "handler", {
3375
+ entry: resolveHandlerEntry8(__dirname),
3376
+ runtime: import_aws_lambda9.Runtime.NODEJS_LATEST,
3377
+ memorySize: 512,
3378
+ // A full-table sweep over every Tenant / Workspace / User is
3379
+ // heavier than the single-event counter-maintenance consumer, so
3380
+ // the on-demand job gets a longer ceiling.
3381
+ timeout: import_aws_cdk_lib14.Duration.minutes(15),
3382
+ environment: {
3383
+ DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
3384
+ }
3385
+ });
3386
+ props.dataStoreTable.grantReadWriteData(this.lambda);
3387
+ }
3388
+ };
3389
+
3390
+ // src/workflows/control-plane/counter-reconciliation/counter-reconciliation-workflow.ts
3391
+ var import_constructs16 = require("constructs");
3392
+ var CounterReconciliationWorkflow = class extends import_constructs16.Construct {
3393
+ constructor(scope, props) {
3394
+ super(scope, "counter-reconciliation-workflow");
3395
+ this.counterReconciliation = new CounterReconciliationLambda(this, {
3396
+ dataStoreTable: props.dataStoreTable
3397
+ });
3398
+ }
3399
+ };
3400
+
3221
3401
  // src/workflows/control-plane/seed-demo-data/events.ts
3222
3402
  var import_types = require("@openhi/types");
3223
- var import_workflows2 = __toESM(require_lib2());
3403
+ var import_workflows3 = __toESM(require_lib2());
3224
3404
 
3225
3405
  // src/data/operations/control/membership-constraints/platform-scope-tenant-id.ts
3226
3406
  var PLATFORM_SCOPE_TENANT_ID = "platform";
@@ -6975,22 +7155,22 @@ var _validateFixturesAgainstTenantSpecs = () => {
6975
7155
  _validateFixturesAgainstTenantSpecs();
6976
7156
 
6977
7157
  // src/workflows/control-plane/seed-demo-data/seed-demo-data-lambda.ts
6978
- var import_node_fs7 = __toESM(require("fs"));
6979
- var import_node_path7 = __toESM(require("path"));
6980
- var import_aws_cdk_lib13 = require("aws-cdk-lib");
6981
- var import_aws_events6 = require("aws-cdk-lib/aws-events");
6982
- var import_aws_events_targets2 = require("aws-cdk-lib/aws-events-targets");
7158
+ var import_node_fs9 = __toESM(require("fs"));
7159
+ var import_node_path9 = __toESM(require("path"));
7160
+ var import_aws_cdk_lib15 = require("aws-cdk-lib");
7161
+ var import_aws_events7 = require("aws-cdk-lib/aws-events");
7162
+ var import_aws_events_targets3 = require("aws-cdk-lib/aws-events-targets");
6983
7163
  var import_aws_iam3 = require("aws-cdk-lib/aws-iam");
6984
- var import_aws_lambda8 = require("aws-cdk-lib/aws-lambda");
6985
- var import_aws_lambda_nodejs8 = require("aws-cdk-lib/aws-lambda-nodejs");
6986
- var import_constructs13 = require("constructs");
7164
+ var import_aws_lambda10 = require("aws-cdk-lib/aws-lambda");
7165
+ var import_aws_lambda_nodejs10 = require("aws-cdk-lib/aws-lambda-nodejs");
7166
+ var import_constructs17 = require("constructs");
6987
7167
 
6988
7168
  // src/workflows/control-plane/seed-demo-data/seed-demo-data.handler.ts
6989
7169
  var import_client_cognito_identity_provider = require("@aws-sdk/client-cognito-identity-provider");
6990
7170
  var import_client_dynamodb2 = require("@aws-sdk/client-dynamodb");
6991
7171
  var import_client_ssm = require("@aws-sdk/client-ssm");
6992
7172
  var import_types12 = require("@openhi/types");
6993
- var import_workflows3 = __toESM(require_lib2());
7173
+ var import_workflows5 = __toESM(require_lib2());
6994
7174
 
6995
7175
  // src/data/dynamo/dynamo-control-service.ts
6996
7176
  var import_electrodb14 = require("electrodb");
@@ -8436,6 +8616,24 @@ var TenantEntity = new import_electrodb11.Entity({
8436
8616
  type: "string",
8437
8617
  required: true
8438
8618
  },
8619
+ /**
8620
+ * ADR-028 denormalized counter — number of tenant-scoped Memberships
8621
+ * (users) in this tenant. Maintained by the counter-maintenance
8622
+ * consumer via atomic ADD; absent/0 until first event or reconciliation.
8623
+ */
8624
+ usersInTenant: {
8625
+ type: "number",
8626
+ required: false
8627
+ },
8628
+ /**
8629
+ * ADR-028 denormalized counter — number of Workspaces in this tenant.
8630
+ * Maintained by the counter-maintenance consumer via atomic ADD;
8631
+ * absent/0 until first event or reconciliation.
8632
+ */
8633
+ workspacesInTenant: {
8634
+ type: "number",
8635
+ required: false
8636
+ },
8439
8637
  gsi1Shard: gsi1ShardAttribute,
8440
8638
  /** Derived GSI1 sort key — name-based when extractable; else `<lastUpdated>#<id>`. */
8441
8639
  gsi1sk: gsi1skAttribute,
@@ -8540,6 +8738,26 @@ var UserEntity = new import_electrodb12.Entity({
8540
8738
  type: "string",
8541
8739
  required: true
8542
8740
  },
8741
+ /**
8742
+ * ADR-028 denormalized counter — number of tenant-scoped Memberships
8743
+ * (tenants) this user belongs to. Maintained by the
8744
+ * counter-maintenance consumer via atomic ADD; absent/0 until first
8745
+ * event or reconciliation.
8746
+ */
8747
+ tenantsForUser: {
8748
+ type: "number",
8749
+ required: false
8750
+ },
8751
+ /**
8752
+ * ADR-028 denormalized counter — number of workspace-scoped
8753
+ * Memberships (workspaces) this user belongs to. Maintained by the
8754
+ * counter-maintenance consumer via atomic ADD; absent/0 until first
8755
+ * event or reconciliation.
8756
+ */
8757
+ workspacesForUser: {
8758
+ type: "number",
8759
+ required: false
8760
+ },
8543
8761
  gsi1Shard: gsi1ShardAttribute,
8544
8762
  /** Derived GSI1 sort key — name-based when extractable; else `<lastUpdated>#<id>`. */
8545
8763
  gsi1sk: gsi1skAttribute,
@@ -8684,6 +8902,36 @@ var WorkspaceEntity = new import_electrodb13.Entity({
8684
8902
  type: "string",
8685
8903
  required: true
8686
8904
  },
8905
+ /**
8906
+ * ADR-028 denormalized counter — number of workspace-scoped
8907
+ * Memberships (users) in this workspace. Maintained by the
8908
+ * counter-maintenance consumer via atomic ADD; absent/0 until first
8909
+ * event or reconciliation.
8910
+ */
8911
+ usersInWorkspace: {
8912
+ type: "number",
8913
+ required: false
8914
+ },
8915
+ /**
8916
+ * ADR-028 denormalized counter — number of workspace-scoped
8917
+ * RoleAssignments classified as admin-tier in this workspace.
8918
+ * Maintained by the counter-maintenance consumer via atomic ADD;
8919
+ * absent/0 until first event or reconciliation.
8920
+ */
8921
+ adminUsersInWorkspace: {
8922
+ type: "number",
8923
+ required: false
8924
+ },
8925
+ /**
8926
+ * ADR-028 denormalized counter — number of workspace-scoped
8927
+ * RoleAssignments classified as non-admin in this workspace.
8928
+ * Maintained by the counter-maintenance consumer via atomic ADD;
8929
+ * absent/0 until first event or reconciliation.
8930
+ */
8931
+ normalUsersInWorkspace: {
8932
+ type: "number",
8933
+ required: false
8934
+ },
8687
8935
  gsi1Shard: gsi1ShardAttribute,
8688
8936
  /** Derived GSI1 sort key — name-based when extractable; else `<lastUpdated>#<id>`. */
8689
8937
  gsi1sk: gsi1skAttribute,
@@ -8794,6 +9042,10 @@ var import_types3 = require("@openhi/types");
8794
9042
  // src/data/operations/control/membership/membership-workspace-projection.ts
8795
9043
  var import_types4 = require("@openhi/types");
8796
9044
 
9045
+ // src/data/operations/control/control-event-publisher.ts
9046
+ var import_client_eventbridge = require("@aws-sdk/client-eventbridge");
9047
+ var import_workflows4 = __toESM(require_lib2());
9048
+
8797
9049
  // src/data/operations/control/roleassignment/roleassignment-create-operation.ts
8798
9050
  var import_types8 = require("@openhi/types");
8799
9051
 
@@ -9881,22 +10133,22 @@ var import_ulid13 = require("ulid");
9881
10133
  var SEED_DEMO_DATA_USER_POOL_ID_ENV_VAR = "SEED_DEMO_DATA_USER_POOL_ID";
9882
10134
 
9883
10135
  // src/workflows/control-plane/seed-demo-data/seed-demo-data-lambda.ts
9884
- var HANDLER_NAME7 = "seed-demo-data.handler.js";
9885
- function resolveHandlerEntry7(dirname) {
9886
- const sameDir = import_node_path7.default.join(dirname, HANDLER_NAME7);
9887
- if (import_node_fs7.default.existsSync(sameDir)) {
10136
+ var HANDLER_NAME9 = "seed-demo-data.handler.js";
10137
+ function resolveHandlerEntry9(dirname) {
10138
+ const sameDir = import_node_path9.default.join(dirname, HANDLER_NAME9);
10139
+ if (import_node_fs9.default.existsSync(sameDir)) {
9888
10140
  return sameDir;
9889
10141
  }
9890
- return import_node_path7.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME7);
10142
+ return import_node_path9.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME9);
9891
10143
  }
9892
- var SeedDemoDataLambda = class extends import_constructs13.Construct {
10144
+ var SeedDemoDataLambda = class extends import_constructs17.Construct {
9893
10145
  constructor(scope, props) {
9894
10146
  super(scope, "seed-demo-data-lambda");
9895
- this.lambda = new import_aws_lambda_nodejs8.NodejsFunction(this, "handler", {
9896
- entry: resolveHandlerEntry7(__dirname),
9897
- runtime: import_aws_lambda8.Runtime.NODEJS_LATEST,
10147
+ this.lambda = new import_aws_lambda_nodejs10.NodejsFunction(this, "handler", {
10148
+ entry: resolveHandlerEntry9(__dirname),
10149
+ runtime: import_aws_lambda10.Runtime.NODEJS_LATEST,
9898
10150
  memorySize: 512,
9899
- timeout: import_aws_cdk_lib13.Duration.minutes(2),
10151
+ timeout: import_aws_cdk_lib15.Duration.minutes(2),
9900
10152
  environment: {
9901
10153
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName,
9902
10154
  [SEED_DEMO_DATA_USER_POOL_ID_ENV_VAR]: props.userPool.userPoolId
@@ -9925,7 +10177,7 @@ var SeedDemoDataLambda = class extends import_constructs13.Construct {
9925
10177
  "cognito-idp:AdminSetUserPassword"
9926
10178
  ],
9927
10179
  resources: [
9928
- import_aws_cdk_lib13.Stack.of(this).formatArn({
10180
+ import_aws_cdk_lib15.Stack.of(this).formatArn({
9929
10181
  service: "cognito-idp",
9930
10182
  resource: "userpool",
9931
10183
  resourceName: props.userPool.userPoolId
@@ -9938,7 +10190,7 @@ var SeedDemoDataLambda = class extends import_constructs13.Construct {
9938
10190
  effect: import_aws_iam3.Effect.ALLOW,
9939
10191
  actions: ["ssm:GetParameter"],
9940
10192
  resources: [
9941
- import_aws_cdk_lib13.Stack.of(this).formatArn({
10193
+ import_aws_cdk_lib15.Stack.of(this).formatArn({
9942
10194
  service: "ssm",
9943
10195
  resource: "parameter",
9944
10196
  resourceName: "openhi/seed/users/*/password"
@@ -9951,7 +10203,7 @@ var SeedDemoDataLambda = class extends import_constructs13.Construct {
9951
10203
  effect: import_aws_iam3.Effect.ALLOW,
9952
10204
  actions: ["kms:Decrypt"],
9953
10205
  resources: [
9954
- import_aws_cdk_lib13.Stack.of(this).formatArn({
10206
+ import_aws_cdk_lib15.Stack.of(this).formatArn({
9955
10207
  service: "kms",
9956
10208
  resource: "alias",
9957
10209
  resourceName: "aws/ssm"
@@ -9959,16 +10211,16 @@ var SeedDemoDataLambda = class extends import_constructs13.Construct {
9959
10211
  ]
9960
10212
  })
9961
10213
  );
9962
- this.rule = new import_aws_events6.Rule(this, "rule", {
10214
+ this.rule = new import_aws_events7.Rule(this, "rule", {
9963
10215
  eventBus: props.controlEventBus,
9964
10216
  eventPattern: {
9965
- source: [import_workflows2.PlatformSystemDataSeededV1.source],
9966
- detailType: [import_workflows2.PlatformSystemDataSeededV1.detailType]
10217
+ source: [import_workflows3.PlatformSystemDataSeededV1.source],
10218
+ detailType: [import_workflows3.PlatformSystemDataSeededV1.detailType]
9967
10219
  },
9968
10220
  targets: [
9969
- new import_aws_events_targets2.LambdaFunction(this.lambda, {
10221
+ new import_aws_events_targets3.LambdaFunction(this.lambda, {
9970
10222
  retryAttempts: 2,
9971
- maxEventAge: import_aws_cdk_lib13.Duration.hours(2)
10223
+ maxEventAge: import_aws_cdk_lib15.Duration.hours(2)
9972
10224
  })
9973
10225
  ]
9974
10226
  });
@@ -9976,8 +10228,8 @@ var SeedDemoDataLambda = class extends import_constructs13.Construct {
9976
10228
  };
9977
10229
 
9978
10230
  // src/workflows/control-plane/seed-demo-data/seed-demo-data-workflow.ts
9979
- var import_constructs14 = require("constructs");
9980
- var SeedDemoDataWorkflow = class extends import_constructs14.Construct {
10231
+ var import_constructs18 = require("constructs");
10232
+ var SeedDemoDataWorkflow = class extends import_constructs18.Construct {
9981
10233
  constructor(scope, props) {
9982
10234
  super(scope, "seed-demo-data-workflow");
9983
10235
  this.seedDemoData = new SeedDemoDataLambda(this, {
@@ -9994,38 +10246,38 @@ var SeedDemoDataWorkflow = class extends import_constructs14.Construct {
9994
10246
  };
9995
10247
 
9996
10248
  // src/workflows/control-plane/seed-system-data/events.ts
9997
- var import_workflows4 = __toESM(require_lib2());
10249
+ var import_workflows6 = __toESM(require_lib2());
9998
10250
  var SEED_SYSTEM_DATA_CONSUMER_NAME = "seed-system-data";
9999
10251
  var SEED_SYSTEM_DATA_ACTOR_SYSTEM = "seed-system-data";
10000
10252
  var SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR = "CONTROL_EVENT_BUS_NAME";
10001
10253
 
10002
10254
  // src/workflows/control-plane/seed-system-data/seed-system-data-lambda.ts
10003
- var import_node_fs8 = __toESM(require("fs"));
10004
- var import_node_path8 = __toESM(require("path"));
10255
+ var import_node_fs10 = __toESM(require("fs"));
10256
+ var import_node_path10 = __toESM(require("path"));
10005
10257
  var import_types13 = require("@openhi/types");
10006
- var import_aws_cdk_lib14 = require("aws-cdk-lib");
10007
- var import_aws_events7 = require("aws-cdk-lib/aws-events");
10008
- var import_aws_events_targets3 = require("aws-cdk-lib/aws-events-targets");
10258
+ var import_aws_cdk_lib16 = require("aws-cdk-lib");
10259
+ var import_aws_events8 = require("aws-cdk-lib/aws-events");
10260
+ var import_aws_events_targets4 = require("aws-cdk-lib/aws-events-targets");
10009
10261
  var import_aws_iam4 = require("aws-cdk-lib/aws-iam");
10010
- var import_aws_lambda9 = require("aws-cdk-lib/aws-lambda");
10011
- var import_aws_lambda_nodejs9 = require("aws-cdk-lib/aws-lambda-nodejs");
10012
- var import_constructs15 = require("constructs");
10013
- var HANDLER_NAME8 = "seed-system-data.handler.js";
10014
- function resolveHandlerEntry8(dirname) {
10015
- const sameDir = import_node_path8.default.join(dirname, HANDLER_NAME8);
10016
- if (import_node_fs8.default.existsSync(sameDir)) {
10262
+ var import_aws_lambda11 = require("aws-cdk-lib/aws-lambda");
10263
+ var import_aws_lambda_nodejs11 = require("aws-cdk-lib/aws-lambda-nodejs");
10264
+ var import_constructs19 = require("constructs");
10265
+ var HANDLER_NAME10 = "seed-system-data.handler.js";
10266
+ function resolveHandlerEntry10(dirname) {
10267
+ const sameDir = import_node_path10.default.join(dirname, HANDLER_NAME10);
10268
+ if (import_node_fs10.default.existsSync(sameDir)) {
10017
10269
  return sameDir;
10018
10270
  }
10019
- return import_node_path8.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME8);
10271
+ return import_node_path10.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME10);
10020
10272
  }
10021
- var SeedSystemDataLambda = class extends import_constructs15.Construct {
10273
+ var SeedSystemDataLambda = class extends import_constructs19.Construct {
10022
10274
  constructor(scope, props) {
10023
10275
  super(scope, "seed-system-data-lambda");
10024
- this.lambda = new import_aws_lambda_nodejs9.NodejsFunction(this, "handler", {
10025
- entry: resolveHandlerEntry8(__dirname),
10026
- runtime: import_aws_lambda9.Runtime.NODEJS_LATEST,
10276
+ this.lambda = new import_aws_lambda_nodejs11.NodejsFunction(this, "handler", {
10277
+ entry: resolveHandlerEntry10(__dirname),
10278
+ runtime: import_aws_lambda11.Runtime.NODEJS_LATEST,
10027
10279
  memorySize: 512,
10028
- timeout: import_aws_cdk_lib14.Duration.minutes(1),
10280
+ timeout: import_aws_cdk_lib16.Duration.minutes(1),
10029
10281
  environment: {
10030
10282
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName,
10031
10283
  [SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR]: props.controlEventBus.eventBusName
@@ -10047,12 +10299,12 @@ var SeedSystemDataLambda = class extends import_constructs15.Construct {
10047
10299
  })
10048
10300
  );
10049
10301
  props.controlEventBus.grantPutEventsTo(this.lambda);
10050
- const hostStackName = import_aws_cdk_lib14.Stack.of(this).stackName;
10051
- this.rule = new import_aws_events7.Rule(this, "rule", {
10302
+ const hostStackName = import_aws_cdk_lib16.Stack.of(this).stackName;
10303
+ this.rule = new import_aws_events8.Rule(this, "rule", {
10052
10304
  eventBus: props.controlEventBus,
10053
10305
  eventPattern: {
10054
- source: [import_workflows4.PlatformDeploymentCompletedV1.source],
10055
- detailType: [import_workflows4.PlatformDeploymentCompletedV1.detailType],
10306
+ source: [import_workflows6.PlatformDeploymentCompletedV1.source],
10307
+ detailType: [import_workflows6.PlatformDeploymentCompletedV1.detailType],
10056
10308
  detail: {
10057
10309
  payload: {
10058
10310
  stackName: [hostStackName]
@@ -10060,9 +10312,9 @@ var SeedSystemDataLambda = class extends import_constructs15.Construct {
10060
10312
  }
10061
10313
  },
10062
10314
  targets: [
10063
- new import_aws_events_targets3.LambdaFunction(this.lambda, {
10315
+ new import_aws_events_targets4.LambdaFunction(this.lambda, {
10064
10316
  retryAttempts: 2,
10065
- maxEventAge: import_aws_cdk_lib14.Duration.hours(2)
10317
+ maxEventAge: import_aws_cdk_lib16.Duration.hours(2)
10066
10318
  })
10067
10319
  ]
10068
10320
  });
@@ -10070,8 +10322,8 @@ var SeedSystemDataLambda = class extends import_constructs15.Construct {
10070
10322
  };
10071
10323
 
10072
10324
  // src/workflows/control-plane/seed-system-data/seed-system-data-workflow.ts
10073
- var import_constructs16 = require("constructs");
10074
- var SeedSystemDataWorkflow = class extends import_constructs16.Construct {
10325
+ var import_constructs20 = require("constructs");
10326
+ var SeedSystemDataWorkflow = class extends import_constructs20.Construct {
10075
10327
  constructor(scope, props) {
10076
10328
  super(scope, "seed-system-data-workflow");
10077
10329
  this.seedSystemData = new SeedSystemDataLambda(this, {
@@ -10138,6 +10390,8 @@ var _OpenHiDataService = class _OpenHiDataService extends OpenHiService {
10138
10390
  );
10139
10391
  this.seedSystemDataWorkflow = this.createSeedSystemDataWorkflow();
10140
10392
  this.seedDemoDataWorkflow = this.createSeedDemoDataWorkflow();
10393
+ this.counterMaintenanceWorkflow = this.createCounterMaintenanceWorkflow();
10394
+ this.counterReconciliationWorkflow = this.createCounterReconciliationWorkflow();
10141
10395
  }
10142
10396
  /**
10143
10397
  * Returns the data store table by name. Use from other stacks (e.g. REST API Lambda) to obtain an ITable reference.
@@ -10184,6 +10438,28 @@ var _OpenHiDataService = class _OpenHiDataService extends OpenHiService {
10184
10438
  userPool: OpenHiAuthService.userPoolFromConstruct(this)
10185
10439
  });
10186
10440
  }
10441
+ /**
10442
+ * Creates the ADR-028 counter-maintenance workflow. Override to
10443
+ * customize. Mounted on every stage — the denormalized counters back
10444
+ * the admin console list columns in prod and non-prod alike.
10445
+ */
10446
+ createCounterMaintenanceWorkflow() {
10447
+ return new CounterMaintenanceWorkflow(this, {
10448
+ controlEventBus: this.controlEventBus(),
10449
+ dataStoreTable: this.dataStore
10450
+ });
10451
+ }
10452
+ /**
10453
+ * Creates the ADR-028 counter-reconciliation job (#1319). Override to
10454
+ * customize. Mounted on every stage — the recompute-and-repair backstop
10455
+ * is the correctness authority for the denormalized counters in prod
10456
+ * and non-prod alike. On-demand only (no EventBridge trigger).
10457
+ */
10458
+ createCounterReconciliationWorkflow() {
10459
+ return new CounterReconciliationWorkflow(this, {
10460
+ dataStoreTable: this.dataStore
10461
+ });
10462
+ }
10187
10463
  /**
10188
10464
  * Creates the single-table DynamoDB data store.
10189
10465
  * Override to customize.
@@ -10200,7 +10476,7 @@ var OpenHiDataService = _OpenHiDataService;
10200
10476
 
10201
10477
  // src/services/open-hi-website-service.ts
10202
10478
  var import_config6 = __toESM(require_lib());
10203
- var import_aws_cdk_lib15 = require("aws-cdk-lib");
10479
+ var import_aws_cdk_lib17 = require("aws-cdk-lib");
10204
10480
  var import_aws_s32 = require("aws-cdk-lib/aws-s3");
10205
10481
 
10206
10482
  // src/services/open-hi-rest-api-service.ts
@@ -10208,59 +10484,60 @@ var import_config5 = __toESM(require_lib());
10208
10484
  var import_aws_apigatewayv22 = require("aws-cdk-lib/aws-apigatewayv2");
10209
10485
  var import_aws_apigatewayv2_authorizers = require("aws-cdk-lib/aws-apigatewayv2-authorizers");
10210
10486
  var import_aws_apigatewayv2_integrations = require("aws-cdk-lib/aws-apigatewayv2-integrations");
10487
+ var import_aws_events9 = require("aws-cdk-lib/aws-events");
10211
10488
  var import_aws_iam5 = require("aws-cdk-lib/aws-iam");
10212
10489
  var import_aws_route535 = require("aws-cdk-lib/aws-route53");
10213
10490
  var import_aws_route53_targets3 = require("aws-cdk-lib/aws-route53-targets");
10214
10491
  var import_core = require("aws-cdk-lib/core");
10215
- var import_constructs19 = require("constructs");
10492
+ var import_constructs23 = require("constructs");
10216
10493
 
10217
10494
  // src/data/lambda/cors-options-lambda.ts
10218
- var import_node_fs9 = __toESM(require("fs"));
10219
- var import_node_path9 = __toESM(require("path"));
10220
- var import_aws_lambda10 = require("aws-cdk-lib/aws-lambda");
10221
- var import_aws_lambda_nodejs10 = require("aws-cdk-lib/aws-lambda-nodejs");
10222
- var import_constructs17 = require("constructs");
10223
- var HANDLER_NAME9 = "cors-options-lambda.handler.js";
10224
- function resolveHandlerEntry9(dirname) {
10225
- const sameDir = import_node_path9.default.join(dirname, HANDLER_NAME9);
10226
- if (import_node_fs9.default.existsSync(sameDir)) {
10495
+ var import_node_fs11 = __toESM(require("fs"));
10496
+ var import_node_path11 = __toESM(require("path"));
10497
+ var import_aws_lambda12 = require("aws-cdk-lib/aws-lambda");
10498
+ var import_aws_lambda_nodejs12 = require("aws-cdk-lib/aws-lambda-nodejs");
10499
+ var import_constructs21 = require("constructs");
10500
+ var HANDLER_NAME11 = "cors-options-lambda.handler.js";
10501
+ function resolveHandlerEntry11(dirname) {
10502
+ const sameDir = import_node_path11.default.join(dirname, HANDLER_NAME11);
10503
+ if (import_node_fs11.default.existsSync(sameDir)) {
10227
10504
  return sameDir;
10228
10505
  }
10229
- const fromLib = import_node_path9.default.join(dirname, "..", "..", "..", "lib", HANDLER_NAME9);
10506
+ const fromLib = import_node_path11.default.join(dirname, "..", "..", "..", "lib", HANDLER_NAME11);
10230
10507
  return fromLib;
10231
10508
  }
10232
- var CorsOptionsLambda = class extends import_constructs17.Construct {
10509
+ var CorsOptionsLambda = class extends import_constructs21.Construct {
10233
10510
  constructor(scope, id = "cors-options-lambda") {
10234
10511
  super(scope, id);
10235
- this.lambda = new import_aws_lambda_nodejs10.NodejsFunction(this, "handler", {
10236
- entry: resolveHandlerEntry9(__dirname),
10237
- runtime: import_aws_lambda10.Runtime.NODEJS_LATEST,
10512
+ this.lambda = new import_aws_lambda_nodejs12.NodejsFunction(this, "handler", {
10513
+ entry: resolveHandlerEntry11(__dirname),
10514
+ runtime: import_aws_lambda12.Runtime.NODEJS_LATEST,
10238
10515
  memorySize: 128
10239
10516
  });
10240
10517
  }
10241
10518
  };
10242
10519
 
10243
10520
  // src/data/lambda/rest-api-lambda.ts
10244
- var import_node_fs10 = __toESM(require("fs"));
10245
- var import_node_path10 = __toESM(require("path"));
10246
- var import_aws_lambda11 = require("aws-cdk-lib/aws-lambda");
10247
- var import_aws_lambda_nodejs11 = require("aws-cdk-lib/aws-lambda-nodejs");
10248
- var import_constructs18 = require("constructs");
10249
- var HANDLER_NAME10 = "rest-api-lambda.handler.js";
10250
- function resolveHandlerEntry10(dirname) {
10251
- const sameDir = import_node_path10.default.join(dirname, HANDLER_NAME10);
10252
- if (import_node_fs10.default.existsSync(sameDir)) {
10521
+ var import_node_fs12 = __toESM(require("fs"));
10522
+ var import_node_path12 = __toESM(require("path"));
10523
+ var import_aws_lambda13 = require("aws-cdk-lib/aws-lambda");
10524
+ var import_aws_lambda_nodejs13 = require("aws-cdk-lib/aws-lambda-nodejs");
10525
+ var import_constructs22 = require("constructs");
10526
+ var HANDLER_NAME12 = "rest-api-lambda.handler.js";
10527
+ function resolveHandlerEntry12(dirname) {
10528
+ const sameDir = import_node_path12.default.join(dirname, HANDLER_NAME12);
10529
+ if (import_node_fs12.default.existsSync(sameDir)) {
10253
10530
  return sameDir;
10254
10531
  }
10255
- const fromLib = import_node_path10.default.join(dirname, "..", "..", "..", "lib", HANDLER_NAME10);
10532
+ const fromLib = import_node_path12.default.join(dirname, "..", "..", "..", "lib", HANDLER_NAME12);
10256
10533
  return fromLib;
10257
10534
  }
10258
- var RestApiLambda = class extends import_constructs18.Construct {
10535
+ var RestApiLambda = class extends import_constructs22.Construct {
10259
10536
  constructor(scope, props) {
10260
10537
  super(scope, "rest-api-lambda");
10261
- this.lambda = new import_aws_lambda_nodejs11.NodejsFunction(this, "handler", {
10262
- entry: resolveHandlerEntry10(__dirname),
10263
- runtime: import_aws_lambda11.Runtime.NODEJS_LATEST,
10538
+ this.lambda = new import_aws_lambda_nodejs13.NodejsFunction(this, "handler", {
10539
+ entry: resolveHandlerEntry12(__dirname),
10540
+ runtime: import_aws_lambda13.Runtime.NODEJS_LATEST,
10264
10541
  memorySize: 1024,
10265
10542
  environment: {
10266
10543
  DYNAMO_TABLE_NAME: props.dynamoTableName,
@@ -10270,6 +10547,7 @@ var RestApiLambda = class extends import_constructs18.Construct {
10270
10547
  OPENHI_PG_SECRET_ARN: props.postgresSecretArn,
10271
10548
  OPENHI_PG_DATABASE: props.postgresDatabase,
10272
10549
  OPENHI_PG_SCHEMA: props.postgresSchema,
10550
+ CONTROL_EVENT_BUS_NAME: props.controlEventBusName,
10273
10551
  ...props.extraEnvironment
10274
10552
  },
10275
10553
  bundling: {
@@ -10453,6 +10731,7 @@ var _OpenHiRestApiService = class _OpenHiRestApiService extends OpenHiService {
10453
10731
  const postgresDatabase = DataStorePostgresReplica.databaseNameFromConstruct(this);
10454
10732
  const postgresSchema = getPostgresReplicaSchemaName(this.branchHash);
10455
10733
  const extraEnvironment = this.resolveRuntimeConfigEnvVars();
10734
+ const controlEventBusName = ControlEventBus.getEventBusName(this);
10456
10735
  const { lambda } = new RestApiLambda(this, {
10457
10736
  dynamoTableName: dataStoreTable.tableName,
10458
10737
  branchTagValue: this.branchName,
@@ -10461,8 +10740,14 @@ var _OpenHiRestApiService = class _OpenHiRestApiService extends OpenHiService {
10461
10740
  postgresSecretArn,
10462
10741
  postgresDatabase,
10463
10742
  postgresSchema,
10743
+ controlEventBusName,
10464
10744
  extraEnvironment
10465
10745
  });
10746
+ import_aws_events9.EventBus.fromEventBusName(
10747
+ this,
10748
+ "control-event-bus-ref",
10749
+ controlEventBusName
10750
+ ).grantPutEventsTo(lambda);
10466
10751
  lambda.addToRolePolicy(
10467
10752
  new import_aws_iam5.PolicyStatement({
10468
10753
  effect: import_aws_iam5.Effect.ALLOW,
@@ -10678,7 +10963,7 @@ var _OpenHiRestApiService = class _OpenHiRestApiService extends OpenHiService {
10678
10963
  * client-side from `window.location.origin`.
10679
10964
  */
10680
10965
  resolveRuntimeConfigEnvVars() {
10681
- const cognitoScope = new import_constructs19.Construct(this, "runtime-config");
10966
+ const cognitoScope = new import_constructs23.Construct(this, "runtime-config");
10682
10967
  const userPool = OpenHiAuthService.userPoolFromConstruct(cognitoScope);
10683
10968
  const userPoolClient = OpenHiAuthService.userPoolClientFromConstruct(cognitoScope);
10684
10969
  const cognitoDomainUrl = OpenHiAuthService.userPoolDomainBaseUrlFromConstruct(cognitoScope);
@@ -10928,7 +11213,7 @@ var _OpenHiWebsiteService = class _OpenHiWebsiteService extends OpenHiService {
10928
11213
  * literal key stable across synths.
10929
11214
  */
10930
11215
  createAdminConsoleEndpointOutput() {
10931
- const output = new import_aws_cdk_lib15.CfnOutput(this, "admin-console-endpoint-output", {
11216
+ const output = new import_aws_cdk_lib17.CfnOutput(this, "admin-console-endpoint-output", {
10932
11217
  value: `https://${this.fullDomain}`,
10933
11218
  description: "Admin console endpoint for this deploy (https://<fullDomain>). Surfaced by the deploy workflow's sticky PR comment and job summary."
10934
11219
  });
@@ -11039,29 +11324,29 @@ var buildProvisionDefaultWorkspaceRequestedDetail = (event) => {
11039
11324
  };
11040
11325
 
11041
11326
  // src/workflows/control-plane/user-onboarding/provision-default-workspace-lambda.ts
11042
- var import_node_fs11 = __toESM(require("fs"));
11043
- var import_node_path11 = __toESM(require("path"));
11044
- var import_aws_cdk_lib16 = require("aws-cdk-lib");
11045
- var import_aws_events8 = require("aws-cdk-lib/aws-events");
11046
- var import_aws_events_targets4 = require("aws-cdk-lib/aws-events-targets");
11327
+ var import_node_fs13 = __toESM(require("fs"));
11328
+ var import_node_path13 = __toESM(require("path"));
11329
+ var import_aws_cdk_lib18 = require("aws-cdk-lib");
11330
+ var import_aws_events10 = require("aws-cdk-lib/aws-events");
11331
+ var import_aws_events_targets5 = require("aws-cdk-lib/aws-events-targets");
11047
11332
  var import_aws_iam6 = require("aws-cdk-lib/aws-iam");
11048
- var import_aws_lambda12 = require("aws-cdk-lib/aws-lambda");
11049
- var import_aws_lambda_nodejs12 = require("aws-cdk-lib/aws-lambda-nodejs");
11050
- var import_constructs20 = require("constructs");
11051
- var HANDLER_NAME11 = "provision-default-workspace.handler.js";
11052
- function resolveHandlerEntry11(dirname) {
11053
- const sameDir = import_node_path11.default.join(dirname, HANDLER_NAME11);
11054
- if (import_node_fs11.default.existsSync(sameDir)) {
11333
+ var import_aws_lambda14 = require("aws-cdk-lib/aws-lambda");
11334
+ var import_aws_lambda_nodejs14 = require("aws-cdk-lib/aws-lambda-nodejs");
11335
+ var import_constructs24 = require("constructs");
11336
+ var HANDLER_NAME13 = "provision-default-workspace.handler.js";
11337
+ function resolveHandlerEntry13(dirname) {
11338
+ const sameDir = import_node_path13.default.join(dirname, HANDLER_NAME13);
11339
+ if (import_node_fs13.default.existsSync(sameDir)) {
11055
11340
  return sameDir;
11056
11341
  }
11057
- return import_node_path11.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME11);
11342
+ return import_node_path13.default.join(dirname, "..", "..", "..", "..", "lib", HANDLER_NAME13);
11058
11343
  }
11059
- var ProvisionDefaultWorkspaceLambda = class extends import_constructs20.Construct {
11344
+ var ProvisionDefaultWorkspaceLambda = class extends import_constructs24.Construct {
11060
11345
  constructor(scope, props) {
11061
11346
  super(scope, "provision-default-workspace-lambda");
11062
- this.lambda = new import_aws_lambda_nodejs12.NodejsFunction(this, "handler", {
11063
- entry: resolveHandlerEntry11(__dirname),
11064
- runtime: import_aws_lambda12.Runtime.NODEJS_LATEST,
11347
+ this.lambda = new import_aws_lambda_nodejs14.NodejsFunction(this, "handler", {
11348
+ entry: resolveHandlerEntry13(__dirname),
11349
+ runtime: import_aws_lambda14.Runtime.NODEJS_LATEST,
11065
11350
  memorySize: 1024,
11066
11351
  environment: {
11067
11352
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
@@ -11079,16 +11364,16 @@ var ProvisionDefaultWorkspaceLambda = class extends import_constructs20.Construc
11079
11364
  resources: [`${props.dataStoreTable.tableArn}/index/*`]
11080
11365
  })
11081
11366
  );
11082
- this.rule = new import_aws_events8.Rule(this, "rule", {
11367
+ this.rule = new import_aws_events10.Rule(this, "rule", {
11083
11368
  eventBus: props.controlEventBus,
11084
11369
  eventPattern: {
11085
11370
  source: [USER_ONBOARDING_EVENT_SOURCE],
11086
11371
  detailType: [PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE]
11087
11372
  },
11088
11373
  targets: [
11089
- new import_aws_events_targets4.LambdaFunction(this.lambda, {
11374
+ new import_aws_events_targets5.LambdaFunction(this.lambda, {
11090
11375
  retryAttempts: 2,
11091
- maxEventAge: import_aws_cdk_lib16.Duration.hours(2)
11376
+ maxEventAge: import_aws_cdk_lib18.Duration.hours(2)
11092
11377
  })
11093
11378
  ]
11094
11379
  });
@@ -11096,8 +11381,8 @@ var ProvisionDefaultWorkspaceLambda = class extends import_constructs20.Construc
11096
11381
  };
11097
11382
 
11098
11383
  // src/workflows/control-plane/user-onboarding/user-onboarding-workflow.ts
11099
- var import_constructs21 = require("constructs");
11100
- var UserOnboardingWorkflow = class extends import_constructs21.Construct {
11384
+ var import_constructs25 = require("constructs");
11385
+ var UserOnboardingWorkflow = class extends import_constructs25.Construct {
11101
11386
  constructor(scope, props) {
11102
11387
  super(scope, "user-onboarding-workflow");
11103
11388
  this.provisionDefaultWorkspace = new ProvisionDefaultWorkspaceLambda(this, {
@@ -11518,54 +11803,54 @@ _OpenHiGraphqlService.SERVICE_TYPE = "graphql-api";
11518
11803
  var OpenHiGraphqlService = _OpenHiGraphqlService;
11519
11804
 
11520
11805
  // src/workflows/control-plane/owning-delete-cascade/events.ts
11521
- var import_workflows5 = __toESM(require_lib2());
11806
+ var import_workflows7 = __toESM(require_lib2());
11522
11807
  var OWNING_DELETE_CASCADE_CONSUMER_NAME = "owning-delete-cascade";
11523
11808
  var OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY = 8;
11524
11809
  var OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES = 15;
11525
11810
  var OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR = "OWNING_DELETE_OPS_EVENT_BUS_NAME";
11526
11811
 
11527
11812
  // src/workflows/control-plane/owning-delete-cascade/owning-delete-cascade-lambdas.ts
11528
- var import_node_fs12 = __toESM(require("fs"));
11529
- var import_node_path12 = __toESM(require("path"));
11530
- var import_aws_cdk_lib17 = require("aws-cdk-lib");
11813
+ var import_node_fs14 = __toESM(require("fs"));
11814
+ var import_node_path14 = __toESM(require("path"));
11815
+ var import_aws_cdk_lib19 = require("aws-cdk-lib");
11531
11816
  var import_aws_iam8 = require("aws-cdk-lib/aws-iam");
11532
- var import_aws_lambda13 = require("aws-cdk-lib/aws-lambda");
11533
- var import_aws_lambda_nodejs13 = require("aws-cdk-lib/aws-lambda-nodejs");
11534
- var import_constructs22 = require("constructs");
11535
- function resolveHandlerEntry12(dirname, handlerName) {
11536
- const sameDir = import_node_path12.default.join(dirname, handlerName);
11537
- if (import_node_fs12.default.existsSync(sameDir)) {
11817
+ var import_aws_lambda15 = require("aws-cdk-lib/aws-lambda");
11818
+ var import_aws_lambda_nodejs15 = require("aws-cdk-lib/aws-lambda-nodejs");
11819
+ var import_constructs26 = require("constructs");
11820
+ function resolveHandlerEntry14(dirname, handlerName) {
11821
+ const sameDir = import_node_path14.default.join(dirname, handlerName);
11822
+ if (import_node_fs14.default.existsSync(sameDir)) {
11538
11823
  return { entry: sameDir, handler: "handler" };
11539
11824
  }
11540
- const libDir = import_node_path12.default.join(dirname, "..", "..", "..", "..", "lib", handlerName);
11825
+ const libDir = import_node_path14.default.join(dirname, "..", "..", "..", "..", "lib", handlerName);
11541
11826
  return { entry: libDir, handler: "handler" };
11542
11827
  }
11543
- var OwningDeleteCascadeLambdas = class extends import_constructs22.Construct {
11828
+ var OwningDeleteCascadeLambdas = class extends import_constructs26.Construct {
11544
11829
  constructor(scope, props) {
11545
11830
  super(scope, "owning-delete-cascade-lambdas");
11546
- const listResolved = resolveHandlerEntry12(
11831
+ const listResolved = resolveHandlerEntry14(
11547
11832
  __dirname,
11548
11833
  "list-chunks.handler.js"
11549
11834
  );
11550
- this.listChunks = new import_aws_lambda_nodejs13.NodejsFunction(this, "list-chunks-handler", {
11835
+ this.listChunks = new import_aws_lambda_nodejs15.NodejsFunction(this, "list-chunks-handler", {
11551
11836
  entry: listResolved.entry,
11552
- runtime: import_aws_lambda13.Runtime.NODEJS_LATEST,
11837
+ runtime: import_aws_lambda15.Runtime.NODEJS_LATEST,
11553
11838
  memorySize: 512,
11554
- timeout: import_aws_cdk_lib17.Duration.minutes(1),
11839
+ timeout: import_aws_cdk_lib19.Duration.minutes(1),
11555
11840
  environment: {
11556
11841
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
11557
11842
  }
11558
11843
  });
11559
11844
  props.dataStoreTable.grant(this.listChunks, "dynamodb:Query");
11560
- const deleteResolved = resolveHandlerEntry12(
11845
+ const deleteResolved = resolveHandlerEntry14(
11561
11846
  __dirname,
11562
11847
  "delete-chunk.handler.js"
11563
11848
  );
11564
- this.deleteChunk = new import_aws_lambda_nodejs13.NodejsFunction(this, "delete-chunk-handler", {
11849
+ this.deleteChunk = new import_aws_lambda_nodejs15.NodejsFunction(this, "delete-chunk-handler", {
11565
11850
  entry: deleteResolved.entry,
11566
- runtime: import_aws_lambda13.Runtime.NODEJS_LATEST,
11851
+ runtime: import_aws_lambda15.Runtime.NODEJS_LATEST,
11567
11852
  memorySize: 512,
11568
- timeout: import_aws_cdk_lib17.Duration.minutes(1),
11853
+ timeout: import_aws_cdk_lib19.Duration.minutes(1),
11569
11854
  environment: {
11570
11855
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
11571
11856
  }
@@ -11576,15 +11861,15 @@ var OwningDeleteCascadeLambdas = class extends import_constructs22.Construct {
11576
11861
  "dynamodb:UpdateItem",
11577
11862
  "dynamodb:PutItem"
11578
11863
  );
11579
- const finalizeResolved = resolveHandlerEntry12(
11864
+ const finalizeResolved = resolveHandlerEntry14(
11580
11865
  __dirname,
11581
11866
  "finalize.handler.js"
11582
11867
  );
11583
- this.finalize = new import_aws_lambda_nodejs13.NodejsFunction(this, "finalize-handler", {
11868
+ this.finalize = new import_aws_lambda_nodejs15.NodejsFunction(this, "finalize-handler", {
11584
11869
  entry: finalizeResolved.entry,
11585
- runtime: import_aws_lambda13.Runtime.NODEJS_LATEST,
11870
+ runtime: import_aws_lambda15.Runtime.NODEJS_LATEST,
11586
11871
  memorySize: 512,
11587
- timeout: import_aws_cdk_lib17.Duration.minutes(1),
11872
+ timeout: import_aws_cdk_lib19.Duration.minutes(1),
11588
11873
  environment: {
11589
11874
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName,
11590
11875
  [OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR]: props.opsEventBus.eventBusName
@@ -11602,13 +11887,13 @@ var OwningDeleteCascadeLambdas = class extends import_constructs22.Construct {
11602
11887
  };
11603
11888
 
11604
11889
  // src/workflows/control-plane/owning-delete-cascade/owning-delete-cascade-workflow.ts
11605
- var import_aws_cdk_lib18 = require("aws-cdk-lib");
11606
- var import_aws_events9 = require("aws-cdk-lib/aws-events");
11607
- var import_aws_events_targets5 = require("aws-cdk-lib/aws-events-targets");
11890
+ var import_aws_cdk_lib20 = require("aws-cdk-lib");
11891
+ var import_aws_events11 = require("aws-cdk-lib/aws-events");
11892
+ var import_aws_events_targets6 = require("aws-cdk-lib/aws-events-targets");
11608
11893
  var import_aws_stepfunctions = require("aws-cdk-lib/aws-stepfunctions");
11609
11894
  var import_aws_stepfunctions_tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
11610
- var import_constructs23 = require("constructs");
11611
- var OwningDeleteCascadeWorkflow = class extends import_constructs23.Construct {
11895
+ var import_constructs27 = require("constructs");
11896
+ var OwningDeleteCascadeWorkflow = class extends import_constructs27.Construct {
11612
11897
  constructor(scope, props) {
11613
11898
  super(scope, "owning-delete-cascade-workflow");
11614
11899
  this.lambdas = new OwningDeleteCascadeLambdas(this, {
@@ -11717,7 +12002,7 @@ var OwningDeleteCascadeWorkflow = class extends import_constructs23.Construct {
11717
12002
  }
11718
12003
  });
11719
12004
  const interPageWait = new import_aws_stepfunctions.Wait(this, "inter-page-wait", {
11720
- time: import_aws_stepfunctions.WaitTime.duration(import_aws_cdk_lib18.Duration.seconds(0))
12005
+ time: import_aws_stepfunctions.WaitTime.duration(import_aws_cdk_lib20.Duration.seconds(0))
11721
12006
  });
11722
12007
  const isExhausted = new import_aws_stepfunctions.Choice(this, "is-exhausted");
11723
12008
  const finalize = new import_aws_stepfunctions_tasks.LambdaInvoke(this, "finalize", {
@@ -11748,18 +12033,18 @@ var OwningDeleteCascadeWorkflow = class extends import_constructs23.Construct {
11748
12033
  // Long timeout because real-world cascades can run minutes when
11749
12034
  // a workspace has thousands of members. The stuck-cascade alarm
11750
12035
  // fires at 15 minutes; the state machine itself does not abort.
11751
- timeout: import_aws_cdk_lib18.Duration.hours(2)
12036
+ timeout: import_aws_cdk_lib20.Duration.hours(2)
11752
12037
  });
11753
- this.rule = new import_aws_events9.Rule(this, "rule", {
12038
+ this.rule = new import_aws_events11.Rule(this, "rule", {
11754
12039
  eventBus: props.dataEventBus,
11755
12040
  eventPattern: {
11756
- source: [import_workflows5.OPENHI_DATA_SOURCE],
11757
- detailType: [import_workflows5.ControlPlaneOwningDeleteV1.detailType]
12041
+ source: [import_workflows7.OPENHI_DATA_SOURCE],
12042
+ detailType: [import_workflows7.ControlPlaneOwningDeleteV1.detailType]
11758
12043
  },
11759
12044
  targets: [
11760
- new import_aws_events_targets5.SfnStateMachine(this.stateMachine, {
12045
+ new import_aws_events_targets6.SfnStateMachine(this.stateMachine, {
11761
12046
  retryAttempts: 2,
11762
- maxEventAge: import_aws_cdk_lib18.Duration.hours(2)
12047
+ maxEventAge: import_aws_cdk_lib20.Duration.hours(2)
11763
12048
  })
11764
12049
  ]
11765
12050
  });
@@ -11767,7 +12052,7 @@ var OwningDeleteCascadeWorkflow = class extends import_constructs23.Construct {
11767
12052
  };
11768
12053
 
11769
12054
  // src/workflows/control-plane/rename-cascade/events.ts
11770
- var import_workflows6 = __toESM(require_lib2());
12055
+ var import_workflows8 = __toESM(require_lib2());
11771
12056
  var RENAME_CASCADE_CONSUMER_NAME = "rename-cascade";
11772
12057
  var RENAME_CASCADE_DEFAULT_CONCURRENCY = 10;
11773
12058
  var RENAME_CASCADE_FAILED_THRESHOLD = 0;
@@ -11775,47 +12060,47 @@ var RENAME_CASCADE_SLOW_THRESHOLD_SECONDS = 300;
11775
12060
  var RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR = "RENAME_CASCADE_OPS_EVENT_BUS_NAME";
11776
12061
 
11777
12062
  // src/workflows/control-plane/rename-cascade/rename-cascade-lambdas.ts
11778
- var import_node_fs13 = __toESM(require("fs"));
11779
- var import_node_path13 = __toESM(require("path"));
11780
- var import_aws_cdk_lib19 = require("aws-cdk-lib");
12063
+ var import_node_fs15 = __toESM(require("fs"));
12064
+ var import_node_path15 = __toESM(require("path"));
12065
+ var import_aws_cdk_lib21 = require("aws-cdk-lib");
11781
12066
  var import_aws_iam9 = require("aws-cdk-lib/aws-iam");
11782
- var import_aws_lambda14 = require("aws-cdk-lib/aws-lambda");
11783
- var import_aws_lambda_nodejs14 = require("aws-cdk-lib/aws-lambda-nodejs");
11784
- var import_constructs24 = require("constructs");
11785
- function resolveHandlerEntry13(dirname, handlerName) {
11786
- const sameDir = import_node_path13.default.join(dirname, handlerName);
11787
- if (import_node_fs13.default.existsSync(sameDir)) {
12067
+ var import_aws_lambda16 = require("aws-cdk-lib/aws-lambda");
12068
+ var import_aws_lambda_nodejs16 = require("aws-cdk-lib/aws-lambda-nodejs");
12069
+ var import_constructs28 = require("constructs");
12070
+ function resolveHandlerEntry15(dirname, handlerName) {
12071
+ const sameDir = import_node_path15.default.join(dirname, handlerName);
12072
+ if (import_node_fs15.default.existsSync(sameDir)) {
11788
12073
  return { entry: sameDir, handler: "handler" };
11789
12074
  }
11790
- const libDir = import_node_path13.default.join(dirname, "..", "..", "..", "..", "lib", handlerName);
12075
+ const libDir = import_node_path15.default.join(dirname, "..", "..", "..", "..", "lib", handlerName);
11791
12076
  return { entry: libDir, handler: "handler" };
11792
12077
  }
11793
- var RenameCascadeLambdas = class extends import_constructs24.Construct {
12078
+ var RenameCascadeLambdas = class extends import_constructs28.Construct {
11794
12079
  constructor(scope, props) {
11795
12080
  super(scope, "rename-cascade-lambdas");
11796
- const listResolved = resolveHandlerEntry13(
12081
+ const listResolved = resolveHandlerEntry15(
11797
12082
  __dirname,
11798
12083
  "rename-list-targets.handler.js"
11799
12084
  );
11800
- this.listTargets = new import_aws_lambda_nodejs14.NodejsFunction(this, "list-targets-handler", {
12085
+ this.listTargets = new import_aws_lambda_nodejs16.NodejsFunction(this, "list-targets-handler", {
11801
12086
  entry: listResolved.entry,
11802
- runtime: import_aws_lambda14.Runtime.NODEJS_LATEST,
12087
+ runtime: import_aws_lambda16.Runtime.NODEJS_LATEST,
11803
12088
  memorySize: 512,
11804
- timeout: import_aws_cdk_lib19.Duration.minutes(1),
12089
+ timeout: import_aws_cdk_lib21.Duration.minutes(1),
11805
12090
  environment: {
11806
12091
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
11807
12092
  }
11808
12093
  });
11809
12094
  props.dataStoreTable.grant(this.listTargets, "dynamodb:Query");
11810
- const rewriteResolved = resolveHandlerEntry13(
12095
+ const rewriteResolved = resolveHandlerEntry15(
11811
12096
  __dirname,
11812
12097
  "rename-rewrite-chunk.handler.js"
11813
12098
  );
11814
- this.rewriteChunk = new import_aws_lambda_nodejs14.NodejsFunction(this, "rewrite-chunk-handler", {
12099
+ this.rewriteChunk = new import_aws_lambda_nodejs16.NodejsFunction(this, "rewrite-chunk-handler", {
11815
12100
  entry: rewriteResolved.entry,
11816
- runtime: import_aws_lambda14.Runtime.NODEJS_LATEST,
12101
+ runtime: import_aws_lambda16.Runtime.NODEJS_LATEST,
11817
12102
  memorySize: 512,
11818
- timeout: import_aws_cdk_lib19.Duration.minutes(1),
12103
+ timeout: import_aws_cdk_lib21.Duration.minutes(1),
11819
12104
  environment: {
11820
12105
  DYNAMO_TABLE_NAME: props.dataStoreTable.tableName
11821
12106
  }
@@ -11826,15 +12111,15 @@ var RenameCascadeLambdas = class extends import_constructs24.Construct {
11826
12111
  "dynamodb:PutItem",
11827
12112
  "dynamodb:UpdateItem"
11828
12113
  );
11829
- const finalizeResolved = resolveHandlerEntry13(
12114
+ const finalizeResolved = resolveHandlerEntry15(
11830
12115
  __dirname,
11831
12116
  "rename-finalize.handler.js"
11832
12117
  );
11833
- this.finalize = new import_aws_lambda_nodejs14.NodejsFunction(this, "finalize-handler", {
12118
+ this.finalize = new import_aws_lambda_nodejs16.NodejsFunction(this, "finalize-handler", {
11834
12119
  entry: finalizeResolved.entry,
11835
- runtime: import_aws_lambda14.Runtime.NODEJS_LATEST,
12120
+ runtime: import_aws_lambda16.Runtime.NODEJS_LATEST,
11836
12121
  memorySize: 512,
11837
- timeout: import_aws_cdk_lib19.Duration.minutes(1),
12122
+ timeout: import_aws_cdk_lib21.Duration.minutes(1),
11838
12123
  environment: {
11839
12124
  [RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR]: props.opsEventBus.eventBusName
11840
12125
  }
@@ -11850,13 +12135,13 @@ var RenameCascadeLambdas = class extends import_constructs24.Construct {
11850
12135
  };
11851
12136
 
11852
12137
  // src/workflows/control-plane/rename-cascade/rename-cascade-workflow.ts
11853
- var import_aws_cdk_lib20 = require("aws-cdk-lib");
11854
- var import_aws_events10 = require("aws-cdk-lib/aws-events");
11855
- var import_aws_events_targets6 = require("aws-cdk-lib/aws-events-targets");
12138
+ var import_aws_cdk_lib22 = require("aws-cdk-lib");
12139
+ var import_aws_events12 = require("aws-cdk-lib/aws-events");
12140
+ var import_aws_events_targets7 = require("aws-cdk-lib/aws-events-targets");
11856
12141
  var import_aws_stepfunctions2 = require("aws-cdk-lib/aws-stepfunctions");
11857
12142
  var import_aws_stepfunctions_tasks2 = require("aws-cdk-lib/aws-stepfunctions-tasks");
11858
- var import_constructs25 = require("constructs");
11859
- var RenameCascadeWorkflow = class extends import_constructs25.Construct {
12143
+ var import_constructs29 = require("constructs");
12144
+ var RenameCascadeWorkflow = class extends import_constructs29.Construct {
11860
12145
  constructor(scope, props) {
11861
12146
  super(scope, "rename-cascade-workflow");
11862
12147
  this.lambdas = new RenameCascadeLambdas(this, {
@@ -12000,18 +12285,18 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
12000
12285
  // Long timeout — large renames may rewrite thousands of rows;
12001
12286
  // the `CascadeSlow` alarm fires at 300s p99 but the state
12002
12287
  // machine itself does not abort.
12003
- timeout: import_aws_cdk_lib20.Duration.hours(2)
12288
+ timeout: import_aws_cdk_lib22.Duration.hours(2)
12004
12289
  });
12005
- this.rule = new import_aws_events10.Rule(this, "rule", {
12290
+ this.rule = new import_aws_events12.Rule(this, "rule", {
12006
12291
  eventBus: props.dataEventBus,
12007
12292
  eventPattern: {
12008
- source: [import_workflows6.OPENHI_DATA_SOURCE],
12009
- detailType: [import_workflows6.ControlPlaneRenameV1.detailType]
12293
+ source: [import_workflows8.OPENHI_DATA_SOURCE],
12294
+ detailType: [import_workflows8.ControlPlaneRenameV1.detailType]
12010
12295
  },
12011
12296
  targets: [
12012
- new import_aws_events_targets6.SfnStateMachine(this.stateMachine, {
12297
+ new import_aws_events_targets7.SfnStateMachine(this.stateMachine, {
12013
12298
  retryAttempts: 2,
12014
- maxEventAge: import_aws_cdk_lib20.Duration.hours(2)
12299
+ maxEventAge: import_aws_cdk_lib22.Duration.hours(2)
12015
12300
  })
12016
12301
  ]
12017
12302
  });
@@ -12032,6 +12317,8 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
12032
12317
  CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE,
12033
12318
  CONDITION_CLINICAL_STATUS_SYSTEM,
12034
12319
  CONTROL_EVENT_BUS_NAME_ENV_VAR,
12320
+ COUNTER_MAINTENANCE_CONSUMER_NAME,
12321
+ COUNTER_MAINTENANCE_DETAIL_TYPES,
12035
12322
  COVERAGE_PAYOR_TYPE_SYSTEM,
12036
12323
  COVERAGE_QMB_STATUS_EXTENSION_URL,
12037
12324
  COVERAGE_VERIFICATION_DATE_EXTENSION_URL,
@@ -12043,12 +12330,22 @@ var RenameCascadeWorkflow = class extends import_constructs25.Construct {
12043
12330
  CognitoUserPoolDomain,
12044
12331
  CognitoUserPoolKmsKey,
12045
12332
  ControlEventBus,
12333
+ ControlPlaneMembershipCreatedV1,
12334
+ ControlPlaneMembershipDeletedV1,
12046
12335
  ControlPlaneOwningDeleteCompleteV1,
12047
12336
  ControlPlaneOwningDeleteFailedV1,
12048
12337
  ControlPlaneOwningDeleteV1,
12049
12338
  ControlPlaneRenameCompleteV1,
12050
12339
  ControlPlaneRenameFailedV1,
12051
12340
  ControlPlaneRenameV1,
12341
+ ControlPlaneRoleAssignmentCreatedV1,
12342
+ ControlPlaneRoleAssignmentDeletedV1,
12343
+ ControlPlaneWorkspaceCreatedV1,
12344
+ ControlPlaneWorkspaceDeletedV1,
12345
+ CounterMaintenanceLambda,
12346
+ CounterMaintenanceWorkflow,
12347
+ CounterReconciliationLambda,
12348
+ CounterReconciliationWorkflow,
12052
12349
  DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES,
12053
12350
  DATA_STORE_CHANGE_DETAIL_TYPE,
12054
12351
  DEFAULT_PREVIEW_EXPIRATION_DAYS,