@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
package/src/supply-chain/sbom.js
CHANGED
|
@@ -12,7 +12,7 @@ const validation_js_1 = require("../validation.js");
|
|
|
12
12
|
const common_js_1 = require("./common.js");
|
|
13
13
|
const errors_js_1 = require("./errors.js");
|
|
14
14
|
const license_expression_js_1 = require("./license-expression.js");
|
|
15
|
-
exports.CYCLONEDX_SPEC_VERSION = '1.
|
|
15
|
+
exports.CYCLONEDX_SPEC_VERSION = '1.7';
|
|
16
16
|
exports.SUPPLY_CHAIN_SBOM_SCHEMA_VERSION = 1;
|
|
17
17
|
exports.SUPPLY_CHAIN_RELEASE_BINDING_KIND = 'ebk-supply-chain-release-binding';
|
|
18
18
|
exports.CYCLONEDX_INVENTORY_SCOPES = [
|
|
@@ -181,6 +181,29 @@ function uuidFromDigest(digest) {
|
|
|
181
181
|
function canonicalClone(value) {
|
|
182
182
|
return JSON.parse((0, common_js_1.canonicalizeSupplyChainValue)(value));
|
|
183
183
|
}
|
|
184
|
+
function isVersionlessSyftFileComponent(candidate) {
|
|
185
|
+
const hashes = candidate.hashes;
|
|
186
|
+
if (candidate.type !== 'file' ||
|
|
187
|
+
candidate.version !== undefined ||
|
|
188
|
+
candidate.purl !== undefined ||
|
|
189
|
+
typeof candidate.name !== 'string' ||
|
|
190
|
+
!candidate.name.startsWith('/') ||
|
|
191
|
+
candidate.name.length > 4_096 ||
|
|
192
|
+
!Array.isArray(hashes) ||
|
|
193
|
+
hashes.length !== 2) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
const sha1 = hashes[0];
|
|
197
|
+
const sha256 = hashes[1];
|
|
198
|
+
return ((0, validation_js_1.isRecord)(sha1) &&
|
|
199
|
+
sha1.alg === 'SHA-1' &&
|
|
200
|
+
typeof sha1.content === 'string' &&
|
|
201
|
+
/^[a-f0-9]{40}$/.test(sha1.content) &&
|
|
202
|
+
(0, validation_js_1.isRecord)(sha256) &&
|
|
203
|
+
sha256.alg === 'SHA-256' &&
|
|
204
|
+
typeof sha256.content === 'string' &&
|
|
205
|
+
common_js_1.SUPPLY_CHAIN_SHA256.test(sha256.content));
|
|
206
|
+
}
|
|
184
207
|
/**
|
|
185
208
|
* Create one deterministic CycloneDX inventory for a multi-architecture OCI
|
|
186
209
|
* index from the independently scanned child manifests.
|
|
@@ -244,7 +267,7 @@ function createCycloneDxPlatformSbomUnion(input) {
|
|
|
244
267
|
sbom.components.length === 0 ||
|
|
245
268
|
!Array.isArray(sbom.dependencies) ||
|
|
246
269
|
!(0, validation_js_1.isRecord)(sbom.metadata)) {
|
|
247
|
-
throw new errors_js_1.SupplyChainError('supply-chain-sbom-invalid', path, 'must be complete CycloneDX 1.
|
|
270
|
+
throw new errors_js_1.SupplyChainError('supply-chain-sbom-invalid', path, 'must be complete CycloneDX 1.7 child-manifest evidence');
|
|
248
271
|
}
|
|
249
272
|
const seenChildRefs = new Set();
|
|
250
273
|
const npmComponents = [];
|
|
@@ -263,8 +286,9 @@ function createCycloneDxPlatformSbomUnion(input) {
|
|
|
263
286
|
candidate.name.length === 0 ||
|
|
264
287
|
typeof candidate.type !== 'string' ||
|
|
265
288
|
candidate.type.length === 0 ||
|
|
266
|
-
typeof candidate.version
|
|
267
|
-
|
|
289
|
+
!((typeof candidate.version === 'string' &&
|
|
290
|
+
candidate.version.length > 0) ||
|
|
291
|
+
isVersionlessSyftFileComponent(candidate))) {
|
|
268
292
|
throw new errors_js_1.SupplyChainError('supply-chain-sbom-invalid', `${path}.components[${componentIndex}]`, 'must have one unique bounded component identity');
|
|
269
293
|
}
|
|
270
294
|
seenChildRefs.add(ref);
|
|
@@ -277,7 +301,8 @@ function createCycloneDxPlatformSbomUnion(input) {
|
|
|
277
301
|
}
|
|
278
302
|
componentByRef.set(ref, component);
|
|
279
303
|
if (typeof candidate.purl === 'string' &&
|
|
280
|
-
candidate.purl.startsWith('pkg:npm/')
|
|
304
|
+
candidate.purl.startsWith('pkg:npm/') &&
|
|
305
|
+
typeof candidate.version === 'string') {
|
|
281
306
|
npmComponents.push({
|
|
282
307
|
name: candidate.name,
|
|
283
308
|
purl: candidate.purl,
|
|
@@ -277,6 +277,9 @@ function severity(value) {
|
|
|
277
277
|
const candidate = (0, validation_js_1.isRecord)(value) && typeof value.severity === 'string'
|
|
278
278
|
? value.severity.toLowerCase()
|
|
279
279
|
: '';
|
|
280
|
+
// GitHub's GraphQL/advisory data uses MODERATE for the REST medium tier.
|
|
281
|
+
if (candidate === 'moderate')
|
|
282
|
+
return 'medium';
|
|
280
283
|
return ['critical', 'high', 'medium', 'low'].includes(candidate)
|
|
281
284
|
? candidate
|
|
282
285
|
: 'unknown';
|
|
@@ -8,7 +8,8 @@ export interface LocalTestIsolationCapabilities {
|
|
|
8
8
|
}
|
|
9
9
|
export interface LocalTestScopeIdentity {
|
|
10
10
|
attempt: number;
|
|
11
|
-
|
|
11
|
+
/** Null is an unborn local development worktree, not a deployed identity. */
|
|
12
|
+
commit: string | null;
|
|
12
13
|
runId: string;
|
|
13
14
|
seed: string;
|
|
14
15
|
stage: string;
|
|
@@ -30,7 +30,9 @@ function isCanonicalTimestamp(value) {
|
|
|
30
30
|
function requireIdentity(value) {
|
|
31
31
|
if (!slugPattern.test(value.workspace) ||
|
|
32
32
|
!slugPattern.test(value.stage) ||
|
|
33
|
-
|
|
33
|
+
(value.commit === null
|
|
34
|
+
? value.stage !== 'development'
|
|
35
|
+
: !commitPattern.test(value.commit)) ||
|
|
34
36
|
!seedPattern.test(value.runId) ||
|
|
35
37
|
!seedPattern.test(value.seed) ||
|
|
36
38
|
!Number.isSafeInteger(value.attempt) ||
|
|
@@ -59,7 +61,7 @@ function createLocalTestScope(options) {
|
|
|
59
61
|
.update([
|
|
60
62
|
identity.workspace,
|
|
61
63
|
identity.stage,
|
|
62
|
-
identity.commit,
|
|
64
|
+
identity.commit ?? 'unborn-local-worktree',
|
|
63
65
|
identity.runId,
|
|
64
66
|
String(identity.attempt),
|
|
65
67
|
String(identity.worker),
|
|
@@ -18,7 +18,8 @@ export interface TestingEvidenceSource {
|
|
|
18
18
|
* relationship rather than this result contract.
|
|
19
19
|
*/
|
|
20
20
|
blueprintCandidates: readonly string[];
|
|
21
|
-
|
|
21
|
+
/** Null denotes an unborn local worktree, never committed or deployed proof. */
|
|
22
|
+
commit: string | null;
|
|
22
23
|
frameworkCandidate: string;
|
|
23
24
|
}
|
|
24
25
|
export interface TestingEvidenceOperation {
|
|
@@ -170,9 +170,11 @@ function validateSource(value, issues) {
|
|
|
170
170
|
if (!source)
|
|
171
171
|
return undefined;
|
|
172
172
|
rejectUnknownProperties(source, ['blueprintCandidates', 'commit', 'frameworkCandidate'], 'result.source', issues);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
if (source.commit !== null) {
|
|
174
|
+
requireBoundedString(source.commit, 'result.source.commit', issues, {
|
|
175
|
+
pattern: COMMIT_PATTERN,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
176
178
|
requireBoundedString(source.frameworkCandidate, 'result.source.frameworkCandidate', issues);
|
|
177
179
|
if (!Array.isArray(source.blueprintCandidates)) {
|
|
178
180
|
addIssue(issues, 'result.source.blueprintCandidates', 'must be an array');
|
|
@@ -457,7 +459,7 @@ function validateTestingEvidenceResult(value) {
|
|
|
457
459
|
if (!outcome) {
|
|
458
460
|
addIssue(issues, 'result.outcome', `must equal one of ${exports.TESTING_EVIDENCE_OUTCOMES.join(', ')}`);
|
|
459
461
|
}
|
|
460
|
-
validateSource(result.source, issues);
|
|
462
|
+
const source = validateSource(result.source, issues);
|
|
461
463
|
const operation = validateOperation(result.operation, issues);
|
|
462
464
|
validateTiming(result.timing, issues);
|
|
463
465
|
const counts = validateCounts(result.counts, issues);
|
|
@@ -465,6 +467,18 @@ function validateTestingEvidenceResult(value) {
|
|
|
465
467
|
const findings = validateFindings(result.findings, issues);
|
|
466
468
|
validateArtifacts(result.artifacts, issues);
|
|
467
469
|
const cleanup = validateCleanup(result.cleanup, issues);
|
|
470
|
+
if (source?.commit === null &&
|
|
471
|
+
(environment?.deployed !== false ||
|
|
472
|
+
!['source', 'local-docker'].includes(environment.class) ||
|
|
473
|
+
(environment.stage !== undefined &&
|
|
474
|
+
environment.stage !== 'development') ||
|
|
475
|
+
!operation ||
|
|
476
|
+
!['source', 'contract-compatibility', 'local-integration'].includes(operation.proofLayer) ||
|
|
477
|
+
!Array.isArray(result.artifacts) ||
|
|
478
|
+
result.artifacts.some((artifact) => !(0, validation_js_1.isRecord)(artifact) ||
|
|
479
|
+
!['source-result', 'failure-diagnostics'].includes(String(artifact.retentionClass))))) {
|
|
480
|
+
addIssue(issues, 'result.source.commit', 'must be a full commit SHA outside uncommitted local source or integration checks');
|
|
481
|
+
}
|
|
468
482
|
if (operation &&
|
|
469
483
|
environment &&
|
|
470
484
|
(operation.proofLayer === 'deployed-smoke' ||
|
|
@@ -4,6 +4,7 @@ import { type ProvisionedWorkloadRoleRegistrationDocument, type RegisteredWorklo
|
|
|
4
4
|
import { type StageWorkloadRoleBoundaryContract } from './stage-boundary.js';
|
|
5
5
|
export declare const WORKLOAD_ROLE_DEPLOYMENT_POLICY_NAME: "ebk-workload-role-deployment-v1";
|
|
6
6
|
export declare const WORKLOAD_ROLE_ACCOUNT_BASELINE_SCHEMA_VERSION: 1;
|
|
7
|
+
export declare const WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS: 5;
|
|
7
8
|
export type WorkloadRoleAccountBaselineFailureClassification = 'account-baseline-input-invalid' | 'account-baseline-project-set-invalid' | 'account-baseline-result-invalid' | 'account-baseline-substitution';
|
|
8
9
|
export declare class WorkloadRoleAccountBaselineError extends Error {
|
|
9
10
|
readonly classification: WorkloadRoleAccountBaselineFailureClassification;
|
|
@@ -53,6 +54,8 @@ export interface ReviewedPriorWorkloadRoleHistoryExpectation {
|
|
|
53
54
|
export interface WorkloadRoleStageDeploymentPromotion {
|
|
54
55
|
deploymentPolicy: CanonicalIamPolicyDocument;
|
|
55
56
|
deploymentPolicyName: typeof WORKLOAD_ROLE_DEPLOYMENT_POLICY_NAME;
|
|
57
|
+
deploymentPolicyStackName: string;
|
|
58
|
+
deploymentPolicyTemplate: Readonly<Record<string, unknown>>;
|
|
56
59
|
projectPromotions: Readonly<Record<string, {
|
|
57
60
|
provisionedRegistration: ProvisionedWorkloadRoleRegistrationDocument;
|
|
58
61
|
storageParameterName: string;
|
|
@@ -80,6 +83,8 @@ export interface ProtectedWorkloadRolePublisherControlPlane {
|
|
|
80
83
|
policy: CanonicalIamPolicyDocument;
|
|
81
84
|
policyName: string;
|
|
82
85
|
roleName: string;
|
|
86
|
+
stackName: string;
|
|
87
|
+
template: Readonly<Record<string, unknown>>;
|
|
83
88
|
}): Promise<void>;
|
|
84
89
|
putRegisteredDocument(input: {
|
|
85
90
|
bucketName: string;
|
|
@@ -129,4 +134,10 @@ export declare function createWorkloadRoleStageDeploymentPromotion(options: {
|
|
|
129
134
|
export declare function publishReviewedStageWorkloadRoleCandidate(options: {
|
|
130
135
|
controlPlane: ProtectedWorkloadRolePublisherControlPlane;
|
|
131
136
|
plan: WorkloadRoleStageAccountBaselinePlan;
|
|
137
|
+
waitBeforeProvisionerRetry?: (input: {
|
|
138
|
+
attempt: number;
|
|
139
|
+
delayMs: number;
|
|
140
|
+
maxAttempts: typeof WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS;
|
|
141
|
+
project: string;
|
|
142
|
+
}) => Promise<void>;
|
|
132
143
|
}): Promise<WorkloadRoleStageDeploymentPromotion['sanitizedResult']>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WorkloadRoleAccountBaselineError = exports.WORKLOAD_ROLE_ACCOUNT_BASELINE_SCHEMA_VERSION = exports.WORKLOAD_ROLE_DEPLOYMENT_POLICY_NAME = void 0;
|
|
3
|
+
exports.WorkloadRoleAccountBaselineError = exports.WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS = exports.WORKLOAD_ROLE_ACCOUNT_BASELINE_SCHEMA_VERSION = exports.WORKLOAD_ROLE_DEPLOYMENT_POLICY_NAME = void 0;
|
|
4
4
|
exports.workloadRoleProvisionerAliasArn = workloadRoleProvisionerAliasArn;
|
|
5
5
|
exports.createWorkloadRoleStageAccountBaselinePlan = createWorkloadRoleStageAccountBaselinePlan;
|
|
6
6
|
exports.createWorkloadRoleStageDeploymentPromotion = createWorkloadRoleStageDeploymentPromotion;
|
|
@@ -13,6 +13,27 @@ const registration_js_1 = require("./registration.js");
|
|
|
13
13
|
const stage_boundary_js_1 = require("./stage-boundary.js");
|
|
14
14
|
exports.WORKLOAD_ROLE_DEPLOYMENT_POLICY_NAME = 'ebk-workload-role-deployment-v1';
|
|
15
15
|
exports.WORKLOAD_ROLE_ACCOUNT_BASELINE_SCHEMA_VERSION = 1;
|
|
16
|
+
exports.WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS = 5;
|
|
17
|
+
const IAM_MANAGED_POLICY_MAX_CHARACTERS = 6_144;
|
|
18
|
+
const IAM_ROLE_MAX_ATTACHED_MANAGED_POLICIES = 10;
|
|
19
|
+
const IAM_DEPLOYMENT_ROLE_MAX_FRAMEWORK_MANAGED_POLICIES = 9;
|
|
20
|
+
const workloadRoleProvisionerRetryDelaysMs = [
|
|
21
|
+
1_000, 2_000, 4_000, 8_000,
|
|
22
|
+
];
|
|
23
|
+
const boundedInternalProvisionerFailures = new Set([
|
|
24
|
+
'fixed-provisioner-convergence-error',
|
|
25
|
+
'fixed-provisioner-history-load-error',
|
|
26
|
+
'fixed-provisioner-history-save-error',
|
|
27
|
+
'fixed-provisioner-internal-error',
|
|
28
|
+
'fixed-provisioner-registration-save-error',
|
|
29
|
+
'fixed-provisioner-source-load-error',
|
|
30
|
+
]);
|
|
31
|
+
const retryableProvisionerFailures = new Set([
|
|
32
|
+
'fixed-provisioner-convergence-error',
|
|
33
|
+
'fixed-provisioner-history-load-error',
|
|
34
|
+
'fixed-provisioner-internal-error',
|
|
35
|
+
'fixed-provisioner-source-load-error',
|
|
36
|
+
]);
|
|
16
37
|
class WorkloadRoleAccountBaselineError extends Error {
|
|
17
38
|
classification;
|
|
18
39
|
constructor(classification, message) {
|
|
@@ -69,6 +90,9 @@ function stateBucketName(accountId, region, stage) {
|
|
|
69
90
|
function stackName(stage) {
|
|
70
91
|
return stableName(['ebk', stage, 'workload-role-account-baseline'], 128);
|
|
71
92
|
}
|
|
93
|
+
function deploymentPolicyStackName(stage) {
|
|
94
|
+
return stableName(['ebk', stage, 'workload-role-deployment-policy'], 128);
|
|
95
|
+
}
|
|
72
96
|
function workloadRoleProvisionerAliasArn(options) {
|
|
73
97
|
requireMatch(options.accountId, accountPattern, 'Account ID');
|
|
74
98
|
requireMatch(options.manifestDigest, digestPattern, 'Manifest digest');
|
|
@@ -173,6 +197,13 @@ function exactInstanceProfileArns(boundary) {
|
|
|
173
197
|
.map(({ roleName }) => `arn:${partition}:iam::${accountId}:instance-profile/${roleName}-profile`))
|
|
174
198
|
.sort(compareStrings);
|
|
175
199
|
}
|
|
200
|
+
function exactInstanceProfileRoleArns(boundary) {
|
|
201
|
+
return boundary.documents
|
|
202
|
+
.flatMap(({ accountId, manifest, partition }) => manifest.roles
|
|
203
|
+
.filter(({ surface }) => surface === 'foundation-nat-instance')
|
|
204
|
+
.map(({ roleName }) => `arn:${partition}:iam::${accountId}:role/${roleName}`))
|
|
205
|
+
.sort(compareStrings);
|
|
206
|
+
}
|
|
176
207
|
function provisionerPolicy(options) {
|
|
177
208
|
const currentRoleArns = exactRoleArns(options.boundary);
|
|
178
209
|
const roleArns = [...currentRoleArns, ...options.transitionalRoleArns].sort(compareStrings);
|
|
@@ -180,6 +211,7 @@ function provisionerPolicy(options) {
|
|
|
180
211
|
...exactInstanceProfileArns(options.boundary),
|
|
181
212
|
...options.transitionalInstanceProfileArns,
|
|
182
213
|
].sort(compareStrings);
|
|
214
|
+
const profileRoleArns = exactInstanceProfileRoleArns(options.boundary);
|
|
183
215
|
return {
|
|
184
216
|
Statement: [
|
|
185
217
|
{
|
|
@@ -190,6 +222,18 @@ function provisionerPolicy(options) {
|
|
|
190
222
|
.sort(compareStrings),
|
|
191
223
|
Sid: 'WriteProvisionerLogs',
|
|
192
224
|
},
|
|
225
|
+
{
|
|
226
|
+
Action: ['s3:ListBucket'],
|
|
227
|
+
Condition: {
|
|
228
|
+
NumericLessThanEquals: { 's3:max-keys': '1' },
|
|
229
|
+
StringEquals: {
|
|
230
|
+
's3:prefix': [...options.readableObjectKeys].sort(compareStrings),
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
Effect: 'Allow',
|
|
234
|
+
Resource: [options.stateBucketArn],
|
|
235
|
+
Sid: 'ListExactRegisteredState',
|
|
236
|
+
},
|
|
193
237
|
{
|
|
194
238
|
Action: ['s3:GetObject'],
|
|
195
239
|
Effect: 'Allow',
|
|
@@ -234,6 +278,21 @@ function provisionerPolicy(options) {
|
|
|
234
278
|
Resource: roleArns,
|
|
235
279
|
Sid: 'ConvergeExactRegisteredRoles',
|
|
236
280
|
},
|
|
281
|
+
...(profileRoleArns.length === 0
|
|
282
|
+
? []
|
|
283
|
+
: [
|
|
284
|
+
{
|
|
285
|
+
Action: ['iam:PassRole'],
|
|
286
|
+
Condition: {
|
|
287
|
+
StringEquals: {
|
|
288
|
+
'iam:PassedToService': 'ec2.amazonaws.com',
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
Effect: 'Allow',
|
|
292
|
+
Resource: profileRoleArns,
|
|
293
|
+
Sid: 'PassExactNatInstanceProfileRoles',
|
|
294
|
+
},
|
|
295
|
+
]),
|
|
237
296
|
...(profileArns.length === 0
|
|
238
297
|
? []
|
|
239
298
|
: [
|
|
@@ -254,6 +313,68 @@ function provisionerPolicy(options) {
|
|
|
254
313
|
Version: '2012-10-17',
|
|
255
314
|
};
|
|
256
315
|
}
|
|
316
|
+
function policyCharacters(statements) {
|
|
317
|
+
return JSON.stringify({ Statement: statements, Version: '2012-10-17' })
|
|
318
|
+
.length;
|
|
319
|
+
}
|
|
320
|
+
function boundedManagedPolicyStatements(statement, label) {
|
|
321
|
+
if (policyCharacters([statement]) <= IAM_MANAGED_POLICY_MAX_CHARACTERS) {
|
|
322
|
+
return [statement];
|
|
323
|
+
}
|
|
324
|
+
const parts = [];
|
|
325
|
+
let resources = [];
|
|
326
|
+
for (const resource of statement.Resource) {
|
|
327
|
+
const candidate = {
|
|
328
|
+
...statement,
|
|
329
|
+
Resource: [...resources, resource],
|
|
330
|
+
Sid: `${statement.Sid}Part0001`,
|
|
331
|
+
};
|
|
332
|
+
if (policyCharacters([candidate]) <= IAM_MANAGED_POLICY_MAX_CHARACTERS) {
|
|
333
|
+
resources.push(resource);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (resources.length === 0) {
|
|
337
|
+
throw new WorkloadRoleAccountBaselineError('account-baseline-input-invalid', `${label} statement ${statement.Sid} cannot fit an IAM managed policy.`);
|
|
338
|
+
}
|
|
339
|
+
parts.push({ ...statement, Resource: resources });
|
|
340
|
+
resources = [resource];
|
|
341
|
+
}
|
|
342
|
+
if (resources.length > 0) {
|
|
343
|
+
parts.push({ ...statement, Resource: resources });
|
|
344
|
+
}
|
|
345
|
+
return parts.map((part, index) => {
|
|
346
|
+
const suffix = `Part${String(index + 1).padStart(4, '0')}`;
|
|
347
|
+
const result = { ...part, Sid: `${statement.Sid}${suffix}` };
|
|
348
|
+
if (policyCharacters([result]) > IAM_MANAGED_POLICY_MAX_CHARACTERS) {
|
|
349
|
+
throw new WorkloadRoleAccountBaselineError('account-baseline-input-invalid', `${label} statement ${statement.Sid} cannot fit an IAM managed policy.`);
|
|
350
|
+
}
|
|
351
|
+
return result;
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
function boundedManagedPolicyDocuments(policy, label, maximumDocuments = IAM_ROLE_MAX_ATTACHED_MANAGED_POLICIES) {
|
|
355
|
+
const statements = policy.Statement.flatMap((statement) => boundedManagedPolicyStatements(statement, label));
|
|
356
|
+
const documents = [];
|
|
357
|
+
let current = [];
|
|
358
|
+
for (const statement of statements) {
|
|
359
|
+
const candidate = [...current, statement];
|
|
360
|
+
if (policyCharacters(candidate) <= IAM_MANAGED_POLICY_MAX_CHARACTERS) {
|
|
361
|
+
current = candidate;
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
if (current.length === 0) {
|
|
365
|
+
throw new WorkloadRoleAccountBaselineError('account-baseline-input-invalid', `${label} statement cannot fit an IAM managed policy.`);
|
|
366
|
+
}
|
|
367
|
+
documents.push({ Statement: current, Version: '2012-10-17' });
|
|
368
|
+
current = [statement];
|
|
369
|
+
}
|
|
370
|
+
if (current.length > 0) {
|
|
371
|
+
documents.push({ Statement: current, Version: '2012-10-17' });
|
|
372
|
+
}
|
|
373
|
+
if (documents.length === 0 || documents.length > maximumDocuments) {
|
|
374
|
+
throw new WorkloadRoleAccountBaselineError('account-baseline-input-invalid', `${label} exceeds the bounded IAM managed-policy attachment count.`);
|
|
375
|
+
}
|
|
376
|
+
return documents;
|
|
377
|
+
}
|
|
257
378
|
function bucketPolicy(partition, bucketName) {
|
|
258
379
|
const bucketArn = `arn:${partition}:s3:::${bucketName}`;
|
|
259
380
|
const objectArn = `${bucketArn}/*`;
|
|
@@ -300,7 +421,7 @@ function projectLambdaResources(options) {
|
|
|
300
421
|
const aliasId = logicalId(options.plan.project, 'ProvisionerAlias');
|
|
301
422
|
return {
|
|
302
423
|
[logId]: {
|
|
303
|
-
DeletionPolicy: '
|
|
424
|
+
DeletionPolicy: 'RetainExceptOnCreate',
|
|
304
425
|
Properties: {
|
|
305
426
|
LogGroupName: `/aws/lambda/${options.plan.functionName}`,
|
|
306
427
|
RetentionInDays: 30,
|
|
@@ -328,7 +449,11 @@ function projectLambdaResources(options) {
|
|
|
328
449
|
FunctionName: options.plan.functionName,
|
|
329
450
|
Handler: 'index.handler',
|
|
330
451
|
MemorySize: 512,
|
|
331
|
-
|
|
452
|
+
// Accounts at Lambda's minimum concurrency quota cannot reserve even
|
|
453
|
+
// one execution because AWS requires ten executions to remain
|
|
454
|
+
// unreserved. The publisher invokes one exact candidate alias at a
|
|
455
|
+
// time and the provisioner converges one digest-bound registration,
|
|
456
|
+
// so quota-dependent reservation is neither required nor portable.
|
|
332
457
|
Role: {
|
|
333
458
|
'Fn::GetAtt': [options.provisionerRoleLogicalId, 'Arn'],
|
|
334
459
|
},
|
|
@@ -355,7 +480,10 @@ function projectLambdaResources(options) {
|
|
|
355
480
|
};
|
|
356
481
|
}
|
|
357
482
|
function cloudFormationTemplate(options) {
|
|
358
|
-
const
|
|
483
|
+
const stateBucketArn = `arn:${options.boundary.partition}:s3:::${options.stateBucketName}`;
|
|
484
|
+
const registeredObjectKeys = options.projectPlans.map(({ registeredManifestObjectKey }) => registeredManifestObjectKey);
|
|
485
|
+
const historyObjectKeys = options.projectPlans.map(({ project }) => (0, registration_js_1.workloadRoleHistoryObjectKey)(options.boundary.stage, project));
|
|
486
|
+
const registeredObjectArns = registeredObjectKeys.map((key) => `${stateBucketArn}/${key}`);
|
|
359
487
|
const stateObjectArns = options.projectPlans.flatMap(({ project }) => [
|
|
360
488
|
`arn:${options.boundary.partition}:s3:::${options.stateBucketName}/${(0, registration_js_1.provisionedWorkloadRoleRegistrationObjectKey)({
|
|
361
489
|
manifestDigest: options.boundary.manifestDigestsByProject[project],
|
|
@@ -369,11 +497,15 @@ function cloudFormationTemplate(options) {
|
|
|
369
497
|
const policy = provisionerPolicy({
|
|
370
498
|
boundary: options.boundary,
|
|
371
499
|
logGroupArns,
|
|
500
|
+
readableObjectKeys: [...registeredObjectKeys, ...historyObjectKeys].sort(compareStrings),
|
|
372
501
|
registeredObjectArns,
|
|
502
|
+
stateBucketArn,
|
|
373
503
|
stateObjectArns,
|
|
374
504
|
transitionalInstanceProfileArns: options.transitionalInstanceProfileArns,
|
|
375
505
|
transitionalRoleArns: options.transitionalRoleArns,
|
|
376
506
|
});
|
|
507
|
+
const policyDocuments = boundedManagedPolicyDocuments(policy, 'Provisioner policy');
|
|
508
|
+
const policyLogicalIds = policyDocuments.map((_, index) => `WorkloadRoleProvisionerPolicy${index + 1}`);
|
|
377
509
|
const resources = {
|
|
378
510
|
WorkloadRoleBoundary: {
|
|
379
511
|
Properties: {
|
|
@@ -384,6 +516,24 @@ function cloudFormationTemplate(options) {
|
|
|
384
516
|
},
|
|
385
517
|
Type: 'AWS::IAM::ManagedPolicy',
|
|
386
518
|
},
|
|
519
|
+
...Object.fromEntries(policyDocuments.map((document, index) => [
|
|
520
|
+
policyLogicalIds[index],
|
|
521
|
+
{
|
|
522
|
+
Properties: {
|
|
523
|
+
Description: `Exact reviewed authority shard ${index + 1} for the fixed ${options.boundary.stage} workload-role provisioner.`,
|
|
524
|
+
ManagedPolicyName: stableName([
|
|
525
|
+
'ebk',
|
|
526
|
+
options.boundary.stage,
|
|
527
|
+
'workload-role-provisioner',
|
|
528
|
+
'v2',
|
|
529
|
+
`policy-${index + 1}`,
|
|
530
|
+
], 128),
|
|
531
|
+
Path: options.boundary.path,
|
|
532
|
+
PolicyDocument: document,
|
|
533
|
+
},
|
|
534
|
+
Type: 'AWS::IAM::ManagedPolicy',
|
|
535
|
+
},
|
|
536
|
+
])),
|
|
387
537
|
WorkloadRoleProvisionerRole: {
|
|
388
538
|
Properties: {
|
|
389
539
|
AssumeRolePolicyDocument: {
|
|
@@ -396,12 +546,9 @@ function cloudFormationTemplate(options) {
|
|
|
396
546
|
],
|
|
397
547
|
Version: '2012-10-17',
|
|
398
548
|
},
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
PolicyName: 'ebk-fixed-workload-role-provisioner-v1',
|
|
403
|
-
},
|
|
404
|
-
],
|
|
549
|
+
ManagedPolicyArns: policyLogicalIds.map((logicalId) => ({
|
|
550
|
+
Ref: logicalId,
|
|
551
|
+
})),
|
|
405
552
|
RoleName: options.provisionerRoleName,
|
|
406
553
|
Tags: [
|
|
407
554
|
{ Key: 'ebk:managed-by', Value: 'account-baseline' },
|
|
@@ -584,7 +731,10 @@ function requireSuccessResult(plan, value) {
|
|
|
584
731
|
Array.isArray(value) ||
|
|
585
732
|
!('ok' in value) ||
|
|
586
733
|
value.ok !== true) {
|
|
587
|
-
|
|
734
|
+
const internalClassification = boundedInternalFailureClassification(value);
|
|
735
|
+
throw new WorkloadRoleAccountBaselineError('account-baseline-result-invalid', internalClassification
|
|
736
|
+
? `Fixed provisioner for ${plan.project} returned ${internalClassification} without sanitized success.`
|
|
737
|
+
: `Fixed provisioner for ${plan.project} did not return sanitized success.`);
|
|
588
738
|
}
|
|
589
739
|
const result = value;
|
|
590
740
|
const allowed = [
|
|
@@ -630,6 +780,50 @@ function requireSuccessResult(plan, value) {
|
|
|
630
780
|
provisionedRegistration,
|
|
631
781
|
};
|
|
632
782
|
}
|
|
783
|
+
function boundedInternalFailureClassification(value) {
|
|
784
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
785
|
+
return undefined;
|
|
786
|
+
}
|
|
787
|
+
const result = value;
|
|
788
|
+
if (Object.keys(result).sort().join(',') ===
|
|
789
|
+
'classification,ok,protocolVersion,resultSchemaVersion' &&
|
|
790
|
+
typeof result.classification === 'string' &&
|
|
791
|
+
boundedInternalProvisionerFailures.has(result.classification) &&
|
|
792
|
+
result.ok === false &&
|
|
793
|
+
result.protocolVersion ===
|
|
794
|
+
provisioner_js_1.FIXED_WORKLOAD_ROLE_PROVISIONER_PROTOCOL_VERSION &&
|
|
795
|
+
result.resultSchemaVersion ===
|
|
796
|
+
handler_js_1.FIXED_WORKLOAD_ROLE_PROVISIONER_RESULT_SCHEMA_VERSION) {
|
|
797
|
+
return result.classification;
|
|
798
|
+
}
|
|
799
|
+
return undefined;
|
|
800
|
+
}
|
|
801
|
+
function isRetryableProvisionerFailure(value) {
|
|
802
|
+
const classification = boundedInternalFailureClassification(value);
|
|
803
|
+
return (classification !== undefined &&
|
|
804
|
+
retryableProvisionerFailures.has(classification));
|
|
805
|
+
}
|
|
806
|
+
async function invokeQualifiedProvisionerWithRetry(options) {
|
|
807
|
+
for (let attempt = 1; attempt <= exports.WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS; attempt += 1) {
|
|
808
|
+
const result = await options.controlPlane.invokeQualifiedProvisioner(options.plan.provisionerAliasArn, options.plan.provisionerRequest);
|
|
809
|
+
if (!isRetryableProvisionerFailure(result) ||
|
|
810
|
+
attempt === exports.WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS) {
|
|
811
|
+
return result;
|
|
812
|
+
}
|
|
813
|
+
const delayMs = workloadRoleProvisionerRetryDelaysMs[attempt - 1];
|
|
814
|
+
const wait = options.waitBeforeProvisionerRetry ??
|
|
815
|
+
(({ delayMs: boundedDelayMs }) => new Promise((resolve) => {
|
|
816
|
+
setTimeout(resolve, boundedDelayMs);
|
|
817
|
+
}));
|
|
818
|
+
await wait({
|
|
819
|
+
attempt,
|
|
820
|
+
delayMs,
|
|
821
|
+
maxAttempts: exports.WORKLOAD_ROLE_PROVISIONER_MAX_ATTEMPTS,
|
|
822
|
+
project: options.plan.project,
|
|
823
|
+
});
|
|
824
|
+
}
|
|
825
|
+
throw new Error('Unreachable bounded provisioner retry state.');
|
|
826
|
+
}
|
|
633
827
|
function deploymentStatementSid(project, sid) {
|
|
634
828
|
const projectDigest = (0, node_crypto_1.createHash)('sha256')
|
|
635
829
|
.update(project, 'utf8')
|
|
@@ -637,6 +831,32 @@ function deploymentStatementSid(project, sid) {
|
|
|
637
831
|
.slice(0, 12);
|
|
638
832
|
return `Project${projectDigest}${sid}`;
|
|
639
833
|
}
|
|
834
|
+
function deploymentPolicyCloudFormationTemplate(options) {
|
|
835
|
+
const documents = boundedManagedPolicyDocuments(options.deploymentPolicy, 'Deployment policy', IAM_DEPLOYMENT_ROLE_MAX_FRAMEWORK_MANAGED_POLICIES);
|
|
836
|
+
return {
|
|
837
|
+
AWSTemplateFormatVersion: '2010-09-09',
|
|
838
|
+
Description: 'Protected Empire Builder Kit v1 exact stage workload-role deployment authority. Apply only after complete provisioner convergence.',
|
|
839
|
+
Resources: Object.fromEntries(documents.map((document, index) => [
|
|
840
|
+
`WorkloadRoleDeploymentPolicy${index + 1}`,
|
|
841
|
+
{
|
|
842
|
+
Properties: {
|
|
843
|
+
Description: `Exact reviewed authority shard ${index + 1} for the ${options.boundary.stage} deployment role.`,
|
|
844
|
+
ManagedPolicyName: stableName([
|
|
845
|
+
'ebk',
|
|
846
|
+
options.boundary.stage,
|
|
847
|
+
'workload-role-deployment',
|
|
848
|
+
'v2',
|
|
849
|
+
`policy-${index + 1}`,
|
|
850
|
+
], 128),
|
|
851
|
+
Path: options.boundary.path,
|
|
852
|
+
PolicyDocument: document,
|
|
853
|
+
Roles: [options.deploymentRoleName],
|
|
854
|
+
},
|
|
855
|
+
Type: 'AWS::IAM::ManagedPolicy',
|
|
856
|
+
},
|
|
857
|
+
])),
|
|
858
|
+
};
|
|
859
|
+
}
|
|
640
860
|
function createWorkloadRoleStageDeploymentPromotion(options) {
|
|
641
861
|
const resultProjects = Object.keys(options.provisionerResults).sort(compareStrings);
|
|
642
862
|
const expectedProjects = options.plan.projectPlans
|
|
@@ -682,12 +902,19 @@ function createWorkloadRoleStageDeploymentPromotion(options) {
|
|
|
682
902
|
});
|
|
683
903
|
}
|
|
684
904
|
deploymentStatements.sort((left, right) => compareStrings(left.Sid, right.Sid));
|
|
905
|
+
const deploymentPolicy = {
|
|
906
|
+
Statement: deploymentStatements,
|
|
907
|
+
Version: '2012-10-17',
|
|
908
|
+
};
|
|
685
909
|
return {
|
|
686
|
-
deploymentPolicy
|
|
687
|
-
Statement: deploymentStatements,
|
|
688
|
-
Version: '2012-10-17',
|
|
689
|
-
},
|
|
910
|
+
deploymentPolicy,
|
|
690
911
|
deploymentPolicyName: exports.WORKLOAD_ROLE_DEPLOYMENT_POLICY_NAME,
|
|
912
|
+
deploymentPolicyStackName: deploymentPolicyStackName(options.plan.stage),
|
|
913
|
+
deploymentPolicyTemplate: deploymentPolicyCloudFormationTemplate({
|
|
914
|
+
boundary: options.plan.boundary,
|
|
915
|
+
deploymentPolicy,
|
|
916
|
+
deploymentRoleName: options.plan.deploymentRoleName,
|
|
917
|
+
}),
|
|
691
918
|
projectPromotions,
|
|
692
919
|
sanitizedResult: {
|
|
693
920
|
candidateIdentity: options.plan.candidateIdentity,
|
|
@@ -716,7 +943,15 @@ async function publishReviewedStageWorkloadRoleCandidate(options) {
|
|
|
716
943
|
const provisionerResults = {};
|
|
717
944
|
for (const project of options.plan.projectPlans) {
|
|
718
945
|
provisionerResults[project.project] =
|
|
719
|
-
await
|
|
946
|
+
await invokeQualifiedProvisionerWithRetry({
|
|
947
|
+
controlPlane: options.controlPlane,
|
|
948
|
+
plan: project,
|
|
949
|
+
...(options.waitBeforeProvisionerRetry
|
|
950
|
+
? {
|
|
951
|
+
waitBeforeProvisionerRetry: options.waitBeforeProvisionerRetry,
|
|
952
|
+
}
|
|
953
|
+
: {}),
|
|
954
|
+
});
|
|
720
955
|
}
|
|
721
956
|
const promotion = createWorkloadRoleStageDeploymentPromotion({
|
|
722
957
|
plan: options.plan,
|
|
@@ -727,6 +962,8 @@ async function publishReviewedStageWorkloadRoleCandidate(options) {
|
|
|
727
962
|
policy: promotion.deploymentPolicy,
|
|
728
963
|
policyName: promotion.deploymentPolicyName,
|
|
729
964
|
roleName: options.plan.deploymentRoleName,
|
|
965
|
+
stackName: promotion.deploymentPolicyStackName,
|
|
966
|
+
template: promotion.deploymentPolicyTemplate,
|
|
730
967
|
});
|
|
731
968
|
for (const project of options.plan.projectPlans) {
|
|
732
969
|
const promoted = promotion.projectPromotions[project.project];
|
|
@@ -32,7 +32,9 @@ export interface DeploymentRoleAuthorityValidation {
|
|
|
32
32
|
* Stable ordinary deployment-role authority. It can read exact protected
|
|
33
33
|
* registration objects, invoke and observe only the fixed qualified
|
|
34
34
|
* provisioner, and pass exact registered roles to their declared AWS services.
|
|
35
|
-
* It
|
|
35
|
+
* It exposes only exact read authority needed by Pulumi to import the already
|
|
36
|
+
* provisioned roles and NAT instance profiles. It exposes no direct IAM
|
|
37
|
+
* mutation surface.
|
|
36
38
|
*/
|
|
37
39
|
export declare function createDeploymentRoleAuthorityPlan(registry: ExactProvisionedWorkloadRoleRegistry, registrationReadScope?: DeploymentRoleRegistrationReadScope): DeploymentRoleAuthorityPlan;
|
|
38
40
|
export declare function validateDeploymentRoleAuthorityPlan(registry: ExactProvisionedWorkloadRoleRegistry, value: unknown, registrationReadScope?: DeploymentRoleRegistrationReadScope): DeploymentRoleAuthorityValidation;
|