@openhi/constructs 0.0.114 → 0.0.116

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 (39) hide show
  1. package/lib/chunk-AHYQFT4N.mjs +212 -0
  2. package/lib/chunk-AHYQFT4N.mjs.map +1 -0
  3. package/lib/{chunk-CUUKXDB2.mjs → chunk-AJQUWHFK.mjs} +460 -54
  4. package/lib/chunk-AJQUWHFK.mjs.map +1 -0
  5. package/lib/{chunk-GBDIGTNV.mjs → chunk-QWWLM452.mjs} +2 -2
  6. package/lib/{chunk-QMBJ4VHC.mjs → chunk-U7L7T4XU.mjs} +25 -25
  7. package/lib/{chunk-QMBJ4VHC.mjs.map → chunk-U7L7T4XU.mjs.map} +1 -1
  8. package/lib/{chunk-NZRW7ROK.mjs → chunk-YYRWDEG4.mjs} +2 -2
  9. package/lib/{chunk-KSFC72TT.mjs → chunk-ZHMHLK3S.mjs} +2 -2
  10. package/lib/{events-DPodvl07.d.mts → events-CMG8xanm.d.mts} +7 -53
  11. package/lib/{events-DPodvl07.d.ts → events-CMG8xanm.d.ts} +7 -53
  12. package/lib/index.d.mts +330 -84
  13. package/lib/index.d.ts +350 -136
  14. package/lib/index.js +844 -301
  15. package/lib/index.js.map +1 -1
  16. package/lib/index.mjs +472 -304
  17. package/lib/index.mjs.map +1 -1
  18. package/lib/pre-token-generation.handler.mjs +3 -3
  19. package/lib/provision-default-workspace.handler.mjs +3 -3
  20. package/lib/rest-api-lambda.handler.mjs +282 -452
  21. package/lib/rest-api-lambda.handler.mjs.map +1 -1
  22. package/lib/seed-demo-data.handler.d.mts +6 -3
  23. package/lib/seed-demo-data.handler.d.ts +6 -3
  24. package/lib/seed-demo-data.handler.js +656 -0
  25. package/lib/seed-demo-data.handler.js.map +1 -1
  26. package/lib/seed-demo-data.handler.mjs +4 -4
  27. package/lib/static-hosting.viewer-request-handler.d.mts +54 -0
  28. package/lib/static-hosting.viewer-request-handler.d.ts +54 -0
  29. package/lib/static-hosting.viewer-request-handler.js +79 -0
  30. package/lib/static-hosting.viewer-request-handler.js.map +1 -0
  31. package/lib/static-hosting.viewer-request-handler.mjs +53 -0
  32. package/lib/static-hosting.viewer-request-handler.mjs.map +1 -0
  33. package/package.json +2 -2
  34. package/lib/chunk-53OHXLIL.mjs +0 -27
  35. package/lib/chunk-53OHXLIL.mjs.map +0 -1
  36. package/lib/chunk-CUUKXDB2.mjs.map +0 -1
  37. /package/lib/{chunk-GBDIGTNV.mjs.map → chunk-QWWLM452.mjs.map} +0 -0
  38. /package/lib/{chunk-NZRW7ROK.mjs.map → chunk-YYRWDEG4.mjs.map} +0 -0
  39. /package/lib/{chunk-KSFC72TT.mjs.map → chunk-ZHMHLK3S.mjs.map} +0 -0
package/lib/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { Construct, IConstruct } from 'constructs';
3
3
  import { ICertificate, Certificate, CertificateProps } from 'aws-cdk-lib/aws-certificatemanager';
4
4
  import { IHttpApi, HttpApiProps, HttpApi, DomainName } from 'aws-cdk-lib/aws-apigatewayv2';
5
5
  import { IGraphqlApi, GraphqlApi, GraphqlApiProps } from 'aws-cdk-lib/aws-appsync';
6
- import { UserPoolClient, UserPoolClientProps, IUserPool, UserPool, UserPoolProps, UserPoolDomain, UserPoolDomainProps, IUserPoolClient, IUserPoolDomain } from 'aws-cdk-lib/aws-cognito';
6
+ import { UserPool, UserPoolProps, UserPoolClient, UserPoolClientProps, UserPoolDomain, UserPoolDomainProps, IUserPool, IUserPoolClient, IUserPoolDomain } from 'aws-cdk-lib/aws-cognito';
7
7
  import { Key, KeyProps, IKey } from 'aws-cdk-lib/aws-kms';
8
8
  import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
9
9
  import { AttributeValue } from '@aws-sdk/client-dynamodb';
@@ -19,11 +19,11 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2';
19
19
  import * as rds from 'aws-cdk-lib/aws-rds';
20
20
  import { HostedZone, HostedZoneProps, IHostedZone, HostedZoneAttributes } from 'aws-cdk-lib/aws-route53';
21
21
  import { StringParameterProps, StringParameter } from 'aws-cdk-lib/aws-ssm';
22
- import { Distribution, DistributionProps } from 'aws-cdk-lib/aws-cloudfront';
22
+ import { Distribution, DistributionProps, CachePolicyProps } from 'aws-cdk-lib/aws-cloudfront';
23
23
  import { StateMachine } from 'aws-cdk-lib/aws-stepfunctions';
24
24
  import { RenamableEntityType } from '@openhi/workflows';
25
25
  export { ControlPlaneOwningDeleteCompleteV1, ControlPlaneOwningDeleteCompleteV1Detail, ControlPlaneOwningDeleteFailedV1, ControlPlaneOwningDeleteFailedV1Detail, ControlPlaneOwningDeleteV1, ControlPlaneOwningDeleteV1Detail, ControlPlaneRenameCompleteV1, ControlPlaneRenameCompleteV1Detail, ControlPlaneRenameFailedV1, ControlPlaneRenameFailedV1Detail, ControlPlaneRenameV1, ControlPlaneRenameV1Detail, OPENHI_DATA_SOURCE, OPENHI_OPS_SOURCE, OWNING_ENTITY_TYPE, OwningEntityType, PlatformDeploymentCompletedV1, PlatformSystemDataSeededV1, RENAMABLE_ENTITY_TYPE, RenamableEntityType } from '@openhi/workflows';
26
- import { PlatformRoleCode } from '@openhi/types';
26
+ import { PlatformRoleCode, Patient, Practitioner, Observation, Encounter, Account } from '@openhi/types';
27
27
  import { PostConfirmationTriggerEvent } from 'aws-lambda';
