@openhi/constructs 0.0.104 → 0.0.105

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 (35) hide show
  1. package/README.md +14 -0
  2. package/lib/chunk-2PM2NGXI.mjs +31 -0
  3. package/lib/chunk-2PM2NGXI.mjs.map +1 -0
  4. package/lib/chunk-36YCDLLA.mjs +1258 -0
  5. package/lib/chunk-36YCDLLA.mjs.map +1 -0
  6. package/lib/chunk-BXEG7IOZ.mjs +108 -0
  7. package/lib/chunk-BXEG7IOZ.mjs.map +1 -0
  8. package/lib/chunk-WNUH2WDZ.mjs +45 -0
  9. package/lib/chunk-WNUH2WDZ.mjs.map +1 -0
  10. package/lib/events-CVA3_eEB.d.mts +23 -0
  11. package/lib/events-CVA3_eEB.d.ts +23 -0
  12. package/lib/index.d.mts +92 -21
  13. package/lib/index.d.ts +112 -22
  14. package/lib/index.js +214 -72
  15. package/lib/index.js.map +1 -1
  16. package/lib/index.mjs +190 -74
  17. package/lib/index.mjs.map +1 -1
  18. package/lib/post-confirmation.handler.js +50 -904
  19. package/lib/post-confirmation.handler.js.map +1 -1
  20. package/lib/post-confirmation.handler.mjs +36 -111
  21. package/lib/post-confirmation.handler.mjs.map +1 -1
  22. package/lib/pre-token-generation.handler.js +62 -27
  23. package/lib/pre-token-generation.handler.js.map +1 -1
  24. package/lib/pre-token-generation.handler.mjs +22 -31
  25. package/lib/pre-token-generation.handler.mjs.map +1 -1
  26. package/lib/provision-default-workspace.handler.d.mts +13 -0
  27. package/lib/provision-default-workspace.handler.d.ts +13 -0
  28. package/lib/{chunk-MLTYFMSE.mjs → provision-default-workspace.handler.js} +346 -26
  29. package/lib/provision-default-workspace.handler.js.map +1 -0
  30. package/lib/provision-default-workspace.handler.mjs +173 -0
  31. package/lib/provision-default-workspace.handler.mjs.map +1 -0
  32. package/lib/rest-api-lambda.handler.mjs +40 -546
  33. package/lib/rest-api-lambda.handler.mjs.map +1 -1
  34. package/package.json +3 -3
  35. package/lib/chunk-MLTYFMSE.mjs.map +0 -1
package/README.md CHANGED
@@ -1,3 +1,17 @@
1
1
  # @openhi/constructs
2
2
 
3
3
  AWS CDK constructs for deploying OpenHI infrastructure. The library provides reusable constructs for applications, shared infrastructure (auth and core resources), data services, and common components used across OpenHI stacks.
