@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.40
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 +18 -0
- 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.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 +6 -0
- package/src/cli/deploy-runtime.js +58 -0
- package/src/cli/dev-command.d.ts +16 -4
- package/src/cli/dev-command.js +63 -0
- package/src/cli/main.d.ts +9 -1
- package/src/cli/main.js +139 -20
- package/src/cli/output.d.ts +1 -1
- package/src/cli/output.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 +5 -0
- package/src/developer-agent/operation-registry.js +286 -40
- package/src/developer-agent/planning.js +16 -13
- 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 +162 -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 +40 -6
- package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
- 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/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/tool-versions.d.ts +2 -0
- package/src/generators/preset/tool-versions.js +3 -1
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +303 -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 +90 -28
- 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-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +518 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
- package/src/generators/preset/workspace-files-thin-docs.js +352 -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 +1504 -608
- 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 +42 -7
- 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 +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -2
- 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 +163 -1196
- 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 +20 -1
- 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 +7 -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 -729
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
- 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 +157 -28
- 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 +279 -43
- 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-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -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 +80 -29
- 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/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 +39 -8
- package/src/git-policy/github-bootstrap.js +329 -175
- 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 +46 -18
- 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 +14 -2
- 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/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/verification.js +9 -1
- 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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type FleetProcessIdentity, type ProcessIdentityProbe } from '../local-dev/fleet-lock.js';
|
|
2
|
+
import { type PrivateStateSecurity } from '../local-dev/private-state.js';
|
|
3
|
+
import { openPrivateSmokeControlPlane } from './private-smoke-control-plane.js';
|
|
4
|
+
import type { GithubPrivateSmokeInput } from './private-smoke-access.js';
|
|
5
|
+
export interface LocalPrivateSmokeInput extends GithubPrivateSmokeInput {
|
|
6
|
+
/** Already verified invocation-private transport, never ambient credentials. */
|
|
7
|
+
credentialEnvironment: NodeJS.ProcessEnv;
|
|
8
|
+
}
|
|
9
|
+
interface Dependencies {
|
|
10
|
+
fetch?: typeof fetch;
|
|
11
|
+
open?: typeof openPrivateSmokeControlPlane;
|
|
12
|
+
capture?: () => FleetProcessIdentity;
|
|
13
|
+
probe?: (owner: FleetProcessIdentity) => ProcessIdentityProbe;
|
|
14
|
+
security?: PrivateStateSecurity;
|
|
15
|
+
wait?: (milliseconds: number) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/** Used after the local lifecycle verifies source, policy and federated role.
|
|
18
|
+
* A private process receipt proves recovery ownership, not deployment authority. */
|
|
19
|
+
export declare function runLocalPrivateSmoke(input: LocalPrivateSmokeInput, dependencies?: Dependencies): Promise<void>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runLocalPrivateSmoke = runLocalPrivateSmoke;
|
|
4
|
+
const client_cloudfront_1 = require("@aws-sdk/client-cloudfront");
|
|
5
|
+
const client_wafv2_1 = require("@aws-sdk/client-wafv2");
|
|
6
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const process_identity_js_1 = require("../local-dev/process-identity.js");
|
|
11
|
+
const fleet_lock_js_1 = require("../local-dev/fleet-lock.js");
|
|
12
|
+
const private_state_js_1 = require("../local-dev/private-state.js");
|
|
13
|
+
const index_js_1 = require("../repository-policy/index.js");
|
|
14
|
+
const federated_credential_transport_js_1 = require("../executors/local-deploy/federated-credential-transport.js");
|
|
15
|
+
const router_waf_js_1 = require("./router-waf.js");
|
|
16
|
+
const private_smoke_control_plane_js_1 = require("./private-smoke-control-plane.js");
|
|
17
|
+
const private_smoke_admission_js_1 = require("./private-smoke-admission.js");
|
|
18
|
+
function check(value, message) {
|
|
19
|
+
if (!value)
|
|
20
|
+
throw new Error(`Local private smoke: ${message}`);
|
|
21
|
+
}
|
|
22
|
+
/** Used after the local lifecycle verifies source, policy and federated role.
|
|
23
|
+
* A private process receipt proves recovery ownership, not deployment authority. */
|
|
24
|
+
async function runLocalPrivateSmoke(input, dependencies = {}) {
|
|
25
|
+
check(!(0, index_js_1.requiresGithubDeployment)(input.deploymentProfile, input.stage), 'stage requires protected GitHub authority');
|
|
26
|
+
const policy = (0, router_waf_js_1.normalizeRouterWafPolicy)(JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(input.root, 'packages/foundation/security/router-waf.json'), 'utf8')));
|
|
27
|
+
check(policy.deploymentProfile === input.deploymentProfile, 'deployment profile differs');
|
|
28
|
+
const stagePolicy = policy.stages[input.stage];
|
|
29
|
+
check(stagePolicy, 'stage is inactive');
|
|
30
|
+
if (stagePolicy.access === 'public' || stagePolicy.mode === 'count') {
|
|
31
|
+
await input.run();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const allowedCidrs = stagePolicy.allowedCidrs.filter((cidr) => !cidr.includes(':'));
|
|
35
|
+
// Temporary admission has its own empty set; never update the baseline.
|
|
36
|
+
const baseline = [];
|
|
37
|
+
check(/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(input.source), 'source identity is invalid');
|
|
38
|
+
const policyDigest = (0, router_waf_js_1.routerWafPolicyDigest)(policy);
|
|
39
|
+
const identity = {
|
|
40
|
+
account: input.account,
|
|
41
|
+
stage: input.stage,
|
|
42
|
+
workspace: input.workspace,
|
|
43
|
+
policyDigest,
|
|
44
|
+
};
|
|
45
|
+
const open = dependencies.open ??
|
|
46
|
+
(async (resourceIdentity, url) => {
|
|
47
|
+
const environment = input.credentialEnvironment;
|
|
48
|
+
check(environment.AWS_PROFILE &&
|
|
49
|
+
environment.AWS_CONFIG_FILE &&
|
|
50
|
+
environment.AWS_SHARED_CREDENTIALS_FILE, 'verified private credential transport is missing');
|
|
51
|
+
const credentials = (0, credential_providers_1.fromIni)({
|
|
52
|
+
profile: environment.AWS_PROFILE,
|
|
53
|
+
configFilepath: environment.AWS_CONFIG_FILE,
|
|
54
|
+
filepath: environment.AWS_SHARED_CREDENTIALS_FILE,
|
|
55
|
+
// The invocation refreshes this same file before smoke. Ownership
|
|
56
|
+
// checks may already have populated Smithy's shared ini-file cache.
|
|
57
|
+
ignoreCache: true,
|
|
58
|
+
});
|
|
59
|
+
const options = {
|
|
60
|
+
credentials,
|
|
61
|
+
region: 'us-east-1',
|
|
62
|
+
maxAttempts: 3,
|
|
63
|
+
requestHandler: { connectionTimeout: 10_000, requestTimeout: 30_000 },
|
|
64
|
+
};
|
|
65
|
+
return (0, private_smoke_control_plane_js_1.openPrivateSmokeControlPlane)(resourceIdentity, url, {
|
|
66
|
+
waf: new client_wafv2_1.WAFV2Client({
|
|
67
|
+
...options,
|
|
68
|
+
endpoint: 'https://wafv2.us-east-1.amazonaws.com',
|
|
69
|
+
}),
|
|
70
|
+
cloudfront: new client_cloudfront_1.CloudFrontClient({
|
|
71
|
+
...options,
|
|
72
|
+
endpoint: 'https://cloudfront.amazonaws.com',
|
|
73
|
+
}),
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
const store = await open(identity, input.url);
|
|
77
|
+
const request = dependencies.fetch ?? fetch;
|
|
78
|
+
const wait = dependencies.wait ??
|
|
79
|
+
((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
80
|
+
const path = (0, node_path_1.join)((0, node_fs_1.realpathSync)(input.root), '.ebk/evidence/local-smoke', `${input.stage}.json`);
|
|
81
|
+
const security = dependencies.security;
|
|
82
|
+
const readOwner = () => {
|
|
83
|
+
const value = JSON.parse((0, private_state_js_1.readPrivateFile)(path, security).toString('utf8'));
|
|
84
|
+
check(value?.kind === 'ebk-local-smoke-owner' &&
|
|
85
|
+
value.schemaVersion === 1 &&
|
|
86
|
+
value.account === input.account &&
|
|
87
|
+
value.stage === input.stage &&
|
|
88
|
+
value.workspace === input.workspace &&
|
|
89
|
+
value.policyDigest === policyDigest, 'retained owner or policy differs; preserve recovery evidence');
|
|
90
|
+
(0, fleet_lock_js_1.validateFleetProcessIdentity)(value.owner);
|
|
91
|
+
check(value.context?.authority === 'local' &&
|
|
92
|
+
/^[a-f0-9]{32}$/.test(value.context.run) &&
|
|
93
|
+
/^[1-9]\d*$/.test(value.context.attempt) &&
|
|
94
|
+
/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(value.context.source) &&
|
|
95
|
+
JSON.stringify(value.context.baseline) === JSON.stringify(baseline), 'retained admission context is invalid');
|
|
96
|
+
return value;
|
|
97
|
+
};
|
|
98
|
+
const releaseOwner = (expected) => {
|
|
99
|
+
check(JSON.stringify(readOwner()) === JSON.stringify(expected), 'private owner changed; cleanup not accepted');
|
|
100
|
+
const retired = `${path}.${expected.context.run}.completed`;
|
|
101
|
+
check(!(0, node_fs_1.existsSync)(retired), 'prior recovery completion is unresolved');
|
|
102
|
+
(0, node_fs_1.renameSync)(path, retired);
|
|
103
|
+
if ((0, private_state_js_1.readPrivateFile)(retired, security).toString('utf8') !==
|
|
104
|
+
JSON.stringify(expected)) {
|
|
105
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
106
|
+
(0, node_fs_1.renameSync)(retired, path);
|
|
107
|
+
throw new Error('Local private smoke: owner changed during retirement');
|
|
108
|
+
}
|
|
109
|
+
(0, node_fs_1.unlinkSync)(retired);
|
|
110
|
+
};
|
|
111
|
+
if ((0, node_fs_1.existsSync)(path)) {
|
|
112
|
+
(0, private_state_js_1.assertPrivatePath)((0, node_path_1.join)(input.root, '.ebk/evidence/local-smoke'), 'directory', security);
|
|
113
|
+
const previous = readOwner();
|
|
114
|
+
check((dependencies.probe ?? process_identity_js_1.probeProcessIdentity)(previous.owner) === 'absent', 'prior smoke process is active or ambiguous');
|
|
115
|
+
await (0, private_smoke_admission_js_1.recoverSmokeAdmission)(store, baseline, async (lease) => lease.authority === 'local' &&
|
|
116
|
+
lease.run === previous.context.run &&
|
|
117
|
+
lease.attempt === previous.context.attempt &&
|
|
118
|
+
lease.source === previous.context.source);
|
|
119
|
+
releaseOwner(previous);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Foreign/local-without-receipt and hosted leases must not be claimed.
|
|
123
|
+
await (0, private_smoke_admission_js_1.recoverSmokeAdmission)(store, baseline, async () => false);
|
|
124
|
+
}
|
|
125
|
+
const ipResponse = await request('https://checkip.amazonaws.com', {
|
|
126
|
+
redirect: 'error',
|
|
127
|
+
signal: AbortSignal.timeout(15_000),
|
|
128
|
+
});
|
|
129
|
+
check(ipResponse.ok, 'operator IPv4 lookup failed');
|
|
130
|
+
const address = await ipResponse.text();
|
|
131
|
+
check(address.length <= 64, 'operator IPv4 response exceeds bound');
|
|
132
|
+
const cidr = (0, private_smoke_admission_js_1.publicRunnerIpv4)(address.trim());
|
|
133
|
+
if ((0, private_smoke_admission_js_1.runnerAlreadyAllowed)(cidr, allowedCidrs)) {
|
|
134
|
+
await input.run();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const owner = (dependencies.capture ?? process_identity_js_1.captureProcessIdentity)();
|
|
138
|
+
const context = {
|
|
139
|
+
authority: 'local',
|
|
140
|
+
run: (0, node_crypto_1.randomBytes)(16).toString('hex'),
|
|
141
|
+
attempt: String(owner.pid),
|
|
142
|
+
source: input.source,
|
|
143
|
+
baseline,
|
|
144
|
+
};
|
|
145
|
+
const record = {
|
|
146
|
+
kind: 'ebk-local-smoke-owner',
|
|
147
|
+
schemaVersion: 1,
|
|
148
|
+
...identity,
|
|
149
|
+
owner,
|
|
150
|
+
context,
|
|
151
|
+
};
|
|
152
|
+
check((0, private_state_js_1.createPrivateFileExclusive)(path, JSON.stringify(record), security), 'another invocation owns local smoke');
|
|
153
|
+
async function observe(allowed, signal) {
|
|
154
|
+
for (let i = 0; i < 24; i++) {
|
|
155
|
+
signal?.throwIfAborted();
|
|
156
|
+
const response = await request(input.url, {
|
|
157
|
+
redirect: 'manual',
|
|
158
|
+
signal: signal
|
|
159
|
+
? AbortSignal.any([signal, AbortSignal.timeout(15_000)])
|
|
160
|
+
: AbortSignal.timeout(15_000),
|
|
161
|
+
});
|
|
162
|
+
await response.body?.cancel();
|
|
163
|
+
if (allowed
|
|
164
|
+
? response.status >= 200 && response.status < 400
|
|
165
|
+
: response.status === 403)
|
|
166
|
+
return;
|
|
167
|
+
if (i < 23)
|
|
168
|
+
await wait(5_000);
|
|
169
|
+
}
|
|
170
|
+
throw new Error(`Local private smoke: ${allowed ? 'admission' : 'revocation'} not observed; deployment acceptance prohibited`);
|
|
171
|
+
}
|
|
172
|
+
const unregister = (0, federated_credential_transport_js_1.registerGovernedSignalCleanup)(async () => {
|
|
173
|
+
await (0, private_smoke_admission_js_1.cleanupSmokeAdmission)(store, context);
|
|
174
|
+
}, 90);
|
|
175
|
+
try {
|
|
176
|
+
await (0, private_smoke_admission_js_1.withPrivateSmokeAdmission)({
|
|
177
|
+
store,
|
|
178
|
+
context,
|
|
179
|
+
cidr,
|
|
180
|
+
run: input.run,
|
|
181
|
+
awaitAdmission: (signal) => observe(true, signal),
|
|
182
|
+
awaitRevocation: () => observe(false),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
try {
|
|
187
|
+
// A failed smoke may still have cleaned up correctly. Retain this receipt
|
|
188
|
+
// only when remote cleanup is unproved, for exact next-run recovery.
|
|
189
|
+
await (0, private_smoke_admission_js_1.cleanupSmokeAdmission)(store, context);
|
|
190
|
+
releaseOwner(record);
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
unregister();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=local-private-smoke-access.js.map
|
|
@@ -13,7 +13,7 @@ function record(value) {
|
|
|
13
13
|
}
|
|
14
14
|
function stateResources(value) {
|
|
15
15
|
const root = record(value);
|
|
16
|
-
const deployment = record(root?.deployment);
|
|
16
|
+
const deployment = record(root?.deployment) ?? record(root?.latest) ?? root;
|
|
17
17
|
const resources = deployment?.resources ?? root?.resources;
|
|
18
18
|
if (!Array.isArray(resources)) {
|
|
19
19
|
throw new Error('SST state export does not contain a Pulumi deployment resource list.');
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const FOUNDATION_PENDING_DATABASE_ENDPOINT: "pending.invalid";
|
|
2
|
+
/**
|
|
3
|
+
* Pulumi can evaluate a refresh program against an interrupted first deploy
|
|
4
|
+
* before the Aurora cluster has ever existed. SST currently resolves that
|
|
5
|
+
* absent endpoint as `undefined` and its Aurora link implementation calls
|
|
6
|
+
* `.split()` unconditionally. Keep the refresh program total without
|
|
7
|
+
* publishing a routable cross-stage value. A subsequent deploy receives the
|
|
8
|
+
* real provider output and replaces this sentinel before creating discovery.
|
|
9
|
+
*/
|
|
10
|
+
export declare function foundationDatabaseEndpointHost(endpoint: unknown): string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FOUNDATION_PENDING_DATABASE_ENDPOINT = void 0;
|
|
4
|
+
exports.foundationDatabaseEndpointHost = foundationDatabaseEndpointHost;
|
|
5
|
+
exports.FOUNDATION_PENDING_DATABASE_ENDPOINT = 'pending.invalid';
|
|
6
|
+
/**
|
|
7
|
+
* Pulumi can evaluate a refresh program against an interrupted first deploy
|
|
8
|
+
* before the Aurora cluster has ever existed. SST currently resolves that
|
|
9
|
+
* absent endpoint as `undefined` and its Aurora link implementation calls
|
|
10
|
+
* `.split()` unconditionally. Keep the refresh program total without
|
|
11
|
+
* publishing a routable cross-stage value. A subsequent deploy receives the
|
|
12
|
+
* real provider output and replaces this sentinel before creating discovery.
|
|
13
|
+
*/
|
|
14
|
+
function foundationDatabaseEndpointHost(endpoint) {
|
|
15
|
+
if (typeof endpoint !== 'string') {
|
|
16
|
+
return exports.FOUNDATION_PENDING_DATABASE_ENDPOINT;
|
|
17
|
+
}
|
|
18
|
+
const host = endpoint.trim().split(':', 1)[0]?.trim() ?? '';
|
|
19
|
+
return host.length > 0 ? host : exports.FOUNDATION_PENDING_DATABASE_ENDPOINT;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=partial-state.js.map
|
|
@@ -73,19 +73,34 @@ async function evaluateFoundationPreflight(options) {
|
|
|
73
73
|
result.invalidNames.forEach((name) => invalidNames.add(name));
|
|
74
74
|
result.values.forEach((value, name) => values.set(name, value));
|
|
75
75
|
}
|
|
76
|
+
const value = (key) => values.get((0, discovery_js_1.foundationSsmPath)(foundationStage, key)) ?? '';
|
|
77
|
+
const capabilities = value('capabilities')
|
|
78
|
+
.split(',')
|
|
79
|
+
.map((capability) => capability.trim())
|
|
80
|
+
.filter(Boolean);
|
|
81
|
+
const hasPostgres = capabilities.includes('postgres');
|
|
82
|
+
const resourceNames = (0, discovery_js_1.foundationSsmKeysForCapabilities)(capabilities.filter(requirements_js_1.isStandardFoundationCapability))
|
|
83
|
+
.map((key) => (0, discovery_js_1.foundationSsmPath)(foundationStage, key))
|
|
84
|
+
.filter((name) => !names.includes(name));
|
|
85
|
+
for (const batch of chunks(resourceNames, 10)) {
|
|
86
|
+
const result = await options.readParameters(batch);
|
|
87
|
+
result.invalidNames.forEach((name) => invalidNames.add(name));
|
|
88
|
+
result.values.forEach((value, name) => values.set(name, value));
|
|
89
|
+
}
|
|
90
|
+
names.push(...resourceNames);
|
|
76
91
|
const issues = names
|
|
77
92
|
.filter((name) => invalidNames.has(name) || !values.get(name))
|
|
78
93
|
.map((name) => `missing required parameter ${name}`);
|
|
79
94
|
const allRequiredParametersMissing = names.every((name) => invalidNames.has(name) || !values.has(name));
|
|
80
|
-
const value = (key) => values.get((0, discovery_js_1.foundationSsmPath)(foundationStage, key)) ?? '';
|
|
81
95
|
const schemaVersion = Number(value('schemaVersion'));
|
|
82
96
|
if (schemaVersion !== discovery_js_1.FOUNDATION_SSM_SCHEMA_VERSION) {
|
|
83
97
|
issues.push(`Foundation discovery schema ${value('schemaVersion') || 'missing'} does not match ${discovery_js_1.FOUNDATION_SSM_SCHEMA_VERSION}`);
|
|
84
98
|
}
|
|
85
99
|
const databasePort = Number(value('databasePort'));
|
|
86
|
-
if (
|
|
87
|
-
databasePort
|
|
88
|
-
|
|
100
|
+
if (hasPostgres &&
|
|
101
|
+
(!Number.isSafeInteger(databasePort) ||
|
|
102
|
+
databasePort < 1 ||
|
|
103
|
+
databasePort > 65535)) {
|
|
89
104
|
issues.push('Foundation discovery databasePort must be from 1 through 65535');
|
|
90
105
|
}
|
|
91
106
|
const accountMonthlyMaximumUsd = Number(value('accountMonthlyMaximumUsd'));
|
|
@@ -103,10 +118,6 @@ async function evaluateFoundationPreflight(options) {
|
|
|
103
118
|
if (!isExactCognitoTokenEndpoint(value('identityTokenEndpoint'), options.region)) {
|
|
104
119
|
issues.push('Foundation discovery identityTokenEndpoint must be the exact Cognito HTTPS token endpoint for the selected AWS Region');
|
|
105
120
|
}
|
|
106
|
-
const capabilities = value('capabilities')
|
|
107
|
-
.split(',')
|
|
108
|
-
.map((capability) => capability.trim())
|
|
109
|
-
.filter(Boolean);
|
|
110
121
|
const compatibility = (0, requirements_js_1.validateFoundationCompatibility)(options.requirement, {
|
|
111
122
|
capabilities,
|
|
112
123
|
contractVersion: value('contractVersion'),
|
|
@@ -128,15 +139,21 @@ async function evaluateFoundationPreflight(options) {
|
|
|
128
139
|
accountMonthlyMaximumUsd,
|
|
129
140
|
alertTopicArn: value('alertTopicArn'),
|
|
130
141
|
capabilities: compatibility.value.capabilities,
|
|
131
|
-
|
|
142
|
+
...(capabilities.includes('container-compute')
|
|
143
|
+
? { clusterId: value('clusterId') }
|
|
144
|
+
: {}),
|
|
132
145
|
contractVersion: compatibility.value.contractVersion,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
146
|
+
...(hasPostgres
|
|
147
|
+
? {
|
|
148
|
+
databaseClusterArn: value('databaseClusterArn'),
|
|
149
|
+
databaseClusterEndpoint: value('databaseClusterEndpoint'),
|
|
150
|
+
databaseClusterId: value('databaseClusterId'),
|
|
151
|
+
databaseClusterResourceId: value('databaseClusterResourceId'),
|
|
152
|
+
databaseHost: value('databaseHost'),
|
|
153
|
+
databaseMasterSecretArn: value('databaseMasterSecretArn'),
|
|
154
|
+
databasePort,
|
|
155
|
+
}
|
|
156
|
+
: {}),
|
|
140
157
|
eventBusArn: value('eventBusArn'),
|
|
141
158
|
eventBusName: value('eventBusName'),
|
|
142
159
|
hasPublicDomain: value('hasPublicDomain') === 'true',
|
|
@@ -147,7 +164,7 @@ async function evaluateFoundationPreflight(options) {
|
|
|
147
164
|
routerDistributionId: value('routerDistributionId'),
|
|
148
165
|
routerUrl: value('routerUrl'),
|
|
149
166
|
schemaVersion: discovery_js_1.FOUNDATION_SSM_SCHEMA_VERSION,
|
|
150
|
-
vpcId: value('vpcId'),
|
|
167
|
+
...(capabilities.includes('network') ? { vpcId: value('vpcId') } : {}),
|
|
151
168
|
},
|
|
152
169
|
consumerStage,
|
|
153
170
|
foundationStage,
|
|
@@ -163,7 +180,9 @@ function formatFoundationPreflightReport(report) {
|
|
|
163
180
|
];
|
|
164
181
|
report.issues.forEach((issue) => lines.push(` - ${issue}`));
|
|
165
182
|
if (!report.ok) {
|
|
166
|
-
lines.push(
|
|
183
|
+
lines.push(report.foundationStage === 'development'
|
|
184
|
+
? ' Establish Foundation through ebk deploy development --profile=<approved-profile> --expectedRoleArn=<approved-development-role>; the governed stage lifecycle deploys Foundation before eligible Slices.'
|
|
185
|
+
: ` Establish Foundation through the governed ${report.foundationStage} stage lifecycle under the repository deployment profile; follow its protected deployment runbook.`);
|
|
167
186
|
}
|
|
168
187
|
return lines.join('\n');
|
|
169
188
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { openPrivateSmokeControlPlane } from './private-smoke-control-plane.js';
|
|
2
|
+
import { type SmokeAdmissionLease } from './private-smoke-admission.js';
|
|
3
|
+
import type { CanonicalDeploymentStage, DeploymentProfile } from '../repository-policy/index.js';
|
|
4
|
+
export interface GithubPrivateSmokeInput {
|
|
5
|
+
account: string;
|
|
6
|
+
deploymentProfile: DeploymentProfile;
|
|
7
|
+
root: string;
|
|
8
|
+
source: string;
|
|
9
|
+
stage: CanonicalDeploymentStage;
|
|
10
|
+
url: string;
|
|
11
|
+
workspace: string;
|
|
12
|
+
/** Receives the admission lease when the runner was admitted; undefined when no admission was needed. */
|
|
13
|
+
run: (lease?: SmokeAdmissionLease) => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
interface PrivateSmokeDependencies {
|
|
16
|
+
environment?: NodeJS.ProcessEnv;
|
|
17
|
+
fetch?: typeof fetch;
|
|
18
|
+
open?: typeof openPrivateSmokeControlPlane;
|
|
19
|
+
wait?: (milliseconds: number) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/** Called only inside the source/role-verified protected stage lifecycle. */
|
|
22
|
+
export declare function runGithubPrivateSmoke(input: GithubPrivateSmokeInput, dependencies?: PrivateSmokeDependencies): Promise<void>;
|
|
23
|
+
/** Generated protected workflow finalizer. It can only remove an exact admission. */
|
|
24
|
+
export declare function cleanupGithubPrivateSmoke(input: Omit<GithubPrivateSmokeInput, 'url' | 'run'>, dependencies?: PrivateSmokeDependencies): Promise<void>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runGithubPrivateSmoke = runGithubPrivateSmoke;
|
|
4
|
+
exports.cleanupGithubPrivateSmoke = cleanupGithubPrivateSmoke;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const router_waf_js_1 = require("./router-waf.js");
|
|
8
|
+
const private_smoke_control_plane_js_1 = require("./private-smoke-control-plane.js");
|
|
9
|
+
const private_smoke_admission_js_1 = require("./private-smoke-admission.js");
|
|
10
|
+
function check(condition, message) {
|
|
11
|
+
if (!condition)
|
|
12
|
+
throw new Error(`Private smoke access: ${message}`);
|
|
13
|
+
}
|
|
14
|
+
/** Called only inside the source/role-verified protected stage lifecycle. */
|
|
15
|
+
async function runGithubPrivateSmoke(input, dependencies = {}) {
|
|
16
|
+
return privateSmokeOperation(input, dependencies, false);
|
|
17
|
+
}
|
|
18
|
+
/** Generated protected workflow finalizer. It can only remove an exact admission. */
|
|
19
|
+
async function cleanupGithubPrivateSmoke(input, dependencies = {}) {
|
|
20
|
+
return privateSmokeOperation({ ...input, url: '', run: async () => undefined }, dependencies, true);
|
|
21
|
+
}
|
|
22
|
+
async function privateSmokeOperation(input, dependencies, cleanupOnly) {
|
|
23
|
+
const environment = dependencies.environment ?? process.env;
|
|
24
|
+
const request = dependencies.fetch ?? fetch;
|
|
25
|
+
const policy = (0, router_waf_js_1.normalizeRouterWafPolicy)(JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(input.root, 'packages/foundation/security/router-waf.json'), 'utf8')));
|
|
26
|
+
check(policy.deploymentProfile === input.deploymentProfile, 'WAF deployment profile differs from repository policy');
|
|
27
|
+
const stagePolicy = policy.stages[input.stage];
|
|
28
|
+
check(stagePolicy, 'inactive WAF stage');
|
|
29
|
+
if (stagePolicy.access === 'public' || stagePolicy.mode === 'count') {
|
|
30
|
+
await input.run();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const allowedCidrs = stagePolicy.allowedCidrs.filter((cidr) => !cidr.includes(':'));
|
|
34
|
+
// Temporary admission has its own empty set; never update the baseline.
|
|
35
|
+
const baseline = [];
|
|
36
|
+
const repository = environment.GITHUB_REPOSITORY ?? '';
|
|
37
|
+
const ref = `refs/heads/${input.stage === 'production' ? 'main' : 'develop'}`;
|
|
38
|
+
const workflow = `${repository}/.github/workflows/deploy.yml@${ref}`;
|
|
39
|
+
check(environment.GITHUB_ACTIONS === 'true' &&
|
|
40
|
+
/^[\w.-]+\/[\w.-]+$/.test(repository) &&
|
|
41
|
+
environment.GITHUB_REF === ref &&
|
|
42
|
+
environment.GITHUB_SHA === input.source &&
|
|
43
|
+
environment.EBK_GITHUB_JOB_WORKFLOW_REF === workflow &&
|
|
44
|
+
((environment.GITHUB_EVENT_NAME === 'workflow_dispatch' &&
|
|
45
|
+
environment.GITHUB_WORKFLOW_REF === workflow) ||
|
|
46
|
+
(environment.GITHUB_EVENT_NAME === 'push' &&
|
|
47
|
+
input.deploymentProfile !== 'starter' &&
|
|
48
|
+
environment.GITHUB_WORKFLOW_REF ===
|
|
49
|
+
`${repository}/.github/workflows/ci.yml@${ref}`)), 'exact protected deployment workflow/source required');
|
|
50
|
+
const run = environment.GITHUB_RUN_ID ?? '';
|
|
51
|
+
const attempt = environment.GITHUB_RUN_ATTEMPT ?? '';
|
|
52
|
+
check(/^[1-9]\d*$/.test(run) &&
|
|
53
|
+
/^[1-9]\d*$/.test(attempt) &&
|
|
54
|
+
/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(input.source), 'invalid protected invocation identity');
|
|
55
|
+
const store = await (dependencies.open ?? private_smoke_control_plane_js_1.openPrivateSmokeControlPlane)({
|
|
56
|
+
account: input.account,
|
|
57
|
+
stage: input.stage,
|
|
58
|
+
workspace: input.workspace,
|
|
59
|
+
policyDigest: (0, router_waf_js_1.routerWafPolicyDigest)(policy),
|
|
60
|
+
}, cleanupOnly ? undefined : input.url);
|
|
61
|
+
await (0, private_smoke_admission_js_1.recoverSmokeAdmission)(store, baseline, async (lease) => {
|
|
62
|
+
// A local process lease has no GitHub run authority; never infer one.
|
|
63
|
+
if (lease.authority === 'local')
|
|
64
|
+
return false;
|
|
65
|
+
// An old attempt of this run can be recovered only after GitHub confirms it ended.
|
|
66
|
+
if (lease.run === run && lease.attempt === attempt)
|
|
67
|
+
return cleanupOnly && lease.source === input.source;
|
|
68
|
+
const token = environment.GITHUB_TOKEN;
|
|
69
|
+
check(token, 'stale admission requires actions:read to confirm the exact prior run completed');
|
|
70
|
+
const response = await request(`https://api.github.com/repos/${repository}/actions/runs/${lease.run}/attempts/${lease.attempt}`, {
|
|
71
|
+
headers: {
|
|
72
|
+
Authorization: `Bearer ${token}`,
|
|
73
|
+
Accept: 'application/vnd.github+json',
|
|
74
|
+
},
|
|
75
|
+
redirect: 'error',
|
|
76
|
+
signal: AbortSignal.timeout(15_000),
|
|
77
|
+
});
|
|
78
|
+
check(response.ok, 'prior workflow status unavailable; admission retained for protected recovery');
|
|
79
|
+
const prior = (await response.json());
|
|
80
|
+
const headRepository = prior.head_repository;
|
|
81
|
+
return (String(prior.id) === lease.run &&
|
|
82
|
+
String(prior.run_attempt) === lease.attempt &&
|
|
83
|
+
prior.status === 'completed' &&
|
|
84
|
+
prior.head_sha === lease.source &&
|
|
85
|
+
prior.head_branch === ref.slice('refs/heads/'.length) &&
|
|
86
|
+
headRepository?.full_name === repository &&
|
|
87
|
+
((prior.path === '.github/workflows/deploy.yml' &&
|
|
88
|
+
prior.event === 'workflow_dispatch') ||
|
|
89
|
+
(input.deploymentProfile !== 'starter' &&
|
|
90
|
+
prior.path === '.github/workflows/ci.yml' &&
|
|
91
|
+
prior.event === 'push')));
|
|
92
|
+
});
|
|
93
|
+
if (cleanupOnly)
|
|
94
|
+
return;
|
|
95
|
+
const ipResponse = await request('https://checkip.amazonaws.com', {
|
|
96
|
+
redirect: 'error',
|
|
97
|
+
signal: AbortSignal.timeout(15_000),
|
|
98
|
+
});
|
|
99
|
+
check(ipResponse.ok, 'runner IPv4 lookup failed');
|
|
100
|
+
const address = await ipResponse.text();
|
|
101
|
+
check(address.length <= 64, 'runner IPv4 response exceeds bound');
|
|
102
|
+
const cidr = (0, private_smoke_admission_js_1.publicRunnerIpv4)(address.trim());
|
|
103
|
+
if ((0, private_smoke_admission_js_1.runnerAlreadyAllowed)(cidr, allowedCidrs)) {
|
|
104
|
+
await input.run();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const wait = dependencies.wait ??
|
|
108
|
+
((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
|
|
109
|
+
async function observe(allowed) {
|
|
110
|
+
for (let poll = 0; poll < 24; poll += 1) {
|
|
111
|
+
const response = await request(input.url, {
|
|
112
|
+
redirect: 'manual',
|
|
113
|
+
signal: AbortSignal.timeout(15_000),
|
|
114
|
+
});
|
|
115
|
+
// Do not consume or retain an application response body.
|
|
116
|
+
await response.body?.cancel();
|
|
117
|
+
if (allowed
|
|
118
|
+
? response.status >= 200 && response.status < 400
|
|
119
|
+
: response.status === 403)
|
|
120
|
+
return;
|
|
121
|
+
if (poll < 23)
|
|
122
|
+
await wait(5_000);
|
|
123
|
+
}
|
|
124
|
+
throw new Error(`Private smoke access: ${allowed ? 'admission' : 'revocation'} was not observed; deployment acceptance prohibited`);
|
|
125
|
+
}
|
|
126
|
+
await (0, private_smoke_admission_js_1.withPrivateSmokeAdmission)({
|
|
127
|
+
store,
|
|
128
|
+
context: { run, attempt, source: input.source, baseline },
|
|
129
|
+
cidr,
|
|
130
|
+
run: input.run,
|
|
131
|
+
awaitAdmission: () => observe(true),
|
|
132
|
+
awaitRevocation: () => observe(false),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=private-smoke-access.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface SmokeAdmissionContext {
|
|
2
|
+
authority?: 'local';
|
|
3
|
+
run: string;
|
|
4
|
+
attempt: string;
|
|
5
|
+
source: string;
|
|
6
|
+
baseline: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface SmokeIpSet {
|
|
9
|
+
addresses: readonly string[];
|
|
10
|
+
description: string;
|
|
11
|
+
lockToken: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SmokeIpSetStore {
|
|
14
|
+
read(): Promise<SmokeIpSet>;
|
|
15
|
+
update(previous: SmokeIpSet, next: Pick<SmokeIpSet, 'addresses' | 'description'>): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export interface SmokeAdmissionLease {
|
|
18
|
+
authority?: 'local';
|
|
19
|
+
run: string;
|
|
20
|
+
attempt: string;
|
|
21
|
+
source: string;
|
|
22
|
+
cidr: string;
|
|
23
|
+
baseline: string;
|
|
24
|
+
expiresAt: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function runnerAlreadyAllowed(cidr: string, baseline: readonly string[]): boolean;
|
|
27
|
+
export declare function publicRunnerIpv4(value: string): string;
|
|
28
|
+
export declare function parseSmokeAdmissionLease(description: string): SmokeAdmissionLease | undefined;
|
|
29
|
+
/** Remove only this lease's address. Never replace unrelated addresses with a baseline. */
|
|
30
|
+
export declare function cleanupSmokeAdmission(store: SmokeIpSetStore, context: SmokeAdmissionContext): Promise<void>;
|
|
31
|
+
/** A retained lease alone, or its expiry, is not proof that a different run ended. */
|
|
32
|
+
export declare function recoverSmokeAdmission(store: SmokeIpSetStore, baseline: readonly string[], completedRun: (lease: SmokeAdmissionLease) => Promise<boolean>): Promise<void>;
|
|
33
|
+
export declare function withPrivateSmokeAdmission<T>(input: {
|
|
34
|
+
store: SmokeIpSetStore;
|
|
35
|
+
context: SmokeAdmissionContext;
|
|
36
|
+
cidr: string;
|
|
37
|
+
run: (lease: SmokeAdmissionLease) => Promise<T>;
|
|
38
|
+
awaitAdmission: (signal: AbortSignal) => Promise<void>;
|
|
39
|
+
awaitRevocation: () => Promise<void>;
|
|
40
|
+
now?: () => number;
|
|
41
|
+
signals?: {
|
|
42
|
+
on(event: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
|
|
43
|
+
removeListener(event: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
|
|
44
|
+
};
|
|
45
|
+
}): Promise<T>;
|