@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.41
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.
- package/README.md +44 -10
- package/executors.json +21 -1
- package/generators.json +10 -0
- package/package.json +31 -7
- package/src/aws/child-environment.d.ts +10 -0
- package/src/aws/child-environment.js +77 -0
- package/src/aws/identity.d.ts +13 -0
- package/src/aws/identity.js +41 -0
- package/src/aws-authority/index.d.ts +2 -0
- package/src/aws-authority/index.js +6 -0
- package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
- package/src/aws-authority/lambda-policy-ordering.js +56 -0
- package/src/aws-authority/stage-authority.d.ts +248 -0
- package/src/aws-authority/stage-authority.js +3558 -0
- package/src/blueprints/external-sandbox.d.ts +1 -1
- package/src/blueprints/external-sandbox.js +21 -9
- package/src/blueprints/manifest.d.ts +1 -1
- package/src/blueprints/resolver.js +28 -15
- package/src/cli/bootstrap.d.ts +1 -1
- package/src/cli/deploy-runtime.d.ts +30 -0
- package/src/cli/deploy-runtime.js +174 -0
- package/src/cli/dev-command.d.ts +18 -4
- package/src/cli/dev-command.js +71 -0
- package/src/cli/main.d.ts +9 -1
- package/src/cli/main.js +157 -24
- package/src/cli/output.d.ts +1 -1
- package/src/cli/output.js +1 -1
- package/src/cli/personal-secret-runtime.d.ts +12 -0
- package/src/cli/personal-secret-runtime.js +18 -3
- package/src/cli/secret-terminal.js +1 -1
- package/src/container-images.d.ts +1 -1
- package/src/container-images.js +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +20 -6
- package/src/developer-agent/git-inspection.d.ts +6 -2
- package/src/developer-agent/git-inspection.js +78 -6
- package/src/developer-agent/model.d.ts +5 -3
- package/src/developer-agent/model.js +4 -4
- package/src/developer-agent/operation-registry.d.ts +15 -0
- package/src/developer-agent/operation-registry.js +342 -49
- package/src/developer-agent/planning.d.ts +8 -1
- package/src/developer-agent/planning.js +39 -16
- package/src/developer-agent/preview-changes.d.ts +2 -0
- package/src/developer-agent/preview-changes.js +14 -2
- package/src/developer-agent/preview-source.js +3 -0
- package/src/developer-agent/validation.js +25 -9
- package/src/developer-agent/workspace-inspection.js +60 -5
- package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +57 -2
- package/src/executors/dev-doctor/dev-doctor.js +13 -6
- package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
- package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
- package/src/executors/dev-task-cleanup/schema.json +9 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
- package/src/executors/fleet/fleet.js +1 -1
- package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
- package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
- package/src/executors/foundation-preflight/schema.json +5 -0
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
- package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
- package/src/executors/foundation-profile-preflight/schema.json +15 -4
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
- package/src/executors/foundation-remove-preflight/schema.json +6 -1
- package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
- package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
- package/src/executors/github-bootstrap/schema.json +7 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
- package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
- package/src/executors/infrastructure-plan/schema.json +12 -52
- package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
- package/src/executors/local-deploy/federated-credential-transport.js +252 -0
- package/src/executors/local-deploy/local-approval.d.ts +18 -0
- package/src/executors/local-deploy/local-approval.js +39 -0
- package/src/executors/local-deploy/local-deploy.d.ts +112 -0
- package/src/executors/local-deploy/local-deploy.js +1404 -0
- package/src/executors/local-deploy/schema.json +70 -0
- package/src/executors/refresh/refresh.js +2 -2
- package/src/executors/remove/remove.js +2 -2
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
- package/src/executors/router-waf-rehearsal/schema.json +29 -0
- package/src/executors/secret-initialize/schema.json +42 -0
- package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
- package/src/executors/secret-initialize/secret-initialize.js +297 -0
- package/src/executors/secret-metadata/schema.json +5 -0
- package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
- package/src/executors/secret-metadata/secret-metadata.js +129 -30
- package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
- package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +163 -0
- package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
- package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +46 -6
- package/src/executors/sst-lifecycle/run-sst-command.js +750 -71
- package/src/executors/sst-lifecycle/schema.json +8 -1
- package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
- package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/executors/unlock/unlock.js +2 -2
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/cost-estimate.d.ts +170 -0
- package/src/foundation/cost-estimate.js +683 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +4 -0
- package/src/foundation/index.js +11 -0
- package/src/foundation/local-database-contract.d.ts +20 -0
- package/src/foundation/local-database-contract.js +262 -13
- package/src/foundation/local-private-smoke-access.d.ts +20 -0
- package/src/foundation/local-private-smoke-access.js +197 -0
- package/src/foundation/logging-preflight.js +1 -1
- package/src/foundation/logging.d.ts +3 -1
- package/src/foundation/logging.js +1 -1
- package/src/foundation/partial-state.d.ts +10 -0
- package/src/foundation/partial-state.js +21 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.d.ts +25 -0
- package/src/foundation/private-smoke-access.js +135 -0
- package/src/foundation/private-smoke-admission.d.ts +45 -0
- package/src/foundation/private-smoke-admission.js +180 -0
- package/src/foundation/private-smoke-control-plane.d.ts +18 -0
- package/src/foundation/private-smoke-control-plane.js +184 -0
- package/src/foundation/provision-database-bindings.d.ts +5 -0
- package/src/foundation/provision-database-bindings.js +41 -8
- package/src/foundation/provision-logical-database.js +15 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
- package/src/foundation/router-waf-rate-rehearsal.js +210 -0
- package/src/foundation/router-waf.d.ts +149 -0
- package/src/foundation/router-waf.js +809 -0
- package/src/foundation/stages.d.ts +1 -0
- package/src/foundation/stages.js +11 -0
- package/src/generators/blueprint/blueprint.d.ts +5 -0
- package/src/generators/blueprint/blueprint.js +102 -0
- package/src/generators/blueprint/files.d.ts +6 -0
- package/src/generators/blueprint/files.js +217 -0
- package/src/generators/blueprint/schema.d.ts +4 -0
- package/src/generators/blueprint/schema.json +18 -0
- package/src/generators/formatting.d.ts +8 -0
- package/src/generators/formatting.js +141 -0
- package/src/generators/function/function.js +38 -17
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/post-generation-install.js +2 -2
- package/src/generators/preset/dependency-overrides.d.ts +8 -0
- package/src/generators/preset/dependency-overrides.js +55 -0
- package/src/generators/preset/generator.js +43 -3
- package/src/generators/preset/schema.d.ts +10 -0
- package/src/generators/preset/schema.json +47 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +324 -0
- package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
- package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
- package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
- package/src/generators/preset/workspace-files-ci-install.js +196 -0
- package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
- package/src/generators/preset/workspace-files-developer-agent.js +162 -44
- package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
- package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
- package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
- package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
- package/src/generators/preset/workspace-files-performance-cost.js +8 -8
- package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
- package/src/generators/preset/workspace-files-performance-load.js +39 -25
- package/src/generators/preset/workspace-files-shared-operation-claims.d.ts +10 -0
- package/src/generators/preset/workspace-files-shared-operation-claims.js +59 -0
- package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +529 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +65 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +2507 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
- package/src/generators/preset/workspace-files-thin-docs.js +370 -0
- package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
- package/src/generators/preset/workspace-files-thin-release.js +26 -0
- package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
- package/src/generators/preset/workspace-files.d.ts +18 -2
- package/src/generators/preset/workspace-files.js +1525 -609
- package/src/generators/repository-policy/repository-policy.js +235 -5
- package/src/generators/repository-policy/schema.d.ts +10 -0
- package/src/generators/repository-policy/schema.json +80 -4
- package/src/generators/repository-policy/tree-policy.d.ts +3 -0
- package/src/generators/repository-policy/tree-policy.js +25 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +49 -11
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +130 -414
- package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
- package/src/generators/slice/built-in-plan-authorization-files.js +102 -334
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +975 -233
- package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
- package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
- package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +176 -1200
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +25 -2
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
- package/src/generators/slice/built-in-plan-frontend-files.js +14 -3
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -730
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +75 -14
- package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
- package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
- package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
- package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
- package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
- package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
- package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
- package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
- package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
- package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
- package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +159 -29
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +585 -97
- package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
- package/src/generators/slice/built-in-plan-project-files.js +141 -135
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +310 -70
- package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-reliability-files.js +283 -44
- package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
- package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
- package/src/generators/slice/built-in-plan-shared.js +41 -19
- package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
- package/src/generators/slice/built-in-plan-sql-events.js +276 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +304 -172
- package/src/generators/slice/built-in-plan-testing-persistence-event-files.d.ts +7 -0
- package/src/generators/slice/built-in-plan-testing-persistence-event-files.js +487 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +180 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
- package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
- package/src/generators/slice/built-in-plan-verification-files.js +76 -2
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +223 -16
- package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
- package/src/generators/slice/built-in-plan.d.ts +11 -1
- package/src/generators/slice/built-in-plan.js +83 -30
- package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
- package/src/generators/slice/data-policy-review-seed.js +22 -0
- package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
- package/src/generators/slice/deployed-smoke-readiness.js +214 -0
- package/src/generators/slice/local-source-identity.d.ts +2 -0
- package/src/generators/slice/local-source-identity.js +31 -0
- package/src/generators/slice/persistence-contract.d.ts +14 -0
- package/src/generators/slice/persistence-contract.js +32 -0
- package/src/generators/slice/slice.js +61 -50
- package/src/generators/sql/schema.d.ts +7 -0
- package/src/generators/sql/schema.json +38 -0
- package/src/generators/sql/sql.d.ts +6 -0
- package/src/generators/sql/sql.js +53 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
- package/src/generators/upgrade/upgrade.d.ts +15 -1
- package/src/generators/upgrade/upgrade.js +435 -44
- package/src/generators/workload/frozen-container.d.ts +1 -1
- package/src/generators/workload/performance-registration.d.ts +1 -0
- package/src/generators/workload/performance-registration.js +9 -11
- package/src/generators/workload/service-performance-files.d.ts +1 -0
- package/src/generators/workload/service-performance-files.js +27 -7
- package/src/generators/workload/workload.d.ts +1 -1
- package/src/generators/workload/workload.js +105 -29
- package/src/git-policy/action-pins.d.ts +5 -0
- package/src/git-policy/action-pins.js +5 -0
- package/src/git-policy/github-bootstrap.d.ts +48 -8
- package/src/git-policy/github-bootstrap.js +344 -176
- package/src/git-policy/routing.d.ts +7 -1
- package/src/git-policy/routing.js +62 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/infrastructure-change/local-capability.d.ts +73 -0
- package/src/infrastructure-change/local-capability.js +114 -0
- package/src/infrastructure-change/model.d.ts +25 -4
- package/src/infrastructure-change/model.js +1 -0
- package/src/infrastructure-change/normalize.d.ts +4 -0
- package/src/infrastructure-change/normalize.js +47 -7
- package/src/infrastructure-change/plan.d.ts +30 -3
- package/src/infrastructure-change/plan.js +323 -13
- package/src/infrastructure-change/risk.d.ts +3 -1
- package/src/infrastructure-change/risk.js +96 -16
- package/src/local-dev/browser-verification.d.ts +37 -0
- package/src/local-dev/browser-verification.js +281 -0
- package/src/local-dev/contracts.d.ts +10 -1
- package/src/local-dev/contracts.js +114 -13
- package/src/local-dev/dev-command-core.js +24 -5
- package/src/local-dev/docker-credential-health.d.ts +14 -0
- package/src/local-dev/docker-credential-health.js +94 -0
- package/src/local-dev/environment-inspector.d.ts +7 -0
- package/src/local-dev/environment-inspector.js +42 -15
- package/src/local-dev/environment-state.js +2 -2
- package/src/local-dev/errors.d.ts +1 -1
- package/src/local-dev/errors.js +2 -0
- package/src/local-dev/fleet-client.js +2 -2
- package/src/local-dev/fleet-configuration.js +57 -25
- package/src/local-dev/fleet-inventory.js +58 -22
- package/src/local-dev/fleet-ipc.d.ts +7 -0
- package/src/local-dev/fleet-ipc.js +14 -2
- package/src/local-dev/fleet-launcher.d.ts +6 -0
- package/src/local-dev/fleet-launcher.js +16 -4
- package/src/local-dev/fleet-logs.js +50 -22
- package/src/local-dev/fleet-process.d.ts +20 -1
- package/src/local-dev/fleet-process.js +197 -41
- package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
- package/src/local-dev/fleet-runner-evidence.js +56 -0
- package/src/local-dev/fleet-runtime.js +268 -229
- package/src/local-dev/fleet-session.d.ts +2 -0
- package/src/local-dev/fleet-session.js +28 -11
- package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
- package/src/local-dev/fleet-state.d.ts +5 -2
- package/src/local-dev/fleet-state.js +25 -4
- package/src/local-dev/fleet-supervisor.d.ts +3 -0
- package/src/local-dev/fleet-supervisor.js +66 -11
- package/src/local-dev/fleet-web-start.d.ts +12 -0
- package/src/local-dev/fleet-web-start.js +48 -0
- package/src/local-dev/identity.js +3 -14
- package/src/local-dev/index.d.ts +1 -0
- package/src/local-dev/index.js +1 -0
- package/src/local-dev/native-completion.d.ts +9 -0
- package/src/local-dev/native-completion.js +130 -0
- package/src/local-dev/nx-workspace.d.ts +4 -2
- package/src/local-dev/nx-workspace.js +11 -6
- package/src/local-dev/personal-stage.d.ts +4 -5
- package/src/local-dev/personal-stage.js +6 -54
- package/src/local-dev/port-claims.d.ts +13 -0
- package/src/local-dev/port-claims.js +46 -0
- package/src/local-dev/ports.d.ts +14 -2
- package/src/local-dev/ports.js +78 -3
- package/src/local-dev/private-state.d.ts +11 -0
- package/src/local-dev/private-state.js +146 -40
- package/src/local-dev/process-group.d.ts +4 -0
- package/src/local-dev/process-group.js +29 -0
- package/src/local-dev/process-identity.d.ts +8 -0
- package/src/local-dev/process-identity.js +31 -1
- package/src/local-dev/proxy.js +11 -12
- package/src/local-dev/runtime-paths.js +1 -1
- package/src/local-dev/slice-claim.js +1 -1
- package/src/local-dev/slice-runner.d.ts +15 -6
- package/src/local-dev/slice-runner.js +189 -54
- package/src/local-dev/task-attachment.d.ts +17 -0
- package/src/local-dev/task-attachment.js +73 -0
- package/src/local-dev/task-authority.d.ts +10 -0
- package/src/local-dev/task-authority.js +27 -0
- package/src/local-dev/task-identity.d.ts +33 -0
- package/src/local-dev/task-identity.js +418 -0
- package/src/local-dev/task-native-writer.d.ts +18 -0
- package/src/local-dev/task-native-writer.js +329 -0
- package/src/local-dev/tls.js +8 -2
- package/src/local-dev/web-launch.d.ts +9 -0
- package/src/local-dev/web-launch.js +130 -0
- package/src/ownership/composition.d.ts +2 -1
- package/src/ownership/composition.js +1 -0
- package/src/performance/cost-collection.d.ts +1 -1
- package/src/performance/cost-collection.js +4 -2
- package/src/performance/cost-controls.d.ts +8 -4
- package/src/performance/cost-controls.js +39 -28
- package/src/performance/evidence.d.ts +1 -1
- package/src/performance/evidence.js +5 -3
- package/src/performance/load-safety.js +5 -3
- package/src/performance/model.d.ts +4 -4
- package/src/performance/model.js +4 -5
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/release/index.d.ts +0 -2
- package/src/release/index.js +0 -2
- package/src/release/source-authority.d.ts +5 -5
- package/src/release/source-authority.js +141 -124
- package/src/repository-policy/aurora-preflight.d.ts +1 -1
- package/src/repository-policy/aurora-preflight.js +4 -1
- package/src/repository-policy/capacity-migration.d.ts +3 -0
- package/src/repository-policy/capacity-migration.js +21 -0
- package/src/repository-policy/deployment-plan.d.ts +4 -1
- package/src/repository-policy/deployment-plan.js +9 -0
- package/src/repository-policy/foundation-profile.js +10 -1
- package/src/repository-policy/policy.d.ts +57 -3
- package/src/repository-policy/policy.js +497 -11
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/performance-policy-v1.json +3 -3
- package/src/schemas/repository-policy-v1.json +130 -6
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/adapters.d.ts +7 -2
- package/src/secrets/adapters.js +34 -3
- package/src/secrets/aws-control-plane.d.ts +10 -1
- package/src/secrets/aws-control-plane.js +67 -0
- package/src/secrets/generated-aws-control-plane.d.ts +23 -0
- package/src/secrets/generated-aws-control-plane.js +259 -0
- package/src/secrets/metadata.js +38 -10
- package/src/secrets/model.d.ts +8 -1
- package/src/secrets/model.js +24 -3
- package/src/secrets/operator.d.ts +91 -3
- package/src/secrets/operator.js +463 -13
- package/src/secrets/personal-command.d.ts +18 -2
- package/src/secrets/personal-command.js +66 -12
- package/src/secrets/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/verification.js +15 -2
- package/src/secrets/workload-access.js +10 -2
- package/src/sst-environment-source-format.d.ts +6 -0
- package/src/sst-environment-source-format.js +199 -0
- package/src/supply-chain/action-pins.js +61 -7
- package/src/supply-chain/blueprint-trust-git.js +85 -24
- package/src/supply-chain/blueprint-verification-authority.js +55 -3
- package/src/supply-chain/build-output-bounds.d.ts +2 -0
- package/src/supply-chain/build-output-bounds.js +12 -0
- package/src/supply-chain/build-output.d.ts +7 -1
- package/src/supply-chain/build-output.js +177 -24
- package/src/supply-chain/ecr-scanning.d.ts +5 -3
- package/src/supply-chain/ecr-scanning.js +11 -7
- package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
- package/src/supply-chain/ecs-deployed-image.js +6 -4
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/supply-chain/generated-command.js +1 -0
- package/src/supply-chain/generated-container-release-command.js +1285 -124
- package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js +200 -93
- package/src/supply-chain/generated-files.js +25 -14
- package/src/supply-chain/generated-scanner-command.js +2 -1
- package/src/supply-chain/index.d.ts +1 -1
- package/src/supply-chain/index.js +2 -1
- package/src/supply-chain/sbom.d.ts +1 -1
- package/src/supply-chain/sbom.js +30 -5
- package/src/supply-chain/scanner.js +3 -0
- package/src/testing-evidence/fixture-scope.d.ts +2 -1
- package/src/testing-evidence/fixture-scope.js +4 -2
- package/src/testing-evidence/result.d.ts +2 -1
- package/src/testing-evidence/result.js +18 -4
- package/src/workload-roles/account-baseline.d.ts +11 -0
- package/src/workload-roles/account-baseline.js +253 -16
- package/src/workload-roles/authority.d.ts +3 -1
- package/src/workload-roles/authority.js +48 -2
- package/src/workload-roles/aws-s3-state.js +27 -0
- package/src/workload-roles/boundary.d.ts +2 -1
- package/src/workload-roles/boundary.js +9 -2
- package/src/workload-roles/handler.js +52 -24
- package/src/workload-roles/index.d.ts +10 -17
- package/src/workload-roles/index.js +5 -18
- package/src/workload-roles/injection.js +1 -1
- package/src/workload-roles/provisioner.js +12 -4
- package/src/workload-roles/registration.d.ts +1 -0
- package/src/workload-roles/registration.js +5 -0
- package/src/workload-roles/stage-boundary.js +1 -1
- package/src/workload-roles/standard-slice.js +3 -3
- package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
- package/src/workspace-deployment/affected-lifecycle.js +84 -0
- package/src/workspace-deployment/identity.d.ts +3 -0
- package/src/workspace-deployment/identity.js +22 -0
- package/src/workspace-deployment/index.d.ts +4 -0
- package/src/workspace-deployment/index.js +8 -0
- package/src/workspace-deployment/migration-evidence.d.ts +29 -0
- package/src/workspace-deployment/migration-evidence.js +83 -0
- package/src/workspace-deployment/migration.d.ts +27 -0
- package/src/workspace-deployment/migration.js +109 -0
- package/src/workspace-deployment/ownership.d.ts +81 -0
- package/src/workspace-deployment/ownership.js +381 -0
- package/src/api-contract/baseline-update.js.map +0 -1
- package/src/api-contract/compatibility.js.map +0 -1
- package/src/api-contract/contract-graph.js.map +0 -1
- package/src/api-contract/evidence.js.map +0 -1
- package/src/api-contract/index.js.map +0 -1
- package/src/api-contract/model.fixtures.d.ts +0 -2
- package/src/api-contract/model.fixtures.js +0 -81
- package/src/api-contract/model.fixtures.js.map +0 -1
- package/src/api-contract/model.js.map +0 -1
- package/src/api-contract/rollout.js.map +0 -1
- package/src/authorization/compatibility.js.map +0 -1
- package/src/authorization/index.js.map +0 -1
- package/src/blueprints/execution.js.map +0 -1
- package/src/blueprints/external-sandbox.js.map +0 -1
- package/src/blueprints/index.js.map +0 -1
- package/src/blueprints/inputs.js.map +0 -1
- package/src/blueprints/manifest.js.map +0 -1
- package/src/blueprints/resolver.js.map +0 -1
- package/src/blueprints/transitions.js.map +0 -1
- package/src/cli/agent-command.js.map +0 -1
- package/src/cli/agent-runtime.js.map +0 -1
- package/src/cli/blueprint-authority.js.map +0 -1
- package/src/cli/blueprint-command.js.map +0 -1
- package/src/cli/bootstrap.js.map +0 -1
- package/src/cli/dev-command.js.map +0 -1
- package/src/cli/main.js.map +0 -1
- package/src/cli/output.js.map +0 -1
- package/src/cli/personal-secret-runtime.js.map +0 -1
- package/src/cli/secret-terminal.js.map +0 -1
- package/src/container-images.js.map +0 -1
- package/src/data-lifecycle/index.js.map +0 -1
- package/src/data-lifecycle/model.fixtures.d.ts +0 -2
- package/src/data-lifecycle/model.fixtures.js +0 -244
- package/src/data-lifecycle/model.fixtures.js.map +0 -1
- package/src/data-lifecycle/model.js.map +0 -1
- package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
- package/src/data-lifecycle/validation.js.map +0 -1
- package/src/database-retirement/contract.js.map +0 -1
- package/src/database-retirement/index.js.map +0 -1
- package/src/deterministic-order.js.map +0 -1
- package/src/developer-agent/context.js.map +0 -1
- package/src/developer-agent/generator-planning.js.map +0 -1
- package/src/developer-agent/generator-preview.js.map +0 -1
- package/src/developer-agent/git-inspection.js.map +0 -1
- package/src/developer-agent/handoff.js.map +0 -1
- package/src/developer-agent/index.js.map +0 -1
- package/src/developer-agent/model.js.map +0 -1
- package/src/developer-agent/operation-registry.js.map +0 -1
- package/src/developer-agent/ordering.js.map +0 -1
- package/src/developer-agent/planning.js.map +0 -1
- package/src/developer-agent/preview-changes.js.map +0 -1
- package/src/developer-agent/preview-source.js.map +0 -1
- package/src/developer-agent/validation.js.map +0 -1
- package/src/developer-agent/workspace-inspection.js.map +0 -1
- package/src/developer-agent/workspace-path.js.map +0 -1
- package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
- package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
- package/src/executors/deploy/deploy.js.map +0 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
- package/src/executors/dev/dev.js.map +0 -1
- package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
- package/src/executors/dev-setup/dev-setup.js.map +0 -1
- package/src/executors/developer-context/developer-context.js.map +0 -1
- package/src/executors/fleet/fleet.js.map +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
- package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
- package/src/executors/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
- package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
- package/src/executors/unlock/unlock.js.map +0 -1
- package/src/executors/work-markers/work-markers.js.map +0 -1
- package/src/foundation/discovery.js.map +0 -1
- package/src/foundation/index.js.map +0 -1
- package/src/foundation/local-database-contract.js.map +0 -1
- package/src/foundation/logging-preflight.js.map +0 -1
- package/src/foundation/logging.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/provision-database-bindings.js.map +0 -1
- package/src/foundation/provision-logical-database.js.map +0 -1
- package/src/foundation/requirements.js.map +0 -1
- package/src/foundation/router-origin-proof.js.map +0 -1
- package/src/foundation/stages.js.map +0 -1
- package/src/frontend-security/index.js.map +0 -1
- package/src/frontend-security/security-headers.js.map +0 -1
- package/src/generators/feature-registry.js.map +0 -1
- package/src/generators/function/function.js.map +0 -1
- package/src/generators/job/job.js.map +0 -1
- package/src/generators/logging-registry.js.map +0 -1
- package/src/generators/post-generation-install.js.map +0 -1
- package/src/generators/preset/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
- package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
- package/src/generators/preset/workspace-files.js.map +0 -1
- package/src/generators/repository-policy/repository-policy.js.map +0 -1
- package/src/generators/service/service.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-shared.js.map +0 -1
- package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
- package/src/generators/slice/built-in-plan.js.map +0 -1
- package/src/generators/slice/slice.js.map +0 -1
- package/src/generators/upgrade/upgrade.js.map +0 -1
- package/src/generators/workload/frozen-container.js.map +0 -1
- package/src/generators/workload/performance-registration.js.map +0 -1
- package/src/generators/workload/reliability-registration.js.map +0 -1
- package/src/generators/workload/service-performance-files.js.map +0 -1
- package/src/generators/workload/workload.js.map +0 -1
- package/src/git-policy/action-pins.js.map +0 -1
- package/src/git-policy/github-bootstrap.js.map +0 -1
- package/src/git-policy/index.js.map +0 -1
- package/src/git-policy/routing.js.map +0 -1
- package/src/index.js.map +0 -1
- package/src/infrastructure-change/convergence.js.map +0 -1
- package/src/infrastructure-change/drift.js.map +0 -1
- package/src/infrastructure-change/index.js.map +0 -1
- package/src/infrastructure-change/model.js.map +0 -1
- package/src/infrastructure-change/normalize.js.map +0 -1
- package/src/infrastructure-change/plan.js.map +0 -1
- package/src/infrastructure-change/risk.js.map +0 -1
- package/src/infrastructure-change/summary.js.map +0 -1
- package/src/local-dev/context-discovery.js.map +0 -1
- package/src/local-dev/contract-validation.js.map +0 -1
- package/src/local-dev/contracts.js.map +0 -1
- package/src/local-dev/control-contract.js.map +0 -1
- package/src/local-dev/dev-command-core.js.map +0 -1
- package/src/local-dev/effects.js.map +0 -1
- package/src/local-dev/environment-inspector.js.map +0 -1
- package/src/local-dev/environment-state.js.map +0 -1
- package/src/local-dev/errors.js.map +0 -1
- package/src/local-dev/fleet-client.js.map +0 -1
- package/src/local-dev/fleet-configuration.js.map +0 -1
- package/src/local-dev/fleet-inventory.js.map +0 -1
- package/src/local-dev/fleet-ipc.js.map +0 -1
- package/src/local-dev/fleet-launcher.js.map +0 -1
- package/src/local-dev/fleet-lock.js.map +0 -1
- package/src/local-dev/fleet-logs.js.map +0 -1
- package/src/local-dev/fleet-process.js.map +0 -1
- package/src/local-dev/fleet-runtime.js.map +0 -1
- package/src/local-dev/fleet-session.js.map +0 -1
- package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
- package/src/local-dev/fleet-startup.js.map +0 -1
- package/src/local-dev/fleet-state.js.map +0 -1
- package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
- package/src/local-dev/fleet-supervisor.js.map +0 -1
- package/src/local-dev/gateway-daemon.js.map +0 -1
- package/src/local-dev/gateway.js.map +0 -1
- package/src/local-dev/identity.js.map +0 -1
- package/src/local-dev/index.js.map +0 -1
- package/src/local-dev/local-context.js.map +0 -1
- package/src/local-dev/nx-workspace.js.map +0 -1
- package/src/local-dev/personal-secret-ledger.js.map +0 -1
- package/src/local-dev/personal-stage.js.map +0 -1
- package/src/local-dev/portless.js.map +0 -1
- package/src/local-dev/ports.js.map +0 -1
- package/src/local-dev/private-state.js.map +0 -1
- package/src/local-dev/process-identity.js.map +0 -1
- package/src/local-dev/proxy.js.map +0 -1
- package/src/local-dev/runtime-paths.js.map +0 -1
- package/src/local-dev/secret-slice-claim.js.map +0 -1
- package/src/local-dev/slice-claim.js.map +0 -1
- package/src/local-dev/slice-runner.js.map +0 -1
- package/src/local-dev/tls.js.map +0 -1
- package/src/ownership/composition.js.map +0 -1
- package/src/ownership/foundation-record.js.map +0 -1
- package/src/ownership/hash.js.map +0 -1
- package/src/ownership/index.js.map +0 -1
- package/src/ownership/json-ownership.js.map +0 -1
- package/src/ownership/record.js.map +0 -1
- package/src/ownership/workspace-record.js.map +0 -1
- package/src/performance/cost-collection.js.map +0 -1
- package/src/performance/cost-controls.js.map +0 -1
- package/src/performance/evidence.js.map +0 -1
- package/src/performance/index.js.map +0 -1
- package/src/performance/load-safety.js.map +0 -1
- package/src/performance/model.js.map +0 -1
- package/src/performance/pr-artifact-budget.js.map +0 -1
- package/src/performance/runner.js.map +0 -1
- package/src/performance/scenario-endpoint.js.map +0 -1
- package/src/performance/scenario.js.map +0 -1
- package/src/performance/test-fixtures.d.ts +0 -7
- package/src/performance/test-fixtures.js +0 -169
- package/src/performance/test-fixtures.js.map +0 -1
- package/src/performance/unit-cost.js.map +0 -1
- package/src/release/index.js.map +0 -1
- package/src/release/lifecycle.js.map +0 -1
- package/src/release/manifest.js.map +0 -1
- package/src/release/rollout.js.map +0 -1
- package/src/release/source-authority.js.map +0 -1
- package/src/repository-policy/aurora-preflight.js.map +0 -1
- package/src/repository-policy/deployment-plan.js.map +0 -1
- package/src/repository-policy/foundation-profile.js.map +0 -1
- package/src/repository-policy/index.js.map +0 -1
- package/src/repository-policy/policy.js.map +0 -1
- package/src/secrets/adapters.js.map +0 -1
- package/src/secrets/aws-control-plane.js.map +0 -1
- package/src/secrets/declaration-verification.js.map +0 -1
- package/src/secrets/guardrails.js.map +0 -1
- package/src/secrets/index.js.map +0 -1
- package/src/secrets/metadata.js.map +0 -1
- package/src/secrets/model.js.map +0 -1
- package/src/secrets/operator.js.map +0 -1
- package/src/secrets/permissions.js.map +0 -1
- package/src/secrets/personal-command.js.map +0 -1
- package/src/secrets/personal-ledger.js.map +0 -1
- package/src/secrets/registry.js.map +0 -1
- package/src/secrets/verification.js.map +0 -1
- package/src/secrets/workload-access.js.map +0 -1
- package/src/supply-chain/action-pins.js.map +0 -1
- package/src/supply-chain/blueprint-trust-git.js.map +0 -1
- package/src/supply-chain/blueprint-trust-process.js.map +0 -1
- package/src/supply-chain/blueprint-trust.js.map +0 -1
- package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
- package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
- package/src/supply-chain/build-output.js.map +0 -1
- package/src/supply-chain/common.js.map +0 -1
- package/src/supply-chain/container-artifact-contract.js.map +0 -1
- package/src/supply-chain/container-release.js.map +0 -1
- package/src/supply-chain/ecr-applicability.js.map +0 -1
- package/src/supply-chain/ecr-scanning.js.map +0 -1
- package/src/supply-chain/ecs-deployed-image.js.map +0 -1
- package/src/supply-chain/errors.js.map +0 -1
- package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
- package/src/supply-chain/generated-command.js.map +0 -1
- package/src/supply-chain/generated-container-release-command.js.map +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
- package/src/supply-chain/generated-files.js.map +0 -1
- package/src/supply-chain/generated-scanner-command.js.map +0 -1
- package/src/supply-chain/index.js.map +0 -1
- package/src/supply-chain/inventory.js.map +0 -1
- package/src/supply-chain/license-expression.js.map +0 -1
- package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
- package/src/supply-chain/policy.js.map +0 -1
- package/src/supply-chain/publication.js.map +0 -1
- package/src/supply-chain/sbom.js.map +0 -1
- package/src/supply-chain/scanner.js.map +0 -1
- package/src/supply-chain/vendored-source.js.map +0 -1
- package/src/testing-evidence/fixture-scope.js.map +0 -1
- package/src/testing-evidence/index.js.map +0 -1
- package/src/testing-evidence/quarantine.js.map +0 -1
- package/src/testing-evidence/result.js.map +0 -1
- package/src/testing-evidence/runner-adapter.js.map +0 -1
- package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
- package/src/validation.js.map +0 -1
- package/src/work-markers/index.js.map +0 -1
- package/src/work-markers/work-markers.js.map +0 -1
- package/src/workload-roles/account-baseline.js.map +0 -1
- package/src/workload-roles/authority.js.map +0 -1
- package/src/workload-roles/aws-adapter.js.map +0 -1
- package/src/workload-roles/aws-internal-handler.js.map +0 -1
- package/src/workload-roles/aws-s3-state.js.map +0 -1
- package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
- package/src/workload-roles/boundary.js.map +0 -1
- package/src/workload-roles/convergence.js.map +0 -1
- package/src/workload-roles/effective-policy.js.map +0 -1
- package/src/workload-roles/handler.js.map +0 -1
- package/src/workload-roles/history.js.map +0 -1
- package/src/workload-roles/index.js.map +0 -1
- package/src/workload-roles/injection.js.map +0 -1
- package/src/workload-roles/manifest.js.map +0 -1
- package/src/workload-roles/provisioner.js.map +0 -1
- package/src/workload-roles/registration.js.map +0 -1
- package/src/workload-roles/stage-boundary.js.map +0 -1
- package/src/workload-roles/standard-slice.js.map +0 -1
|
@@ -6,8 +6,12 @@ const feature_registry_js_1 = require("../feature-registry.js");
|
|
|
6
6
|
const logging_registry_js_1 = require("../logging-registry.js");
|
|
7
7
|
const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
|
|
8
8
|
/** @internal */
|
|
9
|
-
function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVersion = 'workspace-installed') {
|
|
10
|
-
|
|
9
|
+
function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVersion = 'workspace-installed', sql = true) {
|
|
10
|
+
const pascalName = name
|
|
11
|
+
.split('-')
|
|
12
|
+
.map((segment) => segment[0]?.toUpperCase() + segment.slice(1))
|
|
13
|
+
.join('');
|
|
14
|
+
const files = {
|
|
11
15
|
'operations/features.json': (0, built_in_plan_shared_js_1.json)({
|
|
12
16
|
features: [
|
|
13
17
|
{
|
|
@@ -26,10 +30,14 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
|
|
|
26
30
|
description: 'Logical database health and lifecycle behavior.',
|
|
27
31
|
id: 'database',
|
|
28
32
|
},
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
...(sql
|
|
34
|
+
? [
|
|
35
|
+
{
|
|
36
|
+
description: 'Database bootstrap, migration, and protected retirement behavior.',
|
|
37
|
+
id: 'database-lifecycle',
|
|
38
|
+
},
|
|
39
|
+
]
|
|
40
|
+
: []),
|
|
33
41
|
{
|
|
34
42
|
description: 'Retention, export, correction, deletion, and hold behavior.',
|
|
35
43
|
id: 'data-lifecycle',
|
|
@@ -46,10 +54,6 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
|
|
|
46
54
|
description: 'Health and operator-facing runtime behavior.',
|
|
47
55
|
id: 'operations',
|
|
48
56
|
},
|
|
49
|
-
{
|
|
50
|
-
description: 'Infrastructure planning, drift, approval, and convergence behavior.',
|
|
51
|
-
id: 'infrastructure-change',
|
|
52
|
-
},
|
|
53
57
|
{
|
|
54
58
|
description: 'Performance budgets, capacity limits, protected load, cost, and resource attribution.',
|
|
55
59
|
id: 'performance',
|
|
@@ -141,6 +145,8 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
|
|
|
141
145
|
'job-data-retention-maintenance',
|
|
142
146
|
'job-data-retention-maintenance-launcher',
|
|
143
147
|
'job-data-retention-orchestration',
|
|
148
|
+
'key-value-stream-delivery',
|
|
149
|
+
'key-value-reconciliation',
|
|
144
150
|
'machine-client-provisioner',
|
|
145
151
|
'machine-authorization-proof',
|
|
146
152
|
'machine-authorization-proof-target',
|
|
@@ -148,14 +154,17 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
|
|
|
148
154
|
'next-revalidation-seeder',
|
|
149
155
|
'next-revalidation-subscriber',
|
|
150
156
|
'next-server',
|
|
157
|
+
...(sql ? ['sql-outbox-relay'] : []),
|
|
151
158
|
],
|
|
152
|
-
databaseComponents:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
+
databaseComponents: sql
|
|
160
|
+
? [
|
|
161
|
+
'database-bootstrap',
|
|
162
|
+
'database-migration',
|
|
163
|
+
'database-migration-orchestration',
|
|
164
|
+
'database-retirement',
|
|
165
|
+
'database-retirement-orchestration',
|
|
166
|
+
]
|
|
167
|
+
: [],
|
|
159
168
|
schemaVersion: logging_registry_js_1.SLICE_LOGGING_REGISTRY_SCHEMA_VERSION,
|
|
160
169
|
}),
|
|
161
170
|
'docs/runbooks/log-investigation.md': `# Log investigation
|
|
@@ -192,9 +201,12 @@ if (ownership.schemaVersion !== ${index_js_1.GENERATED_OWNERSHIP_SCHEMA_VERSION}
|
|
|
192
201
|
if (!ownership.foundation.capabilities.includes('deployment')) {
|
|
193
202
|
throw new Error('Slice does not declare the Foundation deployment capability.');
|
|
194
203
|
}
|
|
195
|
-
|
|
204
|
+
${sql
|
|
205
|
+
? `const databaseBindings = JSON.parse(
|
|
196
206
|
readFileSync(new URL('../database/bindings.json', import.meta.url), 'utf8'),
|
|
197
207
|
);
|
|
208
|
+
`
|
|
209
|
+
: 'const databaseBindings = {};\n'}\
|
|
198
210
|
const featureRegistry = JSON.parse(
|
|
199
211
|
readFileSync(new URL('../operations/features.json', import.meta.url), 'utf8'),
|
|
200
212
|
);
|
|
@@ -210,12 +222,6 @@ const configurationDeclarations = JSON.parse(
|
|
|
210
222
|
'utf8',
|
|
211
223
|
),
|
|
212
224
|
);
|
|
213
|
-
const infrastructureChange = JSON.parse(
|
|
214
|
-
readFileSync(
|
|
215
|
-
new URL('../operations/infrastructure-change.json', import.meta.url),
|
|
216
|
-
'utf8',
|
|
217
|
-
),
|
|
218
|
-
);
|
|
219
225
|
const frontend = JSON.parse(
|
|
220
226
|
readFileSync(new URL('../frontend/contract.json', import.meta.url), 'utf8'),
|
|
221
227
|
);
|
|
@@ -238,7 +244,6 @@ for (const [label, document] of [
|
|
|
238
244
|
['async work', asyncContract],
|
|
239
245
|
['configuration', configurationDeclarations],
|
|
240
246
|
['frontend', frontend],
|
|
241
|
-
['infrastructure change', infrastructureChange],
|
|
242
247
|
['performance', performance],
|
|
243
248
|
['release', release],
|
|
244
249
|
['reliability', reliability],
|
|
@@ -282,59 +287,45 @@ if (origin) {
|
|
|
282
287
|
process.stdout.write('${name} live-mode prerequisites verified.\\n');
|
|
283
288
|
`,
|
|
284
289
|
'scripts/check-database.mjs': `import { existsSync, readFileSync } from 'node:fs';
|
|
285
|
-
import { createDatabaseBindingPlan } from '@empire-builder-kit/nx/foundation';
|
|
290
|
+
import { createDatabaseBindingPlan, validateDatabaseBindings } from '@empire-builder-kit/nx/foundation';
|
|
286
291
|
import databaseBindings from '../database/bindings.json' with { type: 'json' };
|
|
287
292
|
|
|
288
293
|
const migration = new URL('../database/migrations/0000_initial.sql', import.meta.url);
|
|
289
294
|
if (!existsSync(migration) || !readFileSync(migration, 'utf8').includes('CREATE TABLE')) {
|
|
290
295
|
throw new Error('The initial database migration is missing or invalid.');
|
|
291
296
|
}
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
})
|
|
297
|
+
const stage = process.env.EBK_STAGE ?? 'development';
|
|
298
|
+
// Task prerequisites validate declarations before local allocation exists.
|
|
299
|
+
// Canonical stages retain the complete deployed identifier/length validation.
|
|
300
|
+
const plan = /^personal-[a-f0-9]{24}$/.test(stage)
|
|
301
|
+
? validateDatabaseBindings(databaseBindings, { slice: '${name}' })
|
|
302
|
+
: createDatabaseBindingPlan(databaseBindings, { slice: '${name}', stage });
|
|
296
303
|
if (!plan.active.primary) throw new Error('Database binding "primary" is required.');
|
|
297
304
|
process.stdout.write('${name} database history verified.\\n');
|
|
298
305
|
`,
|
|
299
|
-
'scripts/local-database.mjs': `import {
|
|
300
|
-
import {
|
|
306
|
+
'scripts/local-database.mjs': `import { fileURLToPath } from 'node:url';
|
|
307
|
+
import { validateDatabaseBindings, runLocalDatabaseLifecycle } from '@empire-builder-kit/nx/foundation';
|
|
301
308
|
import databaseBindings from '../database/bindings.json' with { type: 'json' };
|
|
302
309
|
|
|
303
310
|
const action = process.argv[2];
|
|
304
311
|
if (action !== 'up' && action !== 'down') {
|
|
305
312
|
throw new Error('Usage: node scripts/local-database.mjs <up|down>');
|
|
306
313
|
}
|
|
307
|
-
const plan =
|
|
314
|
+
const plan = validateDatabaseBindings(databaseBindings, {
|
|
308
315
|
slice: '${name}',
|
|
309
|
-
stage: 'development',
|
|
310
316
|
});
|
|
311
317
|
const activeDatabase = plan.active.primary;
|
|
312
318
|
if (!activeDatabase) throw new Error('Database binding "primary" is required.');
|
|
313
|
-
|
|
319
|
+
await runLocalDatabaseLifecycle({
|
|
320
|
+
action,
|
|
321
|
+
composeFile: fileURLToPath(new URL('../database/docker-compose.yml', import.meta.url)),
|
|
314
322
|
database: activeDatabase,
|
|
315
323
|
slice: '${name}',
|
|
316
324
|
});
|
|
317
|
-
const project = process.env.COMPOSE_PROJECT_NAME ?? ('ebk-${name}-' + activeDatabase)
|
|
318
|
-
.replace(/[^a-z0-9_-]/g, '_')
|
|
319
|
-
.toLowerCase();
|
|
320
|
-
const args = ['compose', '--project-name', project, '-f', 'database/docker-compose.yml'];
|
|
321
|
-
args.push(...(action === 'up' ? ['up', '-d', '--wait'] : ['down']));
|
|
322
|
-
const result = spawnSync('docker', args, {
|
|
323
|
-
env: {
|
|
324
|
-
...process.env,
|
|
325
|
-
EBK_LOCAL_DATABASE: local.database,
|
|
326
|
-
EBK_LOCAL_DATABASE_PASSWORD: local.password,
|
|
327
|
-
EBK_LOCAL_DATABASE_PORT: String(local.port),
|
|
328
|
-
EBK_LOCAL_DATABASE_USERNAME: local.username,
|
|
329
|
-
},
|
|
330
|
-
stdio: 'inherit',
|
|
331
|
-
});
|
|
332
|
-
if (result.error) throw result.error;
|
|
333
|
-
if (result.status !== 0) process.exit(result.status ?? 1);
|
|
334
325
|
`,
|
|
335
326
|
'scripts/confirm-deploy.mjs': `const stageArg = process.argv.find((value) => value.startsWith('--stage='));
|
|
336
327
|
const stage = stageArg?.slice('--stage='.length) ?? 'development';
|
|
337
|
-
process.stdout.write('${name} infrastructure and database migrations completed for ' + stage + '.\\n');
|
|
328
|
+
process.stdout.write('${name} infrastructure${sql ? ' and database migrations' : ''} completed for ' + stage + '.\\n');
|
|
338
329
|
`,
|
|
339
330
|
'scripts/migrate-database.mjs': `import { createHash } from 'node:crypto';
|
|
340
331
|
import {
|
|
@@ -343,6 +334,8 @@ import {
|
|
|
343
334
|
StartExecutionCommand,
|
|
344
335
|
} from '@aws-sdk/client-sfn';
|
|
345
336
|
import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';
|
|
337
|
+
import { assertWorkspaceStageOwnershipForWorkspace } from '@empire-builder-kit/nx/workspace-deployment';
|
|
338
|
+
import { resolve } from 'node:path';
|
|
346
339
|
import {
|
|
347
340
|
createDatabaseBindingPlan,
|
|
348
341
|
productSliceMigrationPath,
|
|
@@ -372,13 +365,31 @@ const selectedDatabase = selectDatabaseTarget(bindingPlan, {
|
|
|
372
365
|
database: databaseArg?.slice('--database='.length),
|
|
373
366
|
});
|
|
374
367
|
|
|
368
|
+
const ownership = await assertWorkspaceStageOwnershipForWorkspace(
|
|
369
|
+
resolve(import.meta.dirname, '../../..'),
|
|
370
|
+
stage,
|
|
371
|
+
{
|
|
372
|
+
...(process.env.AWS_PROFILE ? { profile: process.env.AWS_PROFILE } : {}),
|
|
373
|
+
...(process.env.AWS_CONFIG_FILE ? { configFilepath: process.env.AWS_CONFIG_FILE } : {}),
|
|
374
|
+
...(process.env.AWS_SHARED_CREDENTIALS_FILE
|
|
375
|
+
? { credentialsFilepath: process.env.AWS_SHARED_CREDENTIALS_FILE }
|
|
376
|
+
: {}),
|
|
377
|
+
},
|
|
378
|
+
);
|
|
379
|
+
if (
|
|
380
|
+
process.env.AWS_REGION?.trim() &&
|
|
381
|
+
process.env.AWS_REGION.trim() !== ownership.region
|
|
382
|
+
) {
|
|
383
|
+
throw new Error('Database migration Region differs from its exact workspace owner tuple.');
|
|
384
|
+
}
|
|
385
|
+
|
|
375
386
|
const parameterName = productSliceMigrationPath(
|
|
376
387
|
foundationStage,
|
|
377
388
|
stage,
|
|
378
389
|
'${name}',
|
|
379
390
|
selectedDatabase,
|
|
380
391
|
);
|
|
381
|
-
const parameter = await new SSMClient({}).send(
|
|
392
|
+
const parameter = await new SSMClient({ region: ownership.region }).send(
|
|
382
393
|
new GetParameterCommand({ Name: parameterName }),
|
|
383
394
|
);
|
|
384
395
|
const stateMachineArn = parameter.Parameter?.Value;
|
|
@@ -428,28 +439,12 @@ const baseExecutionName = [
|
|
|
428
439
|
].join('-').slice(0, 80);
|
|
429
440
|
const databaseLifecycleCorrelationId =
|
|
430
441
|
'dbm-' + executionIdentity + '-' + runAttempt;
|
|
431
|
-
const sfn = new SFNClient({});
|
|
442
|
+
const sfn = new SFNClient({ region: ownership.region });
|
|
432
443
|
const executionArnFor = (name) =>
|
|
433
444
|
stateMachineArn.replace(':stateMachine:', ':execution:') + ':' + name;
|
|
434
|
-
const
|
|
445
|
+
const startOrDescribeExecution = async (name) => {
|
|
435
446
|
try {
|
|
436
|
-
|
|
437
|
-
new DescribeExecutionCommand({ executionArn: executionArnFor(name) }),
|
|
438
|
-
);
|
|
439
|
-
} catch (error) {
|
|
440
|
-
if (
|
|
441
|
-
error &&
|
|
442
|
-
typeof error === 'object' &&
|
|
443
|
-
error.name === 'ExecutionDoesNotExist'
|
|
444
|
-
) {
|
|
445
|
-
return undefined;
|
|
446
|
-
}
|
|
447
|
-
throw error;
|
|
448
|
-
}
|
|
449
|
-
};
|
|
450
|
-
const startExecution = async (name) => {
|
|
451
|
-
try {
|
|
452
|
-
await sfn.send(
|
|
447
|
+
const started = await sfn.send(
|
|
453
448
|
new StartExecutionCommand({
|
|
454
449
|
input: JSON.stringify({
|
|
455
450
|
databaseLifecycleCorrelationId,
|
|
@@ -464,6 +459,10 @@ const startExecution = async (name) => {
|
|
|
464
459
|
stateMachineArn,
|
|
465
460
|
}),
|
|
466
461
|
);
|
|
462
|
+
return {
|
|
463
|
+
executionArn: started.executionArn ?? executionArnFor(name),
|
|
464
|
+
status: 'RUNNING',
|
|
465
|
+
};
|
|
467
466
|
} catch (error) {
|
|
468
467
|
if (
|
|
469
468
|
!error ||
|
|
@@ -472,6 +471,9 @@ const startExecution = async (name) => {
|
|
|
472
471
|
) {
|
|
473
472
|
throw error;
|
|
474
473
|
}
|
|
474
|
+
return await sfn.send(
|
|
475
|
+
new DescribeExecutionCommand({ executionArn: executionArnFor(name) }),
|
|
476
|
+
);
|
|
475
477
|
}
|
|
476
478
|
};
|
|
477
479
|
const terminal = new Set([
|
|
@@ -482,9 +484,8 @@ const terminal = new Set([
|
|
|
482
484
|
]);
|
|
483
485
|
|
|
484
486
|
let executionName = baseExecutionName;
|
|
485
|
-
let execution = await
|
|
487
|
+
let execution = await startOrDescribeExecution(executionName);
|
|
486
488
|
if (
|
|
487
|
-
execution &&
|
|
488
489
|
terminal.has(execution.status ?? 'UNKNOWN') &&
|
|
489
490
|
execution.status !== 'SUCCEEDED' &&
|
|
490
491
|
parsedRunAttempt > 1
|
|
@@ -492,14 +493,11 @@ if (
|
|
|
492
493
|
const retrySuffix = '-retry-' + runAttempt;
|
|
493
494
|
executionName =
|
|
494
495
|
baseExecutionName.slice(0, 80 - retrySuffix.length) + retrySuffix;
|
|
495
|
-
execution = await
|
|
496
|
-
}
|
|
497
|
-
if (!execution) {
|
|
498
|
-
await startExecution(executionName);
|
|
496
|
+
execution = await startOrDescribeExecution(executionName);
|
|
499
497
|
}
|
|
500
498
|
|
|
501
|
-
const executionArn = executionArnFor(executionName);
|
|
502
|
-
let status = execution
|
|
499
|
+
const executionArn = execution.executionArn ?? executionArnFor(executionName);
|
|
500
|
+
let status = execution.status ?? 'RUNNING';
|
|
503
501
|
process.stdout.write(
|
|
504
502
|
'[database-migration] execution=' + executionArn + ' status=' + status + '\\n',
|
|
505
503
|
);
|
|
@@ -532,7 +530,139 @@ process.stdout.write(
|
|
|
532
530
|
'sst-env.d.ts': `// Bootstrap placeholder. SST overwrites this file after install, dev, or deploy.
|
|
533
531
|
export {};
|
|
534
532
|
`,
|
|
535
|
-
'sst.config.ts': `
|
|
533
|
+
'sst.config.ts': `const ebkNextBuildEnvironmentKeys = new Set([
|
|
534
|
+
'AUTH_CLIENT_ID',
|
|
535
|
+
'AUTH_USER_POOL_ID',
|
|
536
|
+
'CI',
|
|
537
|
+
'EBK_APPCONFIG_APPLICATION_ID',
|
|
538
|
+
'EBK_APPCONFIG_ENVIRONMENT_ID',
|
|
539
|
+
'EBK_APPCONFIG_PROFILE_ID',
|
|
540
|
+
'EBK_FLEET_ORIGIN',
|
|
541
|
+
'EBK_KEY_VALUE_TABLE',
|
|
542
|
+
'EBK_LOCAL_SOURCE_TREE',
|
|
543
|
+
'EBK_PERFORMANCE_ACCOUNT_FINGERPRINT',
|
|
544
|
+
'EBK_PERFORMANCE_CANDIDATE_DIGEST',
|
|
545
|
+
'EBK_PERFORMANCE_LOAD_ENABLED',
|
|
546
|
+
'EBK_PERFORMANCE_ORIGIN',
|
|
547
|
+
'EBK_PERFORMANCE_REGION',
|
|
548
|
+
'EBK_PERFORMANCE_RELEASE_ID',
|
|
549
|
+
'EBK_PERFORMANCE_RELEASE_MATERIAL_DIGEST',
|
|
550
|
+
'EBK_PERFORMANCE_SLICE',
|
|
551
|
+
'EBK_SECURE_COOKIES',
|
|
552
|
+
'EBK_SOURCE_COMMIT',
|
|
553
|
+
'EBK_STAGE',
|
|
554
|
+
'EVENT_BUS_NAME',
|
|
555
|
+
'NEXT_PUBLIC_API_URL',
|
|
556
|
+
'NEXT_TELEMETRY_DISABLED',
|
|
557
|
+
'SST',
|
|
558
|
+
'SST_RESOURCE_App',
|
|
559
|
+
'SST_RESOURCE_${pascalName}KeyValueAccess',
|
|
560
|
+
${sql ? ` 'SST_RESOURCE_${pascalName}PrimaryDatabase',\n` : ''}\
|
|
561
|
+
'SST_RESOURCE_FoundationIdentity',
|
|
562
|
+
]);
|
|
563
|
+
|
|
564
|
+
const ebkRequiredNextBuildEnvironmentKeys = [
|
|
565
|
+
'AUTH_CLIENT_ID',
|
|
566
|
+
'AUTH_USER_POOL_ID',
|
|
567
|
+
'CI',
|
|
568
|
+
'EBK_FLEET_ORIGIN',
|
|
569
|
+
'EBK_KEY_VALUE_TABLE',
|
|
570
|
+
'EBK_LOCAL_SOURCE_TREE',
|
|
571
|
+
'EBK_PERFORMANCE_ACCOUNT_FINGERPRINT',
|
|
572
|
+
'EBK_PERFORMANCE_CANDIDATE_DIGEST',
|
|
573
|
+
'EBK_PERFORMANCE_LOAD_ENABLED',
|
|
574
|
+
'EBK_PERFORMANCE_ORIGIN',
|
|
575
|
+
'EBK_PERFORMANCE_REGION',
|
|
576
|
+
'EBK_PERFORMANCE_RELEASE_ID',
|
|
577
|
+
'EBK_PERFORMANCE_RELEASE_MATERIAL_DIGEST',
|
|
578
|
+
'EBK_PERFORMANCE_SLICE',
|
|
579
|
+
'EBK_SECURE_COOKIES',
|
|
580
|
+
'EBK_SOURCE_COMMIT',
|
|
581
|
+
'EBK_STAGE',
|
|
582
|
+
'EVENT_BUS_NAME',
|
|
583
|
+
'NEXT_PUBLIC_API_URL',
|
|
584
|
+
'NEXT_TELEMETRY_DISABLED',
|
|
585
|
+
'SST',
|
|
586
|
+
'SST_RESOURCE_App',
|
|
587
|
+
'SST_RESOURCE_${pascalName}KeyValueAccess',
|
|
588
|
+
${sql ? ` 'SST_RESOURCE_${pascalName}PrimaryDatabase',\n` : ''}\
|
|
589
|
+
'SST_RESOURCE_FoundationIdentity',
|
|
590
|
+
] as const;
|
|
591
|
+
|
|
592
|
+
const ebkLocalCommandResource = {
|
|
593
|
+
__pulumiType: 'command:local:Command',
|
|
594
|
+
} as unknown as new (
|
|
595
|
+
name: string,
|
|
596
|
+
args: { environment?: unknown; triggers?: unknown },
|
|
597
|
+
options?: unknown,
|
|
598
|
+
) => unknown;
|
|
599
|
+
|
|
600
|
+
const ebkSourceCommitPattern = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/;
|
|
601
|
+
const ebkSourceTreePattern = /^[a-f0-9]{64}$/;
|
|
602
|
+
|
|
603
|
+
function exactNextBuildEnvironment(value: unknown): Record<string, string> {
|
|
604
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
605
|
+
throw new Error('The Next build environment must resolve to one object.');
|
|
606
|
+
}
|
|
607
|
+
const environment = value as Record<string, unknown>;
|
|
608
|
+
const retained = Object.fromEntries(
|
|
609
|
+
Object.entries(environment)
|
|
610
|
+
.filter(([key]) => ebkNextBuildEnvironmentKeys.has(key))
|
|
611
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0)),
|
|
612
|
+
);
|
|
613
|
+
for (const key of ebkRequiredNextBuildEnvironmentKeys) {
|
|
614
|
+
if (typeof retained[key] !== 'string') {
|
|
615
|
+
throw new Error('The Next build environment omitted ' + key + '.');
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
return retained as Record<string, string>;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
// SST 4.17.1 installs its transform globals only while evaluating $config.run.
|
|
622
|
+
// Register there, before infrastructure construction, rather than at module
|
|
623
|
+
// load. The explicit Slice buildCommand separately routes diff/refresh invokes
|
|
624
|
+
// through the wrapper.
|
|
625
|
+
function registerExactNextBuildEnvironmentTransform(): void {
|
|
626
|
+
$transform(
|
|
627
|
+
ebkLocalCommandResource,
|
|
628
|
+
(
|
|
629
|
+
args: { environment?: unknown; triggers?: unknown },
|
|
630
|
+
_options: unknown,
|
|
631
|
+
resourceName: string,
|
|
632
|
+
) => {
|
|
633
|
+
if (resourceName !== '${pascalName}WebBuilder') return;
|
|
634
|
+
const unresolvedEnvironment = args.environment as Record<
|
|
635
|
+
string,
|
|
636
|
+
unknown
|
|
637
|
+
>;
|
|
638
|
+
const resolveEnvironment = (environment: Record<string, unknown>) => {
|
|
639
|
+
const resolved = exactNextBuildEnvironment({
|
|
640
|
+
...environment,
|
|
641
|
+
CI: 'true',
|
|
642
|
+
NEXT_TELEMETRY_DISABLED: '1',
|
|
643
|
+
});
|
|
644
|
+
const sourceCommit = resolved.EBK_SOURCE_COMMIT.trim();
|
|
645
|
+
const sourceTree = resolved.EBK_LOCAL_SOURCE_TREE.trim();
|
|
646
|
+
if (
|
|
647
|
+
!ebkSourceCommitPattern.test(sourceCommit) ||
|
|
648
|
+
!ebkSourceTreePattern.test(sourceTree)
|
|
649
|
+
) {
|
|
650
|
+
throw new Error(
|
|
651
|
+
'The Next builder requires exact EBK commit and working-tree identities.',
|
|
652
|
+
);
|
|
653
|
+
}
|
|
654
|
+
return resolved;
|
|
655
|
+
};
|
|
656
|
+
args.environment = $output(unresolvedEnvironment).apply(
|
|
657
|
+
resolveEnvironment,
|
|
658
|
+
);
|
|
659
|
+
// Preserve SST's native per-invocation build trigger. Replacing it with
|
|
660
|
+
// source identity skips OpenNext on same-source retries on fresh runners.
|
|
661
|
+
},
|
|
662
|
+
);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
export default $config({
|
|
536
666
|
app(input: { stage?: string } | undefined) {
|
|
537
667
|
const stage = input?.stage ?? 'development';
|
|
538
668
|
const production = input?.stage === 'production';
|
|
@@ -544,16 +674,17 @@ export {};
|
|
|
544
674
|
providers: {
|
|
545
675
|
aws: {
|
|
546
676
|
defaultTags: {
|
|
677
|
+
// SST contributes sst:app and sst:stage. Keep the provider baseline
|
|
678
|
+
// at eight tags so generated S3 asset objects remain within AWS's
|
|
679
|
+
// hard ten-tag object limit. Performance coverage requires this
|
|
680
|
+
// provider baseline; repository and production-profile identity is
|
|
681
|
+
// supplementary on resources using createStandardResourceTags.
|
|
547
682
|
tags: {
|
|
548
683
|
'ebk:cost-allocation': 'unallocated',
|
|
549
684
|
'ebk:cost-scope': '${workspace}/${name}/' + stage,
|
|
550
685
|
'ebk:framework-version': '${frameworkVersion}',
|
|
551
686
|
'ebk:managed-by': 'empire-builder-kit',
|
|
552
687
|
'ebk:owner': '${name}-product',
|
|
553
|
-
'ebk:production-profile':
|
|
554
|
-
process.env.EBK_PRODUCTION_PROFILE ?? 'standard',
|
|
555
|
-
'ebk:repository':
|
|
556
|
-
process.env.GITHUB_REPOSITORY ?? '${workspace}',
|
|
557
688
|
'ebk:slice': '${name}',
|
|
558
689
|
'ebk:stage': stage,
|
|
559
690
|
'ebk:workspace': '${workspace}',
|
|
@@ -565,29 +696,379 @@ export {};
|
|
|
565
696
|
};
|
|
566
697
|
},
|
|
567
698
|
async run() {
|
|
568
|
-
const personalStagePattern = /^personal-[a-
|
|
699
|
+
const personalStagePattern = /^personal-[a-f0-9]{24}$/;
|
|
569
700
|
if ($dev && !personalStagePattern.test($app.stage)) {
|
|
570
701
|
throw new Error(
|
|
571
702
|
'SST dev requires the framework-derived personal stage. Use ebk dev.',
|
|
572
703
|
);
|
|
573
704
|
}
|
|
574
|
-
if (!$dev &&
|
|
705
|
+
if (!$dev && $app.stage.startsWith('personal-')) {
|
|
706
|
+
// The task-only Nx cleanup executor derives and verifies this exact ID.
|
|
707
|
+
// It invokes native SST remove, never deploy/refresh. Pulumi destroy owns
|
|
708
|
+
// the retained resource graph; do not materialize a production graph here.
|
|
709
|
+
const cleanupTask = process.env.EBK_NX_TASK_CLEANUP;
|
|
710
|
+
if (/^[a-f0-9]{24}$/.test(cleanupTask ?? '') && $app.stage === 'personal-' + cleanupTask) {
|
|
711
|
+
return {};
|
|
712
|
+
}
|
|
575
713
|
throw new Error(
|
|
576
714
|
'A personal stage may run only through the framework development adapter.',
|
|
577
715
|
);
|
|
578
716
|
}
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
717
|
+
const {
|
|
718
|
+
installLambdaPolicyWriteOrdering,
|
|
719
|
+
installStageIamBoundaryTransforms,
|
|
720
|
+
} = await import('@empire-builder-kit/nx/aws-authority');
|
|
721
|
+
registerExactNextBuildEnvironmentTransform();
|
|
722
|
+
const accountId = process.env.AWS_EXPECTED_ACCOUNT_ID?.trim() ?? '';
|
|
723
|
+
if (!/^[0-9]{12}$/.test(accountId)) {
|
|
724
|
+
throw new Error(
|
|
725
|
+
'Native Slice IAM boundary injection requires AWS_EXPECTED_ACCOUNT_ID.',
|
|
726
|
+
);
|
|
727
|
+
}
|
|
728
|
+
installStageIamBoundaryTransforms({
|
|
729
|
+
accountId,
|
|
730
|
+
instanceProfileResource: aws.iam.InstanceProfile,
|
|
731
|
+
registerTransform: $transform,
|
|
732
|
+
roleResource: aws.iam.Role,
|
|
733
|
+
resourceStage: $app.stage,
|
|
734
|
+
stage: ($dev ? 'development' : $app.stage) as
|
|
735
|
+
| 'development'
|
|
736
|
+
| 'staging'
|
|
737
|
+
| 'production',
|
|
738
|
+
});
|
|
739
|
+
// Order Function URL and Lambda permission policy writes before any
|
|
740
|
+
// resource registers; the pinned providers otherwise race them.
|
|
741
|
+
installLambdaPolicyWriteOrdering({
|
|
742
|
+
mergeOptions: $util.mergeOptions,
|
|
743
|
+
registerStackTransformation: $util.runtime.registerStackTransformation,
|
|
744
|
+
});
|
|
587
745
|
const { app } = await import('./infra/index.js');
|
|
588
|
-
return app(
|
|
746
|
+
return app();
|
|
589
747
|
},
|
|
590
748
|
});
|
|
749
|
+
`,
|
|
750
|
+
'tools/ebk-next-dev.mjs': `import { createRequire } from 'node:module';
|
|
751
|
+
import { dirname, join } from 'node:path';
|
|
752
|
+
const require = createRequire(import.meta.url);
|
|
753
|
+
const packageRoot = dirname(require.resolve('@empire-builder-kit/nx/package.json'));
|
|
754
|
+
const { runNativeWebCommand } = require(join(packageRoot, 'src/local-dev/web-launch.js'));
|
|
755
|
+
try {
|
|
756
|
+
process.exitCode = await runNativeWebCommand('${name}');
|
|
757
|
+
} catch (error) {
|
|
758
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
759
|
+
process.exitCode = 1;
|
|
760
|
+
}
|
|
761
|
+
`,
|
|
762
|
+
'tools/ebk-next-build-environment.mjs': `import { spawnSync } from 'node:child_process';
|
|
763
|
+
import {
|
|
764
|
+
chmodSync,
|
|
765
|
+
existsSync,
|
|
766
|
+
lstatSync,
|
|
767
|
+
readFileSync,
|
|
768
|
+
readdirSync,
|
|
769
|
+
realpathSync,
|
|
770
|
+
renameSync,
|
|
771
|
+
rmSync,
|
|
772
|
+
unlinkSync,
|
|
773
|
+
writeFileSync,
|
|
774
|
+
} from 'node:fs';
|
|
775
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
776
|
+
|
|
777
|
+
// SST diff/refresh invokes the build outside the Command resource transform.
|
|
778
|
+
// Reconstruct the child environment here so every builder path has one policy.
|
|
779
|
+
const applicationKeys = new Set(${JSON.stringify([
|
|
780
|
+
'AUTH_CLIENT_ID',
|
|
781
|
+
'AUTH_USER_POOL_ID',
|
|
782
|
+
'CI',
|
|
783
|
+
'EBK_APPCONFIG_APPLICATION_ID',
|
|
784
|
+
'EBK_APPCONFIG_ENVIRONMENT_ID',
|
|
785
|
+
'EBK_APPCONFIG_PROFILE_ID',
|
|
786
|
+
'EBK_FLEET_ORIGIN',
|
|
787
|
+
'EBK_KEY_VALUE_TABLE',
|
|
788
|
+
'EBK_LOCAL_SOURCE_TREE',
|
|
789
|
+
'EBK_PERFORMANCE_ACCOUNT_FINGERPRINT',
|
|
790
|
+
'EBK_PERFORMANCE_CANDIDATE_DIGEST',
|
|
791
|
+
'EBK_PERFORMANCE_LOAD_ENABLED',
|
|
792
|
+
'EBK_PERFORMANCE_ORIGIN',
|
|
793
|
+
'EBK_PERFORMANCE_REGION',
|
|
794
|
+
'EBK_PERFORMANCE_RELEASE_ID',
|
|
795
|
+
'EBK_PERFORMANCE_RELEASE_MATERIAL_DIGEST',
|
|
796
|
+
'EBK_PERFORMANCE_SLICE',
|
|
797
|
+
'EBK_SECURE_COOKIES',
|
|
798
|
+
'EBK_SOURCE_COMMIT',
|
|
799
|
+
'EBK_STAGE',
|
|
800
|
+
'EVENT_BUS_NAME',
|
|
801
|
+
'NEXT_PUBLIC_API_URL',
|
|
802
|
+
'NEXT_TELEMETRY_DISABLED',
|
|
803
|
+
'SST',
|
|
804
|
+
'SST_RESOURCE_App',
|
|
805
|
+
`SST_RESOURCE_${pascalName}KeyValueAccess`,
|
|
806
|
+
...(sql ? [`SST_RESOURCE_${pascalName}PrimaryDatabase`] : []),
|
|
807
|
+
'SST_RESOURCE_FoundationIdentity',
|
|
808
|
+
], null, 2)});
|
|
809
|
+
const operatingKeys = new Set(
|
|
810
|
+
[
|
|
811
|
+
'APPDATA',
|
|
812
|
+
'COMSPEC',
|
|
813
|
+
'HOME',
|
|
814
|
+
'LANG',
|
|
815
|
+
'LC_ALL',
|
|
816
|
+
'LOCALAPPDATA',
|
|
817
|
+
'PATH',
|
|
818
|
+
'PATHEXT',
|
|
819
|
+
'PROGRAMDATA',
|
|
820
|
+
'SHELL',
|
|
821
|
+
'SYSTEMROOT',
|
|
822
|
+
'TEMP',
|
|
823
|
+
'TERM',
|
|
824
|
+
'TMP',
|
|
825
|
+
'TMPDIR',
|
|
826
|
+
'TZ',
|
|
827
|
+
'USERPROFILE',
|
|
828
|
+
].map((key) => key.toLowerCase()),
|
|
829
|
+
);
|
|
830
|
+
|
|
831
|
+
if (process.argv.length !== 2) {
|
|
832
|
+
throw new Error('The Next build wrapper does not accept arguments.');
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
const root = realpathSync(process.cwd());
|
|
836
|
+
const openNextRoot = resolve(root, '.open-next');
|
|
837
|
+
const priorSealedFunctionBundles = [
|
|
838
|
+
resolve(root, '.open-next/image-optimization-function'),
|
|
839
|
+
resolve(root, '.open-next/server-functions/default'),
|
|
840
|
+
];
|
|
841
|
+
if (process.platform === 'darwin') {
|
|
842
|
+
for (const priorBundle of priorSealedFunctionBundles) {
|
|
843
|
+
if (!existsSync(priorBundle)) continue;
|
|
844
|
+
if (realpathSync(priorBundle) !== priorBundle) {
|
|
845
|
+
throw new Error(
|
|
846
|
+
'The prior sealed OpenNext Function bundle has an invalid identity.',
|
|
847
|
+
);
|
|
848
|
+
}
|
|
849
|
+
const pendingDirectories = [{ depth: 0, path: priorBundle }];
|
|
850
|
+
let observedDirectories = 0;
|
|
851
|
+
while (pendingDirectories.length > 0) {
|
|
852
|
+
const current = pendingDirectories.pop();
|
|
853
|
+
if (!current) break;
|
|
854
|
+
if (current.depth > 64) {
|
|
855
|
+
throw new Error(
|
|
856
|
+
'The prior sealed OpenNext Function bundle exceeds its depth bound.',
|
|
857
|
+
);
|
|
858
|
+
}
|
|
859
|
+
observedDirectories += 1;
|
|
860
|
+
if (observedDirectories > 65_536) {
|
|
861
|
+
throw new Error(
|
|
862
|
+
'The prior sealed OpenNext Function bundle exceeds its directory bound.',
|
|
863
|
+
);
|
|
864
|
+
}
|
|
865
|
+
const identity = lstatSync(current.path, { bigint: true });
|
|
866
|
+
if (!identity.isDirectory() || identity.isSymbolicLink()) {
|
|
867
|
+
throw new Error(
|
|
868
|
+
'The prior sealed OpenNext Function directory changed identity.',
|
|
869
|
+
);
|
|
870
|
+
}
|
|
871
|
+
if ((identity.mode & 0o200n) === 0n) {
|
|
872
|
+
chmodSync(current.path, Number((identity.mode & 0o7_777n) | 0o200n));
|
|
873
|
+
}
|
|
874
|
+
for (const entry of readdirSync(current.path, {
|
|
875
|
+
withFileTypes: true,
|
|
876
|
+
}).sort((left, right) =>
|
|
877
|
+
left.name < right.name ? -1 : left.name > right.name ? 1 : 0,
|
|
878
|
+
)) {
|
|
879
|
+
if (!entry.isDirectory() || entry.isSymbolicLink()) continue;
|
|
880
|
+
const entryPath = join(current.path, entry.name);
|
|
881
|
+
const confined = relative(priorBundle, entryPath);
|
|
882
|
+
if (
|
|
883
|
+
confined === '..' ||
|
|
884
|
+
confined.startsWith('../') ||
|
|
885
|
+
resolve(priorBundle, confined) !== entryPath
|
|
886
|
+
) {
|
|
887
|
+
throw new Error(
|
|
888
|
+
'The prior sealed OpenNext Function directory escapes its root.',
|
|
889
|
+
);
|
|
890
|
+
}
|
|
891
|
+
pendingDirectories.push({ depth: current.depth + 1, path: entryPath });
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
if (existsSync(openNextRoot)) {
|
|
896
|
+
const identity = lstatSync(openNextRoot, { bigint: true });
|
|
897
|
+
if (
|
|
898
|
+
!identity.isDirectory() ||
|
|
899
|
+
identity.isSymbolicLink() ||
|
|
900
|
+
realpathSync(openNextRoot) !== openNextRoot
|
|
901
|
+
) {
|
|
902
|
+
throw new Error('The prior OpenNext build root has an invalid identity.');
|
|
903
|
+
}
|
|
904
|
+
rmSync(openNextRoot, {
|
|
905
|
+
force: true,
|
|
906
|
+
maxRetries: 8,
|
|
907
|
+
recursive: true,
|
|
908
|
+
retryDelay: 50,
|
|
909
|
+
});
|
|
910
|
+
if (existsSync(openNextRoot)) {
|
|
911
|
+
throw new Error('The prior OpenNext build root was not removed.');
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
const environment = Object.fromEntries(
|
|
917
|
+
Object.entries(process.env)
|
|
918
|
+
.filter(
|
|
919
|
+
([key, value]) =>
|
|
920
|
+
typeof value === 'string' &&
|
|
921
|
+
(applicationKeys.has(key) || operatingKeys.has(key.toLowerCase())),
|
|
922
|
+
)
|
|
923
|
+
.sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0)),
|
|
924
|
+
);
|
|
925
|
+
const windows = process.platform === 'win32';
|
|
926
|
+
const result = spawnSync(
|
|
927
|
+
windows ? 'cmd.exe' : 'npx',
|
|
928
|
+
windows
|
|
929
|
+
? ['/d', '/s', '/c', 'npx --yes @opennextjs/aws@3.9.14 build']
|
|
930
|
+
: ['--yes', '@opennextjs/aws@3.9.14', 'build'],
|
|
931
|
+
{
|
|
932
|
+
cwd: process.cwd(),
|
|
933
|
+
env: environment,
|
|
934
|
+
stdio: 'inherit',
|
|
935
|
+
windowsHide: true,
|
|
936
|
+
},
|
|
937
|
+
);
|
|
938
|
+
if (result.error) throw result.error;
|
|
939
|
+
if (result.signal) {
|
|
940
|
+
throw new Error('The Next build command exited from signal ' + result.signal + '.');
|
|
941
|
+
}
|
|
942
|
+
if (result.status !== 0) {
|
|
943
|
+
process.exitCode = result.status ?? 1;
|
|
944
|
+
} else {
|
|
945
|
+
// Finder can create .DS_Store files anywhere below OpenNext's assembled
|
|
946
|
+
// output while the macOS build is running. They have no runtime meaning,
|
|
947
|
+
// but SST includes them in Lambda archives, so their presence makes one
|
|
948
|
+
// immutable source alternate between different code object hashes. Remove
|
|
949
|
+
// only this exact derived metadata before SST archives the output.
|
|
950
|
+
if (realpathSync(openNextRoot) !== openNextRoot) {
|
|
951
|
+
throw new Error('The OpenNext build root has an invalid identity.');
|
|
952
|
+
}
|
|
953
|
+
const pendingDirectories = [{ depth: 0, path: openNextRoot }];
|
|
954
|
+
let observedEntries = 0;
|
|
955
|
+
let removedFinderMetadata = 0;
|
|
956
|
+
while (pendingDirectories.length > 0) {
|
|
957
|
+
const current = pendingDirectories.pop();
|
|
958
|
+
if (!current) break;
|
|
959
|
+
if (current.depth > 64) {
|
|
960
|
+
throw new Error('The OpenNext build tree exceeds its depth bound.');
|
|
961
|
+
}
|
|
962
|
+
for (const entry of readdirSync(current.path, { withFileTypes: true }).sort(
|
|
963
|
+
(left, right) =>
|
|
964
|
+
left.name < right.name ? -1 : left.name > right.name ? 1 : 0,
|
|
965
|
+
)) {
|
|
966
|
+
observedEntries += 1;
|
|
967
|
+
if (observedEntries > 65_536) {
|
|
968
|
+
throw new Error('The OpenNext build tree exceeds its entry bound.');
|
|
969
|
+
}
|
|
970
|
+
const entryPath = join(current.path, entry.name);
|
|
971
|
+
const identity = lstatSync(entryPath, { bigint: true });
|
|
972
|
+
if (entry.name === '.DS_Store') {
|
|
973
|
+
removedFinderMetadata += 1;
|
|
974
|
+
if (
|
|
975
|
+
removedFinderMetadata > 256 ||
|
|
976
|
+
!identity.isFile() ||
|
|
977
|
+
identity.isSymbolicLink() ||
|
|
978
|
+
identity.nlink !== 1n ||
|
|
979
|
+
identity.size > 1_048_576n
|
|
980
|
+
) {
|
|
981
|
+
throw new Error('The OpenNext Finder metadata has an invalid identity.');
|
|
982
|
+
}
|
|
983
|
+
unlinkSync(entryPath);
|
|
984
|
+
if (existsSync(entryPath)) {
|
|
985
|
+
throw new Error('The OpenNext Finder metadata was not removed.');
|
|
986
|
+
}
|
|
987
|
+
continue;
|
|
988
|
+
}
|
|
989
|
+
if (identity.isDirectory() && !identity.isSymbolicLink()) {
|
|
990
|
+
const confined = relative(openNextRoot, entryPath);
|
|
991
|
+
if (
|
|
992
|
+
confined === '..' ||
|
|
993
|
+
confined.startsWith('../') ||
|
|
994
|
+
resolve(openNextRoot, confined) !== entryPath
|
|
995
|
+
) {
|
|
996
|
+
throw new Error('The OpenNext build entry escapes its root.');
|
|
997
|
+
}
|
|
998
|
+
pendingDirectories.push({ depth: current.depth + 1, path: entryPath });
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
// OpenNext 3.9.14 installs the image optimizer dependencies in an npm
|
|
1004
|
+
// mkdtemp directory and copies npm's hidden package lock into the deployed
|
|
1005
|
+
// bundle. npm records that random directory basename as the lock name. The
|
|
1006
|
+
// name has no runtime meaning, but without this exact normalization two
|
|
1007
|
+
// builds of one source produce different Lambda ZIP bytes.
|
|
1008
|
+
const lockPath = resolve(
|
|
1009
|
+
process.cwd(),
|
|
1010
|
+
'.open-next/image-optimization-function/node_modules/.package-lock.json',
|
|
1011
|
+
);
|
|
1012
|
+
const lockParent = realpathSync(dirname(lockPath));
|
|
1013
|
+
const confinedParent = relative(root, lockParent);
|
|
1014
|
+
if (
|
|
1015
|
+
confinedParent === '..' ||
|
|
1016
|
+
confinedParent.startsWith('../') ||
|
|
1017
|
+
resolve(lockParent, '.package-lock.json') !== lockPath
|
|
1018
|
+
) {
|
|
1019
|
+
throw new Error('The OpenNext image optimizer package lock escapes the build root.');
|
|
1020
|
+
}
|
|
1021
|
+
const before = lstatSync(lockPath, { bigint: true });
|
|
1022
|
+
if (
|
|
1023
|
+
!before.isFile() ||
|
|
1024
|
+
before.isSymbolicLink() ||
|
|
1025
|
+
before.nlink !== 1n ||
|
|
1026
|
+
before.size < 2n ||
|
|
1027
|
+
before.size > 131_072n
|
|
1028
|
+
) {
|
|
1029
|
+
throw new Error('The OpenNext image optimizer package lock has an invalid identity.');
|
|
1030
|
+
}
|
|
1031
|
+
const raw = readFileSync(lockPath, 'utf8');
|
|
1032
|
+
if (Buffer.byteLength(raw, 'utf8') !== Number(before.size)) {
|
|
1033
|
+
throw new Error('The OpenNext image optimizer package lock changed while reading.');
|
|
1034
|
+
}
|
|
1035
|
+
const parsed = JSON.parse(raw);
|
|
1036
|
+
if (
|
|
1037
|
+
parsed === null ||
|
|
1038
|
+
typeof parsed !== 'object' ||
|
|
1039
|
+
Array.isArray(parsed) ||
|
|
1040
|
+
!/^open-next-install-image-optimization-function[A-Za-z0-9]{6}$/u.test(
|
|
1041
|
+
parsed.name,
|
|
1042
|
+
) ||
|
|
1043
|
+
parsed.lockfileVersion !== 3 ||
|
|
1044
|
+
parsed.requires !== true ||
|
|
1045
|
+
parsed.packages === null ||
|
|
1046
|
+
typeof parsed.packages !== 'object' ||
|
|
1047
|
+
Array.isArray(parsed.packages)
|
|
1048
|
+
) {
|
|
1049
|
+
throw new Error('The OpenNext image optimizer package lock shape is unsupported.');
|
|
1050
|
+
}
|
|
1051
|
+
parsed.name = 'open-next-image-optimization-function';
|
|
1052
|
+
const normalized = JSON.stringify(parsed, null, 2) + '\\n';
|
|
1053
|
+
const temporaryPath = join(lockParent, '.package-lock.json.ebk-normalized');
|
|
1054
|
+
writeFileSync(temporaryPath, normalized, {
|
|
1055
|
+
encoding: 'utf8',
|
|
1056
|
+
flag: 'wx',
|
|
1057
|
+
mode: Number(before.mode & 0o777n),
|
|
1058
|
+
});
|
|
1059
|
+
chmodSync(temporaryPath, Number(before.mode & 0o777n));
|
|
1060
|
+
renameSync(temporaryPath, lockPath);
|
|
1061
|
+
const after = lstatSync(lockPath, { bigint: true });
|
|
1062
|
+
if (
|
|
1063
|
+
!after.isFile() ||
|
|
1064
|
+
after.isSymbolicLink() ||
|
|
1065
|
+
after.nlink !== 1n ||
|
|
1066
|
+
after.mode !== before.mode ||
|
|
1067
|
+
readFileSync(lockPath, 'utf8') !== normalized
|
|
1068
|
+
) {
|
|
1069
|
+
throw new Error('The normalized OpenNext image optimizer package lock is invalid.');
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
591
1072
|
`,
|
|
592
1073
|
'tsconfig.json': (0, built_in_plan_shared_js_1.json)({
|
|
593
1074
|
extends: '../../tsconfig.base.json',
|
|
@@ -613,6 +1094,7 @@ export {};
|
|
|
613
1094
|
'api/**/*.ts',
|
|
614
1095
|
'infra/**/*.ts',
|
|
615
1096
|
'jobs/**/*.ts',
|
|
1097
|
+
'performance/**/*.ts',
|
|
616
1098
|
'reliability/**/*.ts',
|
|
617
1099
|
'secrets/**/*.ts',
|
|
618
1100
|
'services/**/*.ts',
|
|
@@ -626,5 +1108,11 @@ export {};
|
|
|
626
1108
|
exclude: ['.sst', 'dist', 'node_modules'],
|
|
627
1109
|
}),
|
|
628
1110
|
};
|
|
1111
|
+
const sqlOnlyPaths = new Set([
|
|
1112
|
+
'scripts/check-database.mjs',
|
|
1113
|
+
'scripts/local-database.mjs',
|
|
1114
|
+
'scripts/migrate-database.mjs',
|
|
1115
|
+
]);
|
|
1116
|
+
return Object.fromEntries(Object.entries(files).filter(([path]) => sql || !sqlOnlyPaths.has(path)));
|
|
629
1117
|
}
|
|
630
1118
|
//# sourceMappingURL=built-in-plan-operations-files.js.map
|