4
+
5
+ ## Source Boundaries
6
+
7
+ - `src/components`: reusable infrastructure building blocks and thin service integrations around AWS primitives.
8
+ - `src/data`: persistence models, data access operations, API routes, and storage-specific handlers.
9
+ - `src/workflows`: deployed async business processes, their EventBridge event contracts, workflow Lambda constructs, handlers, and tests.
10
+
11
+ Workflow Lambdas should live under a plane namespace such as `src/workflows/control-plane` or `src/workflows/data-plane`. Trigger-specific handlers in `components` or API routes should stay thin and publish workflow events when the business process can run asynchronously.
12
+
13
+ Use `events.ts` for EventBridge contracts, `<workflow>.handler.ts` for runtime handlers, `<workflow>-lambda.ts` for Lambda constructs, `<workflow>.handler.test.ts` for handler tests, and a `<domain>-workflow.ts` construct when EventBridge rules or multiple workflow Lambdas are deployed together.
14
+
15
+ ## Strategy
16
+
17
+ Workflow placement (bus selection, Lambda vs. Step Functions, standard event envelope, idempotency contract, cross-boundary rules) is governed by [ADR-016 — Workflow Boundary Strategy](https://github.com/codedrifters/openhi-planning/blob/main/docs/src/content/docs/requirements/architectural-decisions/ADR-016-workflow-boundary-strategy.md) in the planning repo.
@@ -0,0 +1,31 @@
1
+ // src/workflows/control-plane/user-onboarding/events.ts
2
+ var USER_ONBOARDING_EVENT_SOURCE = "openhi.control.user-onboarding";
3
+ var PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE = "ProvisionDefaultWorkspaceRequested";
4
+ var buildProvisionDefaultWorkspaceRequestedDetail = (event) => {
5
+ const attrs = event.request?.userAttributes ?? {};
6
+ const cognitoSub = attrs.sub?.trim();
7
+ if (!cognitoSub) {
8
+ return void 0;
9
+ }
10
+ const email = attrs.email?.trim();
11
+ const displayName = email || event.userName || cognitoSub;
12
+ return {
13
+ cognitoSub,
14
+ ...email ? { email } : {},
15
+ displayName,
16
+ trigger: {
17
+ source: "cognito.post-confirmation",
18
+ triggerSource: event.triggerSource,
19
+ userPoolId: event.userPoolId,
20
+ userName: event.userName,
21
+ clientId: event.callerContext?.clientId
22
+ }
23
+ };
24
+ };
25
+
26
+ export {
27
+ USER_ONBOARDING_EVENT_SOURCE,
28
+ PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE,
29
+ buildProvisionDefaultWorkspaceRequestedDetail
30
+ };
31
+ //# sourceMappingURL=chunk-2PM2NGXI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/workflows/control-plane/user-onboarding/events.ts"],"sourcesContent":["import type { PostConfirmationTriggerEvent } from \"aws-lambda\";\n\n/**\n * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/user-onboarding/events.md\n */\n\n// EventBridge routing values shared by the publisher and workflow rule.\nexport const USER_ONBOARDING_EVENT_SOURCE = \"openhi.control.user-onboarding\";\nexport const PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE =\n \"ProvisionDefaultWorkspaceRequested\";\n\n// Minimal workflow payload needed to provision and diagnose onboarding.\nexport interface ProvisionDefaultWorkspaceRequestedDetail {\n readonly cognitoSub: string;\n readonly userId?: string;\n readonly email?: string;\n readonly displayName?: string;\n readonly trigger: {\n readonly source: \"cognito.post-confirmation\";\n readonly triggerSource?: string;\n readonly userPoolId?: string;\n readonly userName?: string;\n readonly clientId?: string;\n };\n}\n\n// Convert Cognito's Post Confirmation trigger event into the workflow event.\nexport const buildProvisionDefaultWorkspaceRequestedDetail = (\n event: PostConfirmationTriggerEvent,\n): ProvisionDefaultWorkspaceRequestedDetail | undefined => {\n // Cognito sub is the required stable identity key for onboarding records.\n const attrs = event.request?.userAttributes ?? {};\n const cognitoSub = attrs.sub?.trim();\n if (!cognitoSub) {\n return undefined;\n }\n\n // Prefer email for display where available; fall back to Cognito metadata.\n const email = attrs.email?.trim();\n const displayName = email || event.userName || cognitoSub;\n\n // Include trigger metadata so failed or duplicate events can be traced.\n return {\n cognitoSub,\n ...(email ? { email } : {}),\n displayName,\n trigger: {\n source: \"cognito.post-confirmation\",\n triggerSource: event.triggerSource,\n userPoolId: event.userPoolId,\n userName: event.userName,\n clientId: event.callerContext?.clientId,\n },\n };\n};\n"],"mappings":";AAOO,IAAM,+BAA+B;AACrC,IAAM,0CACX;AAkBK,IAAM,gDAAgD,CAC3D,UACyD;AAEzD,QAAM,QAAQ,MAAM,SAAS,kBAAkB,CAAC;AAChD,QAAM,aAAa,MAAM,KAAK,KAAK;AACnC,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,MAAM,OAAO,KAAK;AAChC,QAAM,cAAc,SAAS,MAAM,YAAY;AAG/C,SAAO;AAAA,IACL;AAAA,IACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,IACzB;AAAA,IACA,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,eAAe,MAAM;AAAA,MACrB,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,MAChB,UAAU,MAAM,eAAe;AAAA,IACjC;AAAA,EACF;AACF;","names":[]}