@openhi/constructs 0.0.116 → 0.0.118

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.
@@ -2,7 +2,7 @@ import {
2
2
  handler,
3
3
  parseCurrentResourceKeys,
4
4
  shouldDropAsGlobalTableReplicationRecord
5
- } from "./chunk-X5MHU7DA.mjs";
5
+ } from "./chunk-I7IIPV5X.mjs";
6
6
  import "./chunk-CEOAGPYY.mjs";
7
7
  import "./chunk-LZOMFHX3.mjs";
8
8
  export {
package/lib/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { OPEN_HI_STAGE, OPEN_HI_DEPLOYMENT_TARGET_ROLE, OpenHiEnvironmentConfig, OpenHiConfig } from '@openhi/config';
2
- import { Stage, StageProps, App, AppProps, Stack, StackProps, RemovalPolicy } from 'aws-cdk-lib';
2
+ import { Stage, StageProps, App, AppProps, Stack, StackProps, RemovalPolicy, Duration } from 'aws-cdk-lib';
3
3
  import { IConstruct, Construct } from 'constructs';
4
4
  import { Certificate, CertificateProps, ICertificate } from 'aws-cdk-lib/aws-certificatemanager';
5
5
  import { HttpApiProps, HttpApi, IHttpApi, DomainName } from 'aws-cdk-lib/aws-apigatewayv2';
@@ -9,7 +9,7 @@ import { Key, KeyProps, IKey } from 'aws-cdk-lib/aws-kms';
9
9
  import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
10
10
  import { D as DynamoDbStreamKinesisRecord } from './dynamodb-stream-record-CJtV6a1t.mjs';
11
11
  import * as events from 'aws-cdk-lib/aws-events';
12
- import { EventBus, EventBusProps, Rule, IEventBus } from 'aws-cdk-lib/aws-events';
12
+ import { EventBus, Archive, EventBusProps, Rule, IEventBus } from 'aws-cdk-lib/aws-events';
13
13
  import * as kinesis from 'aws-cdk-lib/aws-kinesis';
14
14
  import * as kinesisfirehose from 'aws-cdk-lib/aws-kinesisfirehose';
15
15
  import * as s3 from 'aws-cdk-lib/aws-s3';
@@ -343,6 +343,15 @@ declare abstract class OpenHiService extends Stack {
343
343
  * Short hash unique to the environment and branch combination.
344
344
  */
345
345
  readonly branchHash: string;
346
+ /**
347
+ * Branch hash computed against {@link defaultReleaseBranch} rather than
348
+ * {@link branchName}. On the release branch this equals {@link branchHash};
349
+ * on every other branch it identifies the namespace the release-branch
350
+ * deploy of this service writes to. Use when looking up SSM parameters
351
+ * that only the release-branch stack publishes (e.g. shared static-hosting
352
+ * bucket ARN).
353
+ */
354
+ readonly releaseBranchHash: string;
346
355
  /**
347
356
  * Short hash unique to the specific stack/service.
348
357
  */
@@ -722,9 +731,14 @@ declare class WorkflowDedupConsumerNameInvalidError extends Error {
722
731
  constructor(message: string);
723
732
  }
724
733
 
725
- /**
726
- * @see sites/www-docs/content/packages/@openhi/constructs/components/event-bridge/data-event-bus.md
727
- */
734
+ interface DataEventBusOptions {
735
+ /**
736
+ * Retention for the bus's event archive. Defaults to 7 days. Pass
737
+ * `Duration.days(0)` (or omit and override the archive in a subclass)
738
+ * to disable archiving entirely.
739
+ */
740
+ readonly archiveRetention?: Duration;
741
+ }
728
742
  declare class DataEventBus extends EventBus {
729
743
  /*****************************************************************************
730
744
  *
@@ -734,7 +748,16 @@ declare class DataEventBus extends EventBus {
734
748
  *
735
749
  ****************************************************************************/
736
750
  static getEventBusName(scope: Construct): string;
737
- constructor(scope: Construct, props?: EventBusProps);
751
+ /**
752
+ * Replay archive of every event written to this bus, retained for the
753
+ * configured TTL (default 7 days). Enables EventBridge `StartReplay`
754
+ * for incident response and ad-hoc backfill.
755
+ *
756
+ * Named `replayArchive` rather than `archive` to avoid shadowing the
757
+ * inherited `EventBus.archive(id, options)` instance method.
758
+ */
759
+ readonly replayArchive: Archive;
760
+ constructor(scope: Construct, props?: (EventBusProps & DataEventBusOptions) | undefined);
738
761
  }
739
762
 
740
763
  /**
@@ -993,6 +1016,12 @@ declare class DiscoverableStringParameter extends StringParameter {
993
1016
  * Props for the StaticContent construct.
994
1017
  */
995
1018
  interface StaticContentProps {
1019
+ /**
1020
+ * Destination bucket the content is uploaded to. Callers resolve this
1021
+ * reference themselves so the construct doesn't need to know whether the
1022
+ * bucket was created in the same stack or imported across branches.
1023
+ */
1024
+ readonly bucket: IBucket;
996
1025
  /**
997
1026
  * Absolute path to directory containing content for the website.
998
1027
  */
@@ -1017,21 +1046,14 @@ interface StaticContentProps {
1017
1046
  * `<sub-domain>.<full-domain>`.
1018
1047
  */
1019
1048
  readonly fullDomain: string;
1020
- /**
1021
- * Service type used to look up the static-hosting bucket ARN via
1022
- * DiscoverableStringParameter.
1023
- *
1024
- * @default STATIC_HOSTING_SERVICE_TYPE ("website")
1025
- */
1026
- readonly serviceType?: string;
1027
1049
  }
1028
1050
  /**
1029
- * Static content uploader: deploys a local directory to the static-hosting
1051
+ * Static content uploader: deploys a local directory to a static-hosting
1030
1052
  * S3 bucket under `<sub-domain>.<full-domain>/<dest>` so each branch
1031
- * deploys to its own prefix without clobbering siblings. The bucket ARN is
1032
- * looked up via DiscoverableStringParameter so the uploader can run on a
1033
- * feature-branch stack while the bucket itself was provisioned by the
1034
- * release-branch service stack.
1053
+ * deploys to its own prefix without clobbering siblings. The destination
1054
+ * bucket is supplied by the caller, which lets the same construct run in
1055
+ * both same-stack (release-branch) and cross-stack/cross-branch
1056
+ * (feature-branch) contexts.
1035
1057
  */
1036
1058
  declare class StaticContent extends Construct {
1037
1059
  constructor(scope: Construct, id: string, props: StaticContentProps);
@@ -1942,6 +1964,17 @@ interface OpenHiWebsiteServiceProps extends OpenHiServiceProps {
1942
1964
  * @default - true on release branch, false otherwise
1943
1965
  */
1944
1966
  readonly createHostingInfrastructure?: boolean;
1967
+ /**
1968
+ * Whether to create the `StaticContent` uploader. Set to `false` to skip
1969
+ * it entirely on every branch — used as a one-shot bootstrap toggle while
1970
+ * the release-branch deploy of this service first creates the static-hosting
1971
+ * bucket and writes `STATIC_HOSTING_BUCKET_ARN` to SSM. Once that
1972
+ * parameter exists, flip back to `true` so feature-branch deploys can read
1973
+ * it and upload content under their per-branch sub-domain folder.
1974
+ *
1975
+ * @default true
1976
+ */
1977
+ readonly createStaticContent?: boolean;
1945
1978
  }
1946
1979
  /**
1947
1980
  * SSM parameter name suffix for the website's full domain
@@ -1998,16 +2031,23 @@ declare class OpenHiWebsiteService extends OpenHiService {
1998
2031
  */
1999
2032
  readonly staticHosting?: StaticHosting;
2000
2033
  /**
2001
- * The content uploader, always created.
2034
+ * The content uploader. Created on every deploy unless
2035
+ * {@link OpenHiWebsiteServiceProps.createStaticContent} is `false`, in
2036
+ * which case the property is `undefined` and the stack ships no
2037
+ * `BucketDeployment`. Used during release-branch bootstrap, before the
2038
+ * shared static-hosting bucket has been written to SSM for the first time.
2002
2039
  */
2003
- readonly staticContent: StaticContent;
2040
+ readonly staticContent?: StaticContent;
2004
2041
  constructor(ohEnv: OpenHiEnvironment, props: OpenHiWebsiteServiceProps);
2005
2042
  /**
2006
2043
  * Validates that config required for the website stack is present.
2007
2044
  */
2008
2045
  protected validateConfig(props: OpenHiWebsiteServiceProps): void;
2009
2046
  /**
2010
- * Looks up the child hosted zone published by the Global service.
2047
+ * Imports the website's hosted zone from config attributes (no SSM lookup).
2048
+ * The website attaches DNS records here on the release-branch deploy and
2049
+ * the same zone is imported on feature-branch deploys for any sub-domain
2050
+ * routing.
2011
2051
  * Override to customize.
2012
2052
  */
2013
2053
  protected createHostedZone(): IHostedZone;
@@ -2038,8 +2078,23 @@ declare class OpenHiWebsiteService extends OpenHiService {
2038
2078
  * Creates the StaticContent uploader. Always created so feature-branch
2039
2079
  * deploys can publish content to their own sub-domain folder against the
2040
2080
  * release-branch bucket.
2081
+ *
2082
+ * The destination bucket is resolved here so the construct never has to
2083
+ * branch on release-vs-feature: on the release branch we pass the
2084
+ * just-created {@link staticHosting} bucket directly (no SSM round-trip
2085
+ * within a single stack); on every other branch we look up the bucket
2086
+ * ARN published by the release-branch deploy, addressed against
2087
+ * {@link OpenHiService.releaseBranchHash}.
2041
2088
  */
2042
2089
  protected createStaticContent(): StaticContent;
2090
+ /**
2091
+ * Returns an {@link IBucket} pointing at the static-hosting bucket the
2092
+ * uploader writes to. On the release-branch deploy this is the bucket
2093
+ * just provisioned by {@link staticHosting}; on every other deploy it's
2094
+ * imported from the bucket ARN the release-branch deploy publishes to
2095
+ * SSM, addressed against {@link OpenHiService.releaseBranchHash}.
2096
+ */
2097
+ protected resolveStaticHostingBucket(): IBucket;
2043
2098
  }
2044
2099
 
2045
2100
  interface OwningDeleteCascadeLambdasProps {
@@ -2226,4 +2281,4 @@ declare class RenameCascadeWorkflow extends Construct {
2226
2281
  constructor(scope: Construct, props: RenameCascadeWorkflowProps);
2227
2282
  }
2228
2283
 
2229
- export { type BuildParameterNameProps, ChildHostedZone, type ChildHostedZoneProps, 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, DataEventBus, DataStoreHistoricalArchive, type DataStoreHistoricalArchiveProps, DataStorePostgresReplica, type DataStorePostgresReplicaProps, type DemoWorkspaceDataPlaneFixtures, DiscoverableStringParameter, type DiscoverableStringParameterProps, DynamoDbDataStore, type DynamoDbDataStoreProps, type FhirCurrentResourceChangeDetail, type GrantConsumerOptions, HostingMode, OPENHI_TAG_SUFFIX_BRANCH_NAME, OPENHI_TAG_SUFFIX_REPO_NAME, OPENHI_TAG_SUFFIX_SERVICE_TYPE, OPENHI_TAG_SUFFIX_STAGE_TYPE, OpenHiApp, type OpenHiAppProps, OpenHiAuthService, type OpenHiAuthServiceProps, OpenHiDataService, type OpenHiDataServiceProps, OpenHiEnvironment, type OpenHiEnvironmentProps, OpenHiGlobalService, type OpenHiGlobalServiceProps, OpenHiGraphqlService, type OpenHiGraphqlServiceProps, OpenHiRestApiService, type OpenHiRestApiServiceProps, OpenHiService, type OpenHiServiceProps, type OpenHiServiceType, OpenHiStage, type OpenHiStageProps, OpenHiWebsiteService, type OpenHiWebsiteServiceProps, OpsEventBus, OwningDeleteCascadeLambdas, type OwningDeleteCascadeLambdasProps, OwningDeleteCascadeWorkflow, type OwningDeleteCascadeWorkflowProps, POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME, POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME, POSTGRES_REPLICA_SECRET_ARN_SSM_NAME, PlatformDeployBridge, PlatformDeployBridgeLambda, type PlatformDeployBridgeLambdaProps, type PlatformDeployBridgeProps, PostAuthenticationLambda, PostConfirmationLambda, type PostConfirmationLambdaProps, PreTokenGenerationLambda, type PreTokenGenerationLambdaProps, ProvisionDefaultWorkspaceLambda, type ProvisionDefaultWorkspaceLambdaProps, REST_API_BASE_URL_SSM_NAME, RenameCascadeLambdas, type RenameCascadeLambdasProps, RenameCascadeWorkflow, type RenameCascadeWorkflowProps, RootGraphqlApi, type RootGraphqlApiProps, RootHostedZone, RootHttpApi, type RootHttpApiProps, RootWildcardCertificate, 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, type SeedDemoDataLambdaProps, SeedDemoDataWorkflow, type SeedDemoDataWorkflowProps, SeedSystemDataLambda, type SeedSystemDataLambdaProps, SeedSystemDataWorkflow, type SeedSystemDataWorkflowProps, StaticContent, type StaticContentProps, StaticHosting, type StaticHostingProps, UserOnboardingWorkflow, type UserOnboardingWorkflowProps, WorkflowDedupConsumerNameInvalidError, WorkflowDedupTable, WorkflowDedupTableDuplicateError, type WorkflowDedupTableProps, buildFhirCurrentResourceChangeDetail, getDynamoDbDataStoreTableName, getPostgresReplicaSchemaName, getWorkflowDedupTableName, openHiTagKey };
2284
+ export { type BuildParameterNameProps, ChildHostedZone, type ChildHostedZoneProps, 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, DataEventBus, type DataEventBusOptions, DataStoreHistoricalArchive, type DataStoreHistoricalArchiveProps, DataStorePostgresReplica, type DataStorePostgresReplicaProps, type DemoWorkspaceDataPlaneFixtures, DiscoverableStringParameter, type DiscoverableStringParameterProps, DynamoDbDataStore, type DynamoDbDataStoreProps, type FhirCurrentResourceChangeDetail, type GrantConsumerOptions, HostingMode, OPENHI_TAG_SUFFIX_BRANCH_NAME, OPENHI_TAG_SUFFIX_REPO_NAME, OPENHI_TAG_SUFFIX_SERVICE_TYPE, OPENHI_TAG_SUFFIX_STAGE_TYPE, OpenHiApp, type OpenHiAppProps, OpenHiAuthService, type OpenHiAuthServiceProps, OpenHiDataService, type OpenHiDataServiceProps, OpenHiEnvironment, type OpenHiEnvironmentProps, OpenHiGlobalService, type OpenHiGlobalServiceProps, OpenHiGraphqlService, type OpenHiGraphqlServiceProps, OpenHiRestApiService, type OpenHiRestApiServiceProps, OpenHiService, type OpenHiServiceProps, type OpenHiServiceType, OpenHiStage, type OpenHiStageProps, OpenHiWebsiteService, type OpenHiWebsiteServiceProps, OpsEventBus, OwningDeleteCascadeLambdas, type OwningDeleteCascadeLambdasProps, OwningDeleteCascadeWorkflow, type OwningDeleteCascadeWorkflowProps, POSTGRES_REPLICA_CLUSTER_ARN_SSM_NAME, POSTGRES_REPLICA_DATABASE_NAME_SSM_NAME, POSTGRES_REPLICA_SECRET_ARN_SSM_NAME, PlatformDeployBridge, PlatformDeployBridgeLambda, type PlatformDeployBridgeLambdaProps, type PlatformDeployBridgeProps, PostAuthenticationLambda, PostConfirmationLambda, type PostConfirmationLambdaProps, PreTokenGenerationLambda, type PreTokenGenerationLambdaProps, ProvisionDefaultWorkspaceLambda, type ProvisionDefaultWorkspaceLambdaProps, REST_API_BASE_URL_SSM_NAME, RenameCascadeLambdas, type RenameCascadeLambdasProps, RenameCascadeWorkflow, type RenameCascadeWorkflowProps, RootGraphqlApi, type RootGraphqlApiProps, RootHostedZone, RootHttpApi, type RootHttpApiProps, RootWildcardCertificate, 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, type SeedDemoDataLambdaProps, SeedDemoDataWorkflow, type SeedDemoDataWorkflowProps, SeedSystemDataLambda, type SeedSystemDataLambdaProps, SeedSystemDataWorkflow, type SeedSystemDataWorkflowProps, StaticContent, type StaticContentProps, StaticHosting, type StaticHostingProps, UserOnboardingWorkflow, type UserOnboardingWorkflowProps, WorkflowDedupConsumerNameInvalidError, WorkflowDedupTable, WorkflowDedupTableDuplicateError, type WorkflowDedupTableProps, buildFhirCurrentResourceChangeDetail, getDynamoDbDataStoreTableName, getPostgresReplicaSchemaName, getWorkflowDedupTableName, openHiTagKey };
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { RemovalPolicy, App, AppProps, Stage, StageProps, Stack, StackProps } from 'aws-cdk-lib';
1
+ import { Duration, RemovalPolicy, App, AppProps, Stage, StageProps, Stack, StackProps } from 'aws-cdk-lib';
2
2
  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';
@@ -8,7 +8,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';
10
10
  import * as events from 'aws-cdk-lib/aws-events';
11
- import { EventBus, EventBusProps, Rule, IEventBus } from 'aws-cdk-lib/aws-events';
11
+ import { EventBus, EventBusProps, Archive, Rule, IEventBus } from 'aws-cdk-lib/aws-events';
12
12
  import * as kinesis from 'aws-cdk-lib/aws-kinesis';
13
13
  import * as kinesisfirehose from 'aws-cdk-lib/aws-kinesisfirehose';
14
14
  import * as s3 from 'aws-cdk-lib/aws-s3';
@@ -980,6 +980,15 @@ declare abstract class OpenHiService extends Stack {
980
980
  * Short hash unique to the environment and branch combination.
981
981
  */
982
982
  readonly branchHash: string;
983
+ /**
984
+ * Branch hash computed against {@link defaultReleaseBranch} rather than
985
+ * {@link branchName}. On the release branch this equals {@link branchHash};
986
+ * on every other branch it identifies the namespace the release-branch
987
+ * deploy of this service writes to. Use when looking up SSM parameters
988
+ * that only the release-branch stack publishes (e.g. shared static-hosting
989
+ * bucket ARN).
990
+ */
991
+ readonly releaseBranchHash: string;
983
992
  /**
984
993
  * Short hash unique to the specific stack/service.
985
994
  */
@@ -1359,9 +1368,14 @@ declare class WorkflowDedupConsumerNameInvalidError extends Error {
1359
1368
  constructor(message: string);
1360
1369
  }
1361
1370
 
1362
- /**
1363
- * @see sites/www-docs/content/packages/@openhi/constructs/components/event-bridge/data-event-bus.md
1364
- */
1371
+ interface DataEventBusOptions {
1372
+ /**
1373
+ * Retention for the bus's event archive. Defaults to 7 days. Pass
1374
+ * `Duration.days(0)` (or omit and override the archive in a subclass)
1375
+ * to disable archiving entirely.
1376
+ */
1377
+ readonly archiveRetention?: Duration;
1378
+ }
1365
1379
  declare class DataEventBus extends EventBus {
1366
1380
  /*****************************************************************************
1367
1381
  *
@@ -1371,7 +1385,16 @@ declare class DataEventBus extends EventBus {
1371
1385
  *
1372
1386
  ****************************************************************************/
1373
1387
  static getEventBusName(scope: Construct): string;
1374
- constructor(scope: Construct, props?: EventBusProps);
1388
+ /**
1389
+ * Replay archive of every event written to this bus, retained for the
1390
+ * configured TTL (default 7 days). Enables EventBridge `StartReplay`
1391
+ * for incident response and ad-hoc backfill.
1392
+ *
1393
+ * Named `replayArchive` rather than `archive` to avoid shadowing the
1394
+ * inherited `EventBus.archive(id, options)` instance method.
1395
+ */
1396
+ readonly replayArchive: Archive;
1397
+ constructor(scope: Construct, props?: (EventBusProps & DataEventBusOptions) | undefined);
1375
1398
  }
1376
1399
 
1377
1400
  /**
@@ -1630,6 +1653,12 @@ declare class DiscoverableStringParameter extends StringParameter {
1630
1653
  * Props for the StaticContent construct.
1631
1654
  */
1632
1655
  interface StaticContentProps {
1656
+ /**
1657
+ * Destination bucket the content is uploaded to. Callers resolve this
1658
+ * reference themselves so the construct doesn't need to know whether the
1659
+ * bucket was created in the same stack or imported across branches.
1660
+ */
1661
+ readonly bucket: IBucket;
1633
1662
  /**
1634
1663
  * Absolute path to directory containing content for the website.
1635
1664
  */
@@ -1654,21 +1683,14 @@ interface StaticContentProps {
1654
1683
  * `<sub-domain>.<full-domain>`.
1655
1684
  */
1656
1685
  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
1686
  }
1665
1687
  /**
1666
- * Static content uploader: deploys a local directory to the static-hosting
1688
+ * Static content uploader: deploys a local directory to a static-hosting
1667
1689
  * 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.
1690
+ * deploys to its own prefix without clobbering siblings. The destination
1691
+ * bucket is supplied by the caller, which lets the same construct run in
1692
+ * both same-stack (release-branch) and cross-stack/cross-branch
1693
+ * (feature-branch) contexts.
1672
1694
  */
1673
1695
  declare class StaticContent extends Construct {
1674
1696
  constructor(scope: Construct, id: string, props: StaticContentProps);
@@ -2579,6 +2601,17 @@ interface OpenHiWebsiteServiceProps extends OpenHiServiceProps {
2579
2601
  * @default - true on release branch, false otherwise
2580
2602
  */
2581
2603
  readonly createHostingInfrastructure?: boolean;
2604
+ /**
2605
+ * Whether to create the `StaticContent` uploader. Set to `false` to skip
2606
+ * it entirely on every branch — used as a one-shot bootstrap toggle while
2607
+ * the release-branch deploy of this service first creates the static-hosting
2608
+ * bucket and writes `STATIC_HOSTING_BUCKET_ARN` to SSM. Once that
2609
+ * parameter exists, flip back to `true` so feature-branch deploys can read
2610
+ * it and upload content under their per-branch sub-domain folder.
2611
+ *
2612
+ * @default true
2613
+ */
2614
+ readonly createStaticContent?: boolean;
2582
2615
  }
2583
2616
  /**
2584
2617
  * SSM parameter name suffix for the website's full domain
@@ -2635,16 +2668,23 @@ declare class OpenHiWebsiteService extends OpenHiService {
2635
2668
  */
2636
2669
  readonly staticHosting?: StaticHosting;
2637
2670
  /**
2638
- * The content uploader, always created.
2671
+ * The content uploader. Created on every deploy unless
2672
+ * {@link OpenHiWebsiteServiceProps.createStaticContent} is `false`, in
2673
+ * which case the property is `undefined` and the stack ships no
2674
+ * `BucketDeployment`. Used during release-branch bootstrap, before the
2675
+ * shared static-hosting bucket has been written to SSM for the first time.
2639
2676
  */
2640
- readonly staticContent: StaticContent;
2677
+ readonly staticContent?: StaticContent;
2641
2678
  constructor(ohEnv: OpenHiEnvironment, props: OpenHiWebsiteServiceProps);
2642
2679
  /**
2643
2680
  * Validates that config required for the website stack is present.
2644
2681
  */
2645
2682
  protected validateConfig(props: OpenHiWebsiteServiceProps): void;
2646
2683
  /**
2647
- * Looks up the child hosted zone published by the Global service.
2684
+ * Imports the website's hosted zone from config attributes (no SSM lookup).
2685
+ * The website attaches DNS records here on the release-branch deploy and
2686
+ * the same zone is imported on feature-branch deploys for any sub-domain
2687
+ * routing.
2648
2688
  * Override to customize.
2649
2689
  */
2650
2690
  protected createHostedZone(): IHostedZone;
@@ -2675,8 +2715,23 @@ declare class OpenHiWebsiteService extends OpenHiService {
2675
2715
  * Creates the StaticContent uploader. Always created so feature-branch
2676
2716
  * deploys can publish content to their own sub-domain folder against the
2677
2717
  * release-branch bucket.
2718
+ *
2719
+ * The destination bucket is resolved here so the construct never has to
2720
+ * branch on release-vs-feature: on the release branch we pass the
2721
+ * just-created {@link staticHosting} bucket directly (no SSM round-trip
2722
+ * within a single stack); on every other branch we look up the bucket
2723
+ * ARN published by the release-branch deploy, addressed against
2724
+ * {@link OpenHiService.releaseBranchHash}.
2678
2725
  */
2679
2726
  protected createStaticContent(): StaticContent;
2727
+ /**
2728
+ * Returns an {@link IBucket} pointing at the static-hosting bucket the
2729
+ * uploader writes to. On the release-branch deploy this is the bucket
2730
+ * just provisioned by {@link staticHosting}; on every other deploy it's
2731
+ * imported from the bucket ARN the release-branch deploy publishes to
2732
+ * SSM, addressed against {@link OpenHiService.releaseBranchHash}.
2733
+ */
2734
+ protected resolveStaticHostingBucket(): IBucket;
2680
2735
  }
2681
2736
 
2682
2737
  interface OwningDeleteCascadeLambdasProps {
@@ -2864,4 +2919,4 @@ declare class RenameCascadeWorkflow extends Construct {
2864
2919
  }
2865
2920
 
2866
2921
  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 };
2922
+ export type { BridgedStatus, BuildParameterNameProps, CascadeChunkInput, CascadeFinalizeInput, CascadeFinalizeOutput, CascadeListInput, CascadeListOutput, ChildHostedZoneProps, CloudFormationStackStatusChangeDetail, DataEventBusOptions, 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 };