28
28
 
29
29
  /*******************************************************************************
@@ -123,6 +123,21 @@ interface DynamoDbStreamKinesisRecord {
123
123
  };
124
124
  }
125
125
 
126
+ /**
127
+ * @see sites/www-docs/content/packages/@openhi/constructs/components/static-hosting/static-hosting.viewer-request-handler.md
128
+ */
129
+ /**
130
+ * Hosting mode controls how path-like URIs get a default document.
131
+ *
132
+ * - `spa`: path-like URIs (e.g. `/dashboard`, `/patients/123`) rewrite to
133
+ * `/index.html` so the single-page app's root index is served and the
134
+ * client-side router handles the path.
135
+ * - `static`: path-like URIs append `/index.html` (e.g. `/docs` becomes
136
+ * `/docs/index.html`) so multi-page static sites can serve distinct
137
+ * HTML per path.
138
+ */
139
+ type HostingMode = "spa" | "static";
140
+
126
141
  /**
127
142
  * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/owning-delete-cascade/events.md
128
143
  *
@@ -514,10 +529,9 @@ declare const DEMO_PERIOD: {
514
529
  * `"platform"` literal is a reserved value that never matches a real
515
530
  * Tenant id and signals "this RA scopes across all tenants".
516
531
  *
517
- * Renaming this constant is a wire-format break — the IAM grant in
518
- * `seed-demo-data-lambda.ts` enumerates exact-match `LeadingKeys`
519
- * computed from this value, and the in-band records written under it
520
- * become unreachable if the sentinel changes.
532
+ * Renaming this constant is a wire-format break — the handler emits
533
+ * RoleAssignment records keyed on this value, and the in-band records
534
+ * written under it become unreachable if the sentinel changes.
521
535
  */
522
536
  declare const PLATFORM_SCOPE_TENANT_ID = "platform";
523
537
  /** Placeholder Tenant id seeded by the workflow as the dev-user `currentTenant`. */
@@ -558,8 +572,8 @@ interface DemoWorkspaceSpec {
558
572
  readonly name: string;
559
573
  /**
560
574
  * Role suffix used in the demo URN value (`<scenario>:<roleSuffix>`).
561
- * Mirrors seed-fixtures' role suffix convention: `workspace` for
562
- * single-workspace tenants, `workspace-<sub>` for the mixed tenant.
575
+ * `workspace` for single-workspace tenants, `workspace-<sub>` for the
576
+ * mixed tenant.
563
577
  */
564
578
  readonly roleSuffix: string;
565
579
  }
@@ -572,8 +586,7 @@ interface DemoTenantSpec {
572
586
  /**
573
587
  * Scenario slug — `placeholder`, `demo-wound-care`, `demo-primary-care`,
574
588
  * `demo-mixed`. The placeholder tenant's slug is `placeholder`; the
575
- * three demo tenants mirror seed-fixtures' `fixture-*` slugs renamed
576
- * to `demo-*`.
589
+ * three demo tenants use `demo-*` slugs.
577
590
  */
578
591
  readonly scenario: string;
579
592
  /** Stable id (DynamoDB record id; also drives the canonical OHI URN). */
@@ -608,8 +621,6 @@ declare const demoMembershipId: (devUserId: string, tenantId: string) => string;
608
621
  declare const demoRoleAssignmentId: (devUserId: string, tenantId: string, roleCode: PlatformRoleCode) => string;
609
622
  /**
610
623
  * Demo-scenario FHIR `Identifier` entry — `urn:openhi:demo:<scenario>:<role>`.
611
- * Mirrors the `urn:openhi:fixture:<scenario>:<role>` pattern from
612
- * `@openhi/seed-fixtures/src/urn.ts`, renamed to the `demo` namespace.
613
624
  */
614
625
  declare const demoScenarioIdentifier: (scenario: string, roleSuffix: string) => {
615
626
  system: string;
@@ -638,48 +649,6 @@ declare const openhiResourceIdentifier: (params: {
638
649
  * is no per-(user, tenant) variance to drive from.
639
650
  */
640
651
  declare const demoRolesForUserInTenant: (_user: DemoDevUser, _tenantId: string) => ReadonlyArray<PlatformRoleCode>;
641
- /**
642
- * DynamoDB single-table partition-key builders. The IAM grant in
643
- * `seed-demo-data-lambda.ts` uses these to enumerate exact-match
644
- * `dynamodb:LeadingKeys` values; the entity definitions in
645
- * `data/dynamo/entities/control/` own the canonical key templates.
646
- *
647
- * These builders MUST emit the keys ElectroDB actually writes — not
648
- * the entity definition's pretty template. None of the control-plane
649
- * entities sets `casing: "none"` on the base-table PK template, so
650
- * ElectroDB applies its default lowercase casing at runtime: the
651
- * entity's `ROLE#ID#${id}` becomes `role#id#<id>` on the wire. A
652
- * builder that returns the uppercase template form produces a
653
- * silently-broken IAM grant (every PutItem denied with "no
654
- * identity-based policy allows" because the request's leading-key
655
- * never matches a policy value).
656
- */
657
- declare const rolePartitionKey: (roleId: string) => string;
658
- declare const demoTenantPartitionKey: (tenantId: string) => string;
659
- declare const demoWorkspacePartitionKey: (tenantId: string, workspaceId: string) => string;
660
- declare const demoMembershipPartitionKey: (tenantId: string, membershipId: string) => string;
661
- declare const demoRoleAssignmentPartitionKey: (tenantId: string, roleAssignmentId: string) => string;
662
- /** User entity PK template — `USER#ID#<id>` → `user#id#<id>` on the wire. */
663
- declare const demoUserPartitionKey: (userId: string) => string;
664
- /**
665
- * Tenant + Workspace PKs the workflow writes on every fire: the 4
666
- * tenant PKs (placeholder + 3 demo) plus their workspaces (1 + 1 + 1 + 2 = 5).
667
- */
668
- declare const demoBasePartitionKeys: () => ReadonlyArray<string>;
669
- /**
670
- * Membership + RoleAssignment + User PKs the workflow writes per dev
671
- * user. Empty when `devUsers` is empty (used by tests). The list
672
- * mirrors the handler's iteration order so the IAM grant covers every
673
- * write the handler can make.
674
- *
675
- * Per dev user the function emits:
676
- * - one User PK,
677
- * - per tenant in {@link DEMO_TENANT_SPECS}: one Membership PK plus
678
- * one `tenant-admin` RoleAssignment PK,
679
- * - one platform-scoped `system-admin` RoleAssignment PK keyed by
680
- * {@link PLATFORM_SCOPE_TENANT_ID}.
681
- */
682
- declare const demoDevUserPartitionKeys: (devUsers: ReadonlyArray<DemoDevUser>) => ReadonlyArray<string>;
683
652
 
684
653
  /**
685
654
  * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/user-onboarding/events.md
@@ -914,7 +883,7 @@ declare class OpenHiApp extends App {
914
883
  *
915
884
  * @public
916
885
  */
917
- type OpenHiServiceType = "auth" | "rest-api" | "data" | "global" | "graphql-api";
886
+ type OpenHiServiceType = "auth" | "rest-api" | "data" | "global" | "graphql-api" | "website";
918
887
  /**
919
888
  * Tag-key suffixes applied by every OpenHiService stack via Tags.of().
920
889
  * Full keys are composed `${appName}:${suffix}` — see {@link openHiTagKey}.
@@ -1089,47 +1058,6 @@ declare class RootGraphqlApi extends GraphqlApi {
1089
1058
  constructor(scope: Construct, props?: Omit<RootGraphqlApiProps, "name">);
1090
1059
  }
1091
1060
 
1092
- interface CognitoFixtureSeederClientProps extends Partial<Omit<UserPoolClientProps, "userPool" | "generateSecret">> {
1093
- readonly userPool: IUserPool;
1094
- }
1095
- /**
1096
- * Dedicated Cognito app client for the OpenHI fixture-seeder CLI
1097
- * (`@openhi/seed-fixtures`).
1098
- *
1099
- * Why a dedicated client (vs reusing the SPA client):
1100
- * - Tightly scoped: only the seeder consumes tokens issued here, so an
1101
- * audit trail of seeder activity is cleanly separable.
1102
- * - Decoupled from the SPA client's OAuth flows — no risk of breaking
1103
- * web-app sign-in by tweaking auth-flow settings here.
1104
- * - Stage-conditional creation upstream (only provisioned in non-prod
1105
- * environments) means prod stacks never carry a code path that could
1106
- * issue a fixture-seeder token in the first place.
1107
- *
1108
- * Why USER_PASSWORD_AUTH (vs M2M client-credentials):
1109
- * - Cognito's M2M tier has a per-app-client monthly fee plus per-token
1110
- * activity charges. For sporadic non-prod fixture runs the per-client
1111
- * fee dominates the bill, especially if every dev branch spins up
1112
- * its own auth stack.
1113
- * - USER_PASSWORD_AUTH against a service `fixture-seeder` user keeps
1114
- * the cost in MAU territory (free under the 50K MAU tier).
1115
- * - Tradeoff: passwords need rotation and the service user must be
1116
- * provisioned per non-prod environment (manual or scripted post-deploy).
1117
- *
1118
- * No client secret (`generateSecret: false`): USER_PASSWORD_AUTH
1119
- * authenticates with the password directly; a secret would just add
1120
- * another credential to manage without strengthening anything.
1121
- */
1122
- declare class CognitoFixtureSeederClient extends UserPoolClient {
1123
- /**
1124
- * SSM parameter name suffix used to publish this client's ID for
1125
- * cross-stack lookups. Built into a full parameter name via
1126
- * `buildParameterName` with `serviceType` AUTH (since the auth stack
1127
- * owns this resource).
1128
- */
1129
- static readonly SSM_PARAM_NAME = "COGNITO_FIXTURE_SEEDER_CLIENT";
1130
- constructor(scope: Construct, props: CognitoFixtureSeederClientProps);
1131
- }
1132
-
1133
1061
  /**
1134
1062
  * @see sites/www-docs/content/packages/@openhi/constructs/components/cognito/cognito-user-pool.md
1135
1063
  */
@@ -1676,6 +1604,79 @@ declare class DiscoverableStringParameter extends StringParameter {
1676
1604
  constructor(scope: Construct, id: string, props: DiscoverableStringParameterProps);
1677
1605
  }
1678
1606
 
1607
+ /**
1608
+ * @see sites/www-docs/content/packages/@openhi/constructs/components/static-hosting/static-content.md
1609
+ */
1610
+ /*******************************************************************************
1611
+ *
1612
+ * STATIC CONTENT UPLOADER
1613
+ *
1614
+ * This construct uploads a directory of content from a local location into S3.
1615
+ *
1616
+ * To support PR and branch specific builds, each S3 bucket can store content
1617
+ * for multiple domains and builds, using the following format:
1618
+ *
1619
+ * S3-bucket/<sub-domain>.<full-domain>/*
1620
+ *
1621
+ * A bucket used to store content for stage.openhi.org might have the
1622
+ * following directory structure (all in the same bucket):
1623
+ *
1624
+ * /www.stage.openhi.org/* -> serves content to www.stage.openhi.org
1625
+ * /feature-7.stage.openhi.org/* -> serves content to feature-7.stage.openhi.org
1626
+ * /pr-123.stage.openhi.org/* -> serves content to pr-123.stage.openhi.org
1627
+ *
1628
+ ******************************************************************************/
1629
+ /**
1630
+ * Props for the StaticContent construct.
1631
+ */
1632
+ interface StaticContentProps {
1633
+ /**
1634
+ * Absolute path to directory containing content for the website.
1635
+ */
1636
+ readonly contentSourceDirectory: string;
1637
+ /**
1638
+ * Directory to place content into. Should start with a slash.
1639
+ * Example: '/widget'
1640
+ *
1641
+ * @default "/"
1642
+ */
1643
+ readonly contentDestinationDirectory?: string;
1644
+ /**
1645
+ * The sub domain prefix (e.g. "feature-7"). Used as the per-branch folder
1646
+ * name in the bucket so each branch deploys to its own prefix.
1647
+ *
1648
+ * @default the current stack's branch name (kebab-cased)
1649
+ */
1650
+ readonly subDomain?: string;
1651
+ /**
1652
+ * The full domain (e.g. "stage.openhi.org"). Used together with
1653
+ * `subDomain` to form the destination prefix
1654
+ * `<sub-domain>.<full-domain>`.
1655
+ */
1656
+ readonly fullDomain: string;
1657
+ /**
1658
+ * Service type used to look up the static-hosting bucket ARN via
1659
+ * DiscoverableStringParameter.
1660
+ *
1661
+ * @default STATIC_HOSTING_SERVICE_TYPE ("website")
1662
+ */
1663
+ readonly serviceType?: string;
1664
+ }
1665
+ /**
1666
+ * Static content uploader: deploys a local directory to the static-hosting
1667
+ * S3 bucket under `<sub-domain>.<full-domain>/<dest>` so each branch
1668
+ * deploys to its own prefix without clobbering siblings. The bucket ARN is
1669
+ * looked up via DiscoverableStringParameter so the uploader can run on a
1670
+ * feature-branch stack while the bucket itself was provisioned by the
1671
+ * release-branch service stack.
1672
+ */
1673
+ declare class StaticContent extends Construct {
1674
+ constructor(scope: Construct, id: string, props: StaticContentProps);
1675
+ }
1676
+
1677
+ /**
1678
+ * @see sites/www-docs/content/packages/@openhi/constructs/components/static-hosting/static-hosting.md
1679
+ */
1679
1680
  /**
1680
1681
  * Service type for the website service. Used in SSM parameter paths and by
1681
1682
  * OpenHiWebsiteService for fromConstruct() lookups.
@@ -1690,21 +1691,61 @@ interface StaticHostingProps {
1690
1691
  */
1691
1692
  readonly bucketProps?: Omit<BucketProps, "bucketName">;
1692
1693
  /**
1693
- * Optional CloudFront distribution props. Do not enable invalidation.
1694
- * Default TTL is 10 seconds via a custom cache policy.
1694
+ * Optional CloudFront distribution props. Defaults wire a custom cache
1695
+ * policy (60s/300s with gzip+brotli), `REDIRECT_TO_HTTPS`, and
1696
+ * `ALLOW_GET_HEAD_OPTIONS` on the default behavior; overrides apply on top.
1695
1697
  */
1696
1698
  readonly distributionProps?: Omit<DistributionProps, "defaultBehavior" | "defaultRootObject">;
1699
+ /**
1700
+ * Optional cache policy overrides. Defaults: `defaultTtl=60s`, `maxTtl=300s`,
1701
+ * `minTtl=0s`, gzip+brotli enabled, no headers/cookies/query strings cached.
1702
+ */
1703
+ readonly cachePolicyProps?: Omit<CachePolicyProps, "cachePolicyName">;
1704
+ /**
1705
+ * Wildcard certificate to attach to the CloudFront distribution. When
1706
+ * supplied together with `hostedZone` and `domainNames`, CloudFront serves
1707
+ * the listed domains and Route53 ARecords are created in the zone.
1708
+ *
1709
+ * @default - no custom certificate; CloudFront default domain is served
1710
+ */
1711
+ readonly certificate?: ICertificate;
1712
+ /**
1713
+ * Hosted zone to create Route53 ARecords in. Required together with
1714
+ * `certificate` and `domainNames` to attach a custom domain.
1715
+ */
1716
+ readonly hostedZone?: IHostedZone;
1717
+ /**
1718
+ * Domain names to attach to the CloudFront distribution. Each name also
1719
+ * gets an ARecord in `hostedZone`.
1720
+ */
1721
+ readonly domainNames?: ReadonlyArray<string>;
1722
+ /**
1723
+ * Selects how path-like URIs are rewritten by the viewer-request
1724
+ * Lambda@Edge handler.
1725
+ *
1726
+ * - `spa` (default): path-like URIs rewrite to `/index.html`.
1727
+ * - `static`: path-like URIs append `/index.html`.
1728
+ *
1729
+ * @default "spa"
1730
+ */
1731
+ readonly hostingMode?: HostingMode;
1697
1732
  /**
1698
1733
  * Service type for SSM parameter paths.
1734
+ *
1699
1735
  * @default STATIC_HOSTING_SERVICE_TYPE ("website")
1700
1736
  */
1701
1737
  readonly serviceType?: string;
1738
+ /**
1739
+ * Optional human-readable description used in distribution comment and
1740
+ * SSM parameter descriptions.
1741
+ */
1742
+ readonly description?: string;
1702
1743
  }
1703
1744
  /**
1704
1745
  * Static hosting: S3 bucket (private) + CloudFront distribution with Origin
1705
- * Access Control (OAC). Stores bucket ARN and distribution ARN in SSM via
1706
- * DiscoverableStringParameter for cross-stack lookup. No cache invalidation;
1707
- * default TTL 10 seconds.
1746
+ * Access Control (OAC) + Lambda@Edge viewer-request handler. Publishes
1747
+ * bucket ARN, distribution ARN, distribution domain, and distribution ID
1748
+ * via DiscoverableStringParameter for cross-stack lookup.
1708
1749
  */
1709
1750
  declare class StaticHosting extends Construct {
1710
1751
  /**
@@ -1715,8 +1756,18 @@ declare class StaticHosting extends Construct {
1715
1756
  * SSM parameter name for the CloudFront distribution ARN.
1716
1757
  */
1717
1758
  static readonly SSM_PARAM_NAME_DISTRIBUTION_ARN = "STATIC_HOSTING_DISTRIBUTION_ARN";
1759
+ /**
1760
+ * SSM parameter name for the CloudFront distribution domain
1761
+ * (e.g. dXXXXX.cloudfront.net).
1762
+ */
1763
+ static readonly SSM_PARAM_NAME_DISTRIBUTION_DOMAIN = "STATIC_HOSTING_DISTRIBUTION_DOMAIN";
1764
+ /**
1765
+ * SSM parameter name for the CloudFront distribution ID.
1766
+ */
1767
+ static readonly SSM_PARAM_NAME_DISTRIBUTION_ID = "STATIC_HOSTING_DISTRIBUTION_ID";
1718
1768
  readonly bucket: IBucket;
1719
1769
  readonly distribution: Distribution;
1770
+ readonly viewerRequestHandler: NodejsFunction;
1720
1771
  constructor(scope: Construct, id: string, props?: StaticHostingProps);
1721
1772
  }
1722
1773
 
@@ -1800,17 +1851,6 @@ declare class OpenHiAuthService extends OpenHiService {
1800
1851
  * Returns an IUserPoolClient by looking up the Auth stack's User Pool Client ID from SSM.
1801
1852
  */
1802
1853
  static userPoolClientFromConstruct(scope: Construct): IUserPoolClient;
1803
- /**
1804
- * Returns the dedicated fixture-seeder IUserPoolClient by looking up
1805
- * its ID from SSM. Only non-prod auth stacks publish this parameter
1806
- * (per the conditional in {@link createFixtureSeederClient}); calling
1807
- * this against a prod-deployed stack will fail at lookup time.
1808
- *
1809
- * Consumed by `OpenHiRestApiService` (in non-prod) so the authorizer
1810
- * accepts tokens issued by this client, and by the seed-fixtures CLI
1811
- * to drive USER_PASSWORD_AUTH against this client's ID.
1812
- */
1813
- static fixtureSeederClientFromConstruct(scope: Construct): IUserPoolClient;
1814
1854
  /**
1815
1855
  * Returns an IUserPoolDomain by looking up the Auth stack's User Pool Domain from SSM.
1816
1856
  */
@@ -1830,12 +1870,6 @@ declare class OpenHiAuthService extends OpenHiService {
1830
1870
  readonly userPool: IUserPool;
1831
1871
  readonly userPoolClient: IUserPoolClient;
1832
1872
  readonly userPoolDomain: IUserPoolDomain;
1833
- /**
1834
- * Dedicated USER_PASSWORD_AUTH client for the seed-fixtures CLI.
1835
- * Only created in non-prod environments (see
1836
- * {@link createFixtureSeederClient}). `undefined` in prod.
1837
- */
1838
- readonly fixtureSeederClient?: IUserPoolClient;
1839
1873
  /**
1840
1874
  * Cross-stack reference to the data store table. Cached so repeated
1841
1875
  * lookups share a single CDK construct id ("dynamo-db-data-store") in
@@ -1914,18 +1948,6 @@ declare class OpenHiAuthService extends OpenHiService {
1914
1948
  * Override to customize.
1915
1949
  */
1916
1950
  protected createUserPoolClient(): IUserPoolClient;
1917
- /**
1918
- * Creates the dedicated USER_PASSWORD_AUTH app client for the
1919
- * `@openhi/seed-fixtures` CLI, **only** in non-prod environments.
1920
- * Returns `undefined` when this stack is being deployed to a prod
1921
- * stage so the prod auth stack carries no fixture-seeder code path.
1922
- *
1923
- * Operator post-deploy: create a `fixture-seeder` Cognito user with
1924
- * a service password (manually via console or scripted with
1925
- * `aws cognito-idp admin-create-user`); the CLI consumes those creds
1926
- * via env vars to drive `InitiateAuth`.
1927
- */
1928
- protected createFixtureSeederClient(): IUserPoolClient | undefined;
1929
1951
  /**
1930
1952
  * Creates the User Pool Domain (Cognito hosted UI) and exports domain name to SSM.
1931
1953
  * Look up via {@link OpenHiAuthService.userPoolDomainFromConstruct}.
@@ -2191,12 +2213,69 @@ declare class OpenHiRestApiService extends OpenHiService {
2191
2213
  protected createRootHttpApi(domainName: DomainName): RootHttpApi;
2192
2214
  }
2193
2215
 
2216
+ /**
2217
+ * @see sites/www-docs/content/packages/@openhi/constructs/workflows/control-plane/seed-demo-data/data-plane-fixtures.md
2218
+ *
2219
+ * Hand-authored FHIR data-plane fixture bodies the `seed-demo-data`
2220
+ * workflow upserts into the data store on every non-prod deploy.
2221
+ * Mirrors the OPS-009 v1 resource set: Patient, Practitioner,
2222
+ * Observation, Encounter, Account.
2223
+ *
2224
+ * Ids are deterministic — re-fires of the workflow upsert the same
2225
+ * records, satisfying the workflow's idempotency contract (no
2226
+ * duplicates) and letting the IAM grant in `seed-demo-data-lambda.ts`
2227
+ * enumerate exact-match `dynamodb:LeadingKeys` rather than a wildcard.
2228
+ *
2229
+ * The placeholder tenant carries no data-plane fixtures — only the
2230
+ * three real demo tenants (wound-care, primary-care, mixed) get
2231
+ * Patient/Practitioner/Observation/Encounter/Account records. The
2232
+ * placeholder tenant exists solely as a routing target for the
2233
+ * Cognito pre-token-generation fallback and never holds clinical
2234
+ * data.
2235
+ */
2236
+ /**
2237
+ * Logical group of FHIR resources owned by a single (tenant, workspace)
2238
+ * pair. The workflow walks `DEMO_DATA_PLANE_FIXTURES` and writes every
2239
+ * entry against the matching workspace's `OpenHiContext`.
2240
+ */
2241
+ interface DemoWorkspaceDataPlaneFixtures {
2242
+ readonly tenantId: string;
2243
+ readonly workspaceId: string;
2244
+ /**
2245
+ * Scenario slug used in the demo-URN identifier — mirrors the
2246
+ * `DemoTenantSpec.scenario` value for the parent tenant. For the
2247
+ * mixed tenant both workspaces share the `demo-mixed` scenario.
2248
+ */
2249
+ readonly scenario: string;
2250
+ readonly patients: ReadonlyArray<Patient>;
2251
+ readonly practitioners: ReadonlyArray<Practitioner>;
2252
+ readonly observations: ReadonlyArray<Observation>;
2253
+ readonly encounters: ReadonlyArray<Encounter>;
2254
+ readonly accounts: ReadonlyArray<Account>;
2255
+ }
2256
+ /**
2257
+ * Per-workspace fixtures the data-plane phase writes on every fire.
2258
+ * The placeholder tenant carries no fixtures. The mixed tenant carries
2259
+ * one fixture group per workspace; the two single-workspace tenants
2260
+ * carry one each. Total: 4 fixture groups × ≈ 9 resources = ~36
2261
+ * data-plane records.
2262
+ *
2263
+ * Ids embed the tenant + workspace slug so they remain unambiguous
2264
+ * across the four workspaces (the FHIR resource id is the only thing
2265
+ * that survives into the partition key, so a duplicate id across
2266
+ * workspaces would still collide on read paths that scan-by-id).
2267
+ */
2268
+ declare const DEMO_DATA_PLANE_FIXTURES: ReadonlyArray<DemoWorkspaceDataPlaneFixtures>;
2269
+
2194
2270
  interface SeedDemoDataLambdaProps {
2195
2271
  /**
2196
2272
  * Data-store table the workflow upserts demo-data records into.
2197
- * Wired via `DYNAMO_TABLE_NAME` env var; granted scoped read on the
2198
- * Role PKs (pre-flight check) and scoped write on the enumerated
2199
- * demo Tenant / Workspace / Membership / RoleAssignment / User PKs.
2273
+ * Wired via `DYNAMO_TABLE_NAME` env var; granted `dynamodb:GetItem`
2274
+ * (pre-flight Role lookup) and `dynamodb:PutItem`/`dynamodb:UpdateItem`
2275
+ * (write phase). The grants are scoped to the table ARN only; the
2276
+ * handler itself is the scope guarantee for which records the
2277
+ * workflow touches (see the construct body for the previous
2278
+ * `LeadingKeys`-based grants and the reason they were dropped).
2200
2279
  */
2201
2280
  readonly dataStoreTable: ITable;
2202
2281
  /**
@@ -2465,6 +2544,141 @@ declare class OpenHiGraphqlService extends OpenHiService {
2465
2544
  protected createRootGraphqlApi(): RootGraphqlApi;
2466
2545
  }
2467
2546
 
2547
+ /**
2548
+ * @see sites/www-docs/content/packages/@openhi/constructs/services/open-hi-website-service.md
2549
+ */
2550
+ interface OpenHiWebsiteServiceProps extends OpenHiServiceProps {
2551
+ /**
2552
+ * Sub-domain prefix attached to the child zone (e.g. "www" -> "www.<zone>").
2553
+ *
2554
+ * @default "www"
2555
+ */
2556
+ readonly domainPrefix?: string;
2557
+ /**
2558
+ * Absolute path to the local directory whose contents should be uploaded
2559
+ * to the static-hosting bucket. Required.
2560
+ */
2561
+ readonly contentSourceDirectory: string;
2562
+ /**
2563
+ * Path under the per-branch destination prefix to upload into. Should start
2564
+ * with a slash.
2565
+ *
2566
+ * @default "/"
2567
+ */
2568
+ readonly contentDestinationDirectory?: string;
2569
+ /**
2570
+ * Force the `StaticHosting` infrastructure (bucket + distribution +
2571
+ * Lambda@Edge + DNS + 4 SSM params) to be created on this branch even when
2572
+ * it is not the release branch. Useful for one-off bootstraps and tests.
2573
+ *
2574
+ * When omitted, hosting infrastructure is created only on
2575
+ * `defaultReleaseBranch`. The `StaticContent` uploader is always
2576
+ * created so feature branches can publish their content under their own
2577
+ * sub-domain folder against the release-branch bucket.
2578
+ *
2579
+ * @default - true on release branch, false otherwise
2580
+ */
2581
+ readonly createHostingInfrastructure?: boolean;
2582
+ }
2583
+ /**
2584
+ * SSM parameter name suffix for the website's full domain
2585
+ * (e.g. www.example.com).
2586
+ */
2587
+ declare const SSM_PARAM_NAME_FULL_DOMAIN = "WEBSITE_FULL_DOMAIN";
2588
+ /**
2589
+ * Website service stack: composes StaticHosting (only on release-branch
2590
+ * deploys) and StaticContent (always) so feature branches can ship their
2591
+ * content to a per-branch sub-domain folder against the release-branch
2592
+ * bucket without provisioning duplicate infrastructure.
2593
+ *
2594
+ * Resources are created in protected methods; subclasses may override to
2595
+ * customize.
2596
+ */
2597
+ declare class OpenHiWebsiteService extends OpenHiService {
2598
+ static readonly SERVICE_TYPE: "website";
2599
+ /**
2600
+ * Looks up the static-hosting bucket ARN published by the release-branch
2601
+ * deploy of this service.
2602
+ */
2603
+ static bucketArnFromConstruct(scope: Construct): string;
2604
+ /**
2605
+ * Looks up the CloudFront distribution ARN published by the release-branch
2606
+ * deploy of this service.
2607
+ */
2608
+ static distributionArnFromConstruct(scope: Construct): string;
2609
+ /**
2610
+ * Looks up the CloudFront distribution domain
2611
+ * (e.g. dXXXXX.cloudfront.net) published by the release-branch deploy.
2612
+ */
2613
+ static distributionDomainFromConstruct(scope: Construct): string;
2614
+ /**
2615
+ * Looks up the CloudFront distribution ID published by the release-branch
2616
+ * deploy of this service.
2617
+ */
2618
+ static distributionIdFromConstruct(scope: Construct): string;
2619
+ /**
2620
+ * Looks up the website's full domain (e.g. www.example.com) published by
2621
+ * the release-branch deploy of this service.
2622
+ */
2623
+ static fullDomainFromConstruct(scope: Construct): string;
2624
+ get serviceType(): string;
2625
+ /** Override so this.props is typed with this service's options. */
2626
+ props: OpenHiWebsiteServiceProps;
2627
+ /**
2628
+ * Full domain served by this website (e.g. www.example.com). Derived from
2629
+ * `domainPrefix` and the child hosted zone name.
2630
+ */
2631
+ readonly fullDomain: string;
2632
+ /**
2633
+ * The hosting construct, only created on release-branch deploys (or when
2634
+ * `createHostingInfrastructure` is true).
2635
+ */
2636
+ readonly staticHosting?: StaticHosting;
2637
+ /**
2638
+ * The content uploader, always created.
2639
+ */
2640
+ readonly staticContent: StaticContent;
2641
+ constructor(ohEnv: OpenHiEnvironment, props: OpenHiWebsiteServiceProps);
2642
+ /**
2643
+ * Validates that config required for the website stack is present.
2644
+ */
2645
+ protected validateConfig(props: OpenHiWebsiteServiceProps): void;
2646
+ /**
2647
+ * Looks up the child hosted zone published by the Global service.
2648
+ * Override to customize.
2649
+ */
2650
+ protected createHostedZone(): IHostedZone;
2651
+ /**
2652
+ * Returns the wildcard certificate looked up from the Global service.
2653
+ * Override to customize.
2654
+ */
2655
+ protected createCertificate(): ICertificate;
2656
+ /**
2657
+ * Computes the full website domain from `domainPrefix` and the child
2658
+ * zone name.
2659
+ */
2660
+ protected computeFullDomain(hostedZone: IHostedZone): string;
2661
+ /**
2662
+ * Creates the StaticHosting infrastructure (bucket + distribution +
2663
+ * Lambda@Edge + 4 SSM params + DNS).
2664
+ */
2665
+ protected createStaticHosting(deps: {
2666
+ certificate: ICertificate;
2667
+ hostedZone: IHostedZone;
2668
+ }): StaticHosting;
2669
+ /**
2670
+ * Creates the SSM parameter that publishes the website's full domain.
2671
+ * Look up via {@link OpenHiWebsiteService.fullDomainFromConstruct}.
2672
+ */
2673
+ protected createFullDomainParameter(): void;
2674
+ /**
2675
+ * Creates the StaticContent uploader. Always created so feature-branch
2676
+ * deploys can publish content to their own sub-domain folder against the
2677
+ * release-branch bucket.
2678
+ */
2679
+ protected createStaticContent(): StaticContent;
2680
+ }
2681
+
2468
2682
  interface OwningDeleteCascadeLambdasProps {
2469
2683
  /** Data-store table the cascade reads (Query) and writes (DeleteItem / TransactWriteItems) against. */
2470
2684
  readonly dataStoreTable: ITable;
@@ -2649,5 +2863,5 @@ declare class RenameCascadeWorkflow extends Construct {
2649
2863
  constructor(scope: Construct, props: RenameCascadeWorkflowProps);
2650
2864
  }
2651
2865
 
2652
- export { BRIDGED_STATUSES, CLOUDFORMATION_EVENT_SOURCE, CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE, CONTROL_EVENT_BUS_NAME_ENV_VAR, ChildHostedZone, CognitoFixtureSeederClient, CognitoUserPool, CognitoUserPoolClient, CognitoUserPoolDomain, CognitoUserPoolKmsKey, ControlEventBus, DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES, DATA_STORE_CHANGE_DETAIL_TYPE, DATA_STORE_CHANGE_EVENT_SOURCE, DEMO_PERIOD, DEMO_TENANT_SPECS, DEMO_URN_SYSTEM, DEV_USERS, DataEventBus, DataStoreHistoricalArchive, DataStorePostgresReplica, DiscoverableStringParameter, DynamoDbDataStore, OPENHI_REPO_TAG_KEY_ENV_VAR, OPENHI_RESOURCE_URN_SYSTEM, OPENHI_TAG_KEY_PREFIX_ENV_VAR, OPENHI_TAG_SUFFIX_BRANCH_NAME, OPENHI_TAG_SUFFIX_REPO_NAME, OPENHI_TAG_SUFFIX_SERVICE_TYPE, OPENHI_TAG_SUFFIX_STAGE_TYPE, OWNING_DELETE_CASCADE_CONSUMER_NAME, OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY, OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES, OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR, OpenHiApp, OpenHiAuthService, OpenHiDataService, OpenHiEnvironment, OpenHiGlobalService, OpenHiGraphqlService, OpenHiRestApiService, OpenHiService, OpenHiStage, OpsEventBus, OwningDeleteCascadeLambdas, OwningDeleteCascadeWorkflow, PLACEHOLDER_TENANT_ID, PLACEHOLDER_WORKSPACE_ID, PLATFORM_DEPLOY_BRIDGE_ACTOR_SYSTEM, PLATFORM_SCOPE_TENANT_ID, POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME, POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME, POSTGRES_REPLICA_SECRET_ARN_SSM_NAME, PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE, PlatformDeployBridge, PlatformDeployBridgeLambda, PostAuthenticationLambda, PostConfirmationLambda, PreTokenGenerationLambda, ProvisionDefaultWorkspaceLambda, RENAME_CASCADE_CONSUMER_NAME, RENAME_CASCADE_DEFAULT_CONCURRENCY, RENAME_CASCADE_FAILED_THRESHOLD, RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR, RENAME_CASCADE_SLOW_THRESHOLD_SECONDS, REST_API_BASE_URL_SSM_NAME, RenameCascadeLambdas, RenameCascadeWorkflow, RootGraphqlApi, RootHostedZone, RootHttpApi, RootWildcardCertificate, SEED_DEMO_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_ACTOR_SYSTEM, SEED_SYSTEM_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR, STATIC_HOSTING_SERVICE_TYPE, SeedDemoDataLambda, SeedDemoDataWorkflow, SeedSystemDataLambda, SeedSystemDataWorkflow, StaticHosting, USER_ONBOARDING_EVENT_SOURCE, UserOnboardingWorkflow, WorkflowDedupConsumerNameInvalidError, WorkflowDedupTable, WorkflowDedupTableDuplicateError, buildFhirCurrentResourceChangeDetail, buildProvisionDefaultWorkspaceRequestedDetail, demoBasePartitionKeys, demoDevUserPartitionKeys, demoMembershipId, demoMembershipPartitionKey, demoRoleAssignmentId, demoRoleAssignmentPartitionKey, demoRolesForUserInTenant, demoScenarioIdentifier, demoTenantPartitionKey, demoUserPartitionKey, demoWorkspacePartitionKey, getDynamoDbDataStoreTableName, getPostgresReplicaSchemaName, getWorkflowDedupTableName, openHiTagKey, openhiResourceIdentifier, rolePartitionKey };
2653
- export type { BridgedStatus, BuildParameterNameProps, CascadeChunkInput, CascadeFinalizeInput, CascadeFinalizeOutput, CascadeListInput, CascadeListOutput, ChildHostedZoneProps, CloudFormationStackStatusChangeDetail, CognitoFixtureSeederClientProps, DataStoreHistoricalArchiveProps, DataStorePostgresReplicaProps, DemoDevUser, DemoTenantSpec, DemoWorkspaceSpec, DiscoverableStringParameterProps, DynamoDbDataStoreProps, FhirCurrentResourceChangeDetail, GrantConsumerOptions, OpenHiAppProps, OpenHiAuthServiceProps, OpenHiDataServiceProps, OpenHiEnvironmentProps, OpenHiGlobalServiceProps, OpenHiGraphqlServiceProps, OpenHiRestApiServiceProps, OpenHiServiceProps, OpenHiServiceType, OpenHiStageProps, OwningDeleteCascadeLambdasProps, OwningDeleteCascadeWorkflowProps, PlatformDeployBridgeLambdaProps, PlatformDeployBridgeProps, PostConfirmationLambdaProps, PreTokenGenerationLambdaProps, ProvisionDefaultWorkspaceLambdaProps, ProvisionDefaultWorkspaceRequestedDetail, RenameCascadeChunkInput, RenameCascadeFinalizeInput, RenameCascadeFinalizeOutput, RenameCascadeLambdasProps, RenameCascadeListInput, RenameCascadeListOutput, RenameCascadeWorkflowProps, RootGraphqlApiProps, RootHttpApiProps, SeedDemoDataLambdaProps, SeedDemoDataWorkflowProps, SeedSystemDataLambdaProps, SeedSystemDataWorkflowProps, StaticHostingProps, UserOnboardingWorkflowProps, WorkflowDedupTableProps };
2866
+ export { BRIDGED_STATUSES, CLOUDFORMATION_EVENT_SOURCE, CLOUDFORMATION_STACK_STATUS_CHANGE_DETAIL_TYPE, CONTROL_EVENT_BUS_NAME_ENV_VAR, ChildHostedZone, CognitoUserPool, CognitoUserPoolClient, CognitoUserPoolDomain, CognitoUserPoolKmsKey, ControlEventBus, DATA_STORE_CHANGE_DETAIL_MAX_UTF8_BYTES, DATA_STORE_CHANGE_DETAIL_TYPE, DATA_STORE_CHANGE_EVENT_SOURCE, DEMO_DATA_PLANE_FIXTURES, DEMO_PERIOD, DEMO_TENANT_SPECS, DEMO_URN_SYSTEM, DEV_USERS, DataEventBus, DataStoreHistoricalArchive, DataStorePostgresReplica, DiscoverableStringParameter, DynamoDbDataStore, OPENHI_REPO_TAG_KEY_ENV_VAR, OPENHI_RESOURCE_URN_SYSTEM, OPENHI_TAG_KEY_PREFIX_ENV_VAR, OPENHI_TAG_SUFFIX_BRANCH_NAME, OPENHI_TAG_SUFFIX_REPO_NAME, OPENHI_TAG_SUFFIX_SERVICE_TYPE, OPENHI_TAG_SUFFIX_STAGE_TYPE, OWNING_DELETE_CASCADE_CONSUMER_NAME, OWNING_DELETE_CASCADE_DEFAULT_CONCURRENCY, OWNING_DELETE_CASCADE_STUCK_THRESHOLD_MINUTES, OWNING_DELETE_OPS_EVENT_BUS_ENV_VAR, OpenHiApp, OpenHiAuthService, OpenHiDataService, OpenHiEnvironment, OpenHiGlobalService, OpenHiGraphqlService, OpenHiRestApiService, OpenHiService, OpenHiStage, OpenHiWebsiteService, OpsEventBus, OwningDeleteCascadeLambdas, OwningDeleteCascadeWorkflow, PLACEHOLDER_TENANT_ID, PLACEHOLDER_WORKSPACE_ID, PLATFORM_DEPLOY_BRIDGE_ACTOR_SYSTEM, PLATFORM_SCOPE_TENANT_ID, POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME, POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME, POSTGRES_REPLICA_SECRET_ARN_SSM_NAME, PROVISION_DEFAULT_WORKSPACE_DETAIL_TYPE, PlatformDeployBridge, PlatformDeployBridgeLambda, PostAuthenticationLambda, PostConfirmationLambda, PreTokenGenerationLambda, ProvisionDefaultWorkspaceLambda, RENAME_CASCADE_CONSUMER_NAME, RENAME_CASCADE_DEFAULT_CONCURRENCY, RENAME_CASCADE_FAILED_THRESHOLD, RENAME_CASCADE_OPS_EVENT_BUS_ENV_VAR, RENAME_CASCADE_SLOW_THRESHOLD_SECONDS, REST_API_BASE_URL_SSM_NAME, RenameCascadeLambdas, RenameCascadeWorkflow, RootGraphqlApi, RootHostedZone, RootHttpApi, RootWildcardCertificate, SEED_DEMO_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_ACTOR_SYSTEM, SEED_SYSTEM_DATA_CONSUMER_NAME, SEED_SYSTEM_DATA_CONTROL_BUS_ENV_VAR, SSM_PARAM_NAME_FULL_DOMAIN, STATIC_HOSTING_SERVICE_TYPE, SeedDemoDataLambda, SeedDemoDataWorkflow, SeedSystemDataLambda, SeedSystemDataWorkflow, StaticContent, StaticHosting, USER_ONBOARDING_EVENT_SOURCE, UserOnboardingWorkflow, WorkflowDedupConsumerNameInvalidError, WorkflowDedupTable, WorkflowDedupTableDuplicateError, buildFhirCurrentResourceChangeDetail, buildProvisionDefaultWorkspaceRequestedDetail, demoMembershipId, demoRoleAssignmentId, demoRolesForUserInTenant, demoScenarioIdentifier, getDynamoDbDataStoreTableName, getPostgresReplicaSchemaName, getWorkflowDedupTableName, openHiTagKey, openhiResourceIdentifier };
2867
+ export type { BridgedStatus, BuildParameterNameProps, CascadeChunkInput, CascadeFinalizeInput, CascadeFinalizeOutput, CascadeListInput, CascadeListOutput, ChildHostedZoneProps, CloudFormationStackStatusChangeDetail, DataStoreHistoricalArchiveProps, DataStorePostgresReplicaProps, DemoDevUser, DemoTenantSpec, DemoWorkspaceDataPlaneFixtures, DemoWorkspaceSpec, DiscoverableStringParameterProps, DynamoDbDataStoreProps, FhirCurrentResourceChangeDetail, GrantConsumerOptions, HostingMode, OpenHiAppProps, OpenHiAuthServiceProps, OpenHiDataServiceProps, OpenHiEnvironmentProps, OpenHiGlobalServiceProps, OpenHiGraphqlServiceProps, OpenHiRestApiServiceProps, OpenHiServiceProps, OpenHiServiceType, OpenHiStageProps, OpenHiWebsiteServiceProps, OwningDeleteCascadeLambdasProps, OwningDeleteCascadeWorkflowProps, PlatformDeployBridgeLambdaProps, PlatformDeployBridgeProps, PostConfirmationLambdaProps, PreTokenGenerationLambdaProps, ProvisionDefaultWorkspaceLambdaProps, ProvisionDefaultWorkspaceRequestedDetail, RenameCascadeChunkInput, RenameCascadeFinalizeInput, RenameCascadeFinalizeOutput, RenameCascadeLambdasProps, RenameCascadeListInput, RenameCascadeListOutput, RenameCascadeWorkflowProps, RootGraphqlApiProps, RootHttpApiProps, SeedDemoDataLambdaProps, SeedDemoDataWorkflowProps, SeedSystemDataLambdaProps, SeedSystemDataWorkflowProps, StaticContentProps, StaticHostingProps, UserOnboardingWorkflowProps, WorkflowDedupTableProps };