@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39
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 +5 -0
- package/generators.json +10 -0
- package/package.json +20 -3
- package/src/aws-authority/index.d.ts +1 -0
- package/src/aws-authority/index.js +1 -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 +11 -3
- package/src/aws-authority/stage-authority.js +615 -29
- 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 +7 -1
- package/src/cli/main.js +128 -20
- package/src/cli/output.d.ts +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +16 -2
- 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 +4 -2
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +179 -23
- 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 +20 -8
- package/src/developer-agent/workspace-inspection.js +37 -3
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +51 -4
- 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-remove-preflight/foundation-remove-preflight.js +28 -1
- package/src/executors/local-deploy/local-deploy.d.ts +8 -1
- package/src/executors/local-deploy/local-deploy.js +97 -24
- package/src/executors/local-deploy/schema.json +8 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
- package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- 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 +1 -0
- package/src/foundation/index.js +1 -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/preflight.js +37 -18
- package/src/foundation/private-smoke-access.js +10 -2
- package/src/foundation/private-smoke-admission.d.ts +3 -1
- package/src/foundation/private-smoke-admission.js +29 -8
- package/src/foundation/private-smoke-control-plane.js +17 -6
- 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 +13 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf.d.ts +1 -0
- package/src/foundation/router-waf.js +14 -1
- 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.js +24 -1
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +301 -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.js +40 -13
- package/src/generators/preset/workspace-files-performance-load.js +8 -0
- package/src/generators/preset/workspace-files-stage-authority.js +40 -1
- package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
- package/src/generators/preset/workspace-files-thin-docs.js +64 -18
- package/src/generators/preset/workspace-files.d.ts +4 -0
- package/src/generators/preset/workspace-files.js +159 -91
- package/src/generators/repository-policy/repository-policy.js +37 -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 +47 -389
- package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -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 +1 -1
- package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +61 -1164
- 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 +18 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
- package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
- 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 +120 -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 +140 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +89 -50
- package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
- package/src/generators/slice/built-in-plan-project-files.js +116 -67
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +64 -15
- package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
- 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 +257 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +184 -132
- 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 +1 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
- package/src/generators/slice/built-in-plan-verification-files.js +70 -0
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +206 -14
- 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 +113 -274
- package/src/generators/slice/built-in-plan.d.ts +9 -1
- package/src/generators/slice/built-in-plan.js +49 -21
- 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 +29 -24
- 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 +2 -0
- package/src/generators/upgrade/upgrade.js +136 -9
- package/src/generators/workload/workload.js +51 -2
- 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 +6 -0
- package/src/local-dev/private-state.js +126 -34
- 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 +3 -1
- 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/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/repository-policy/deployment-plan.d.ts +2 -2
- package/src/repository-policy/deployment-plan.js +2 -1
- package/src/repository-policy/policy.js +38 -3
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/operator.d.ts +3 -1
- package/src/secrets/operator.js +22 -3
- package/src/sst-environment-source-format.d.ts +3 -0
- package/src/sst-environment-source-format.js +20 -0
- package/src/supply-chain/blueprint-trust-git.js +13 -3
- package/src/supply-chain/build-output.js +15 -0
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- 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/standard-slice.js +2 -3
- 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/aws/child-environment.js.map +0 -1
- package/src/aws/identity.js.map +0 -1
- package/src/aws-authority/index.js.map +0 -1
- package/src/aws-authority/stage-authority.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-profile-preflight/production-database-safeguard.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/local-deploy/federated-credential-transport.js.map +0 -1
- package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
- package/src/executors/local-deploy/local-approval.js.map +0 -1
- package/src/executors/local-deploy/local-deploy.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/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
- package/src/executors/sst-lifecycle/governed-native-operation.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/sst-lifecycle/sst-environment-source.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/partial-state.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/private-smoke-access.js.map +0 -1
- package/src/foundation/private-smoke-admission.js.map +0 -1
- package/src/foundation/private-smoke-control-plane.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/router-waf-rate-rehearsal.js.map +0 -1
- package/src/foundation/router-waf.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/formatting.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/dependency-overrides.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-ci-acceptance.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-ecr-inspector.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-stage-authority.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-release.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/repository-policy/tree-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-background-work-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-native-runtime-authority-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-thin-release-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/local-capability.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 -167
- 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/capacity-migration.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/generated-aws-control-plane.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/sst-environment-source-format.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-bounds.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/workspace-deployment/affected-lifecycle.js.map +0 -1
- package/src/workspace-deployment/identity.js.map +0 -1
- package/src/workspace-deployment/index.js.map +0 -1
- package/src/workspace-deployment/migration-evidence.js.map +0 -1
- package/src/workspace-deployment/migration.js.map +0 -1
- package/src/workspace-deployment/ownership.js.map +0 -1
|
@@ -2,163 +2,49 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.renderProductInfrastructureFiles = renderProductInfrastructureFiles;
|
|
4
4
|
const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
|
|
5
|
+
const built_in_plan_key_value_retention_infrastructure_js_1 = require("./built-in-plan-key-value-retention-infrastructure.js");
|
|
5
6
|
/** @internal */
|
|
6
|
-
function renderProductInfrastructureFiles(name, pascalName, workspace, protectedRuntimeStages = ['staging', 'production']) {
|
|
7
|
+
function renderProductInfrastructureFiles(name, pascalName, workspace, protectedRuntimeStages = ['staging', 'production'], sql = false, network = sql) {
|
|
7
8
|
const identifierPrefix = (0, built_in_plan_shared_js_1.lowerCamelIdentifier)(pascalName);
|
|
8
9
|
const recordExportWorkflowName = (0, built_in_plan_shared_js_1.stableGeneratedName)(40, name);
|
|
9
|
-
|
|
10
|
-
'
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const ECS_CLUSTER_ARN =
|
|
19
|
-
new RegExp(
|
|
20
|
-
'^arn:(?:aws|aws-cn|aws-us-gov):ecs:[a-z0-9-]+:' +
|
|
21
|
-
'[0-9]{12}:cluster/[A-Za-z0-9_./-]{1,255}$',
|
|
22
|
-
);
|
|
23
|
-
const ECS_TASK_DEFINITION_ARN =
|
|
24
|
-
/^arn:(?:aws|aws-cn|aws-us-gov):ecs:[a-z0-9-]+:[0-9]{12}:task-definition\\/[A-Za-z0-9_-]{1,255}:[1-9][0-9]*$/;
|
|
25
|
-
const NETWORK_ID = /^(?:sg|subnet)-[0-9a-f]{8,32}$/;
|
|
26
|
-
const CONTAINER_NAME = /^[A-Za-z0-9_-]{1,255}$/;
|
|
27
|
-
|
|
28
|
-
function required(name: string): string {
|
|
29
|
-
const value = process.env[name]?.trim();
|
|
30
|
-
if (!value) throw new Error(name + ' is required.');
|
|
31
|
-
return value;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function requiredArn(name: string, pattern: RegExp): string {
|
|
35
|
-
const value = required(name);
|
|
36
|
-
if (!pattern.test(value)) {
|
|
37
|
-
throw new Error(name + ' is not the exact expected ECS ARN.');
|
|
38
|
-
}
|
|
39
|
-
return value;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function requiredBoolean(name: string): boolean {
|
|
43
|
-
const value = required(name);
|
|
44
|
-
if (value !== 'true' && value !== 'false') {
|
|
45
|
-
throw new Error(name + ' must be exactly true or false.');
|
|
46
|
-
}
|
|
47
|
-
return value === 'true';
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function requiredNetworkIds(name: string): string[] {
|
|
51
|
-
let value: unknown;
|
|
52
|
-
try {
|
|
53
|
-
value = JSON.parse(required(name));
|
|
54
|
-
} catch {
|
|
55
|
-
throw new Error(name + ' must be one bounded JSON array.');
|
|
56
|
-
}
|
|
10
|
+
const files = {
|
|
11
|
+
'infra/event-subscriptions.ts': `/** Read the existing seeded event contract; never broaden source or stage routing. */
|
|
12
|
+
export function sameSliceEventDetailTypes(value: unknown): string[] {
|
|
13
|
+
const contract = value as {
|
|
14
|
+
kind?: unknown;
|
|
15
|
+
schemaVersion?: unknown;
|
|
16
|
+
slice?: unknown;
|
|
17
|
+
events?: unknown;
|
|
18
|
+
} | null;
|
|
57
19
|
if (
|
|
58
|
-
!
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const id =
|
|
72
|
-
event && typeof event === 'object' && 'id' in event
|
|
73
|
-
? (event as { id?: unknown }).id
|
|
74
|
-
: undefined;
|
|
75
|
-
if (typeof id !== 'string' || !UUID.test(id)) {
|
|
76
|
-
throw new Error('Scheduled maintenance requires one exact event ID.');
|
|
77
|
-
}
|
|
78
|
-
return id.toLowerCase();
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export async function handler(event: unknown) {
|
|
82
|
-
const stage = required('EBK_STAGE');
|
|
83
|
-
const logger = createLogger({
|
|
84
|
-
component: 'job-data-retention-maintenance-launcher',
|
|
85
|
-
feature: 'data-lifecycle',
|
|
86
|
-
operation: 'retention-maintenance-launch',
|
|
87
|
-
slice: '${name}',
|
|
88
|
-
stage,
|
|
89
|
-
workspace: required('EBK_WORKSPACE'),
|
|
90
|
-
});
|
|
91
|
-
const correlationId = requiredScheduledEventId(event);
|
|
92
|
-
try {
|
|
93
|
-
const containerName = required('EBK_MAINTENANCE_CONTAINER_NAME');
|
|
94
|
-
if (!CONTAINER_NAME.test(containerName)) {
|
|
95
|
-
throw new Error('Maintenance container name is invalid.');
|
|
96
|
-
}
|
|
97
|
-
const response = await new ECSClient({}).send(
|
|
98
|
-
new RunTaskCommand({
|
|
99
|
-
cluster: requiredArn('EBK_MAINTENANCE_CLUSTER_ARN', ECS_CLUSTER_ARN),
|
|
100
|
-
count: 1,
|
|
101
|
-
enableExecuteCommand: false,
|
|
102
|
-
launchType: 'FARGATE',
|
|
103
|
-
networkConfiguration: {
|
|
104
|
-
awsvpcConfiguration: {
|
|
105
|
-
assignPublicIp:
|
|
106
|
-
requiredBoolean('EBK_MAINTENANCE_ASSIGN_PUBLIC_IP')
|
|
107
|
-
? 'ENABLED'
|
|
108
|
-
: 'DISABLED',
|
|
109
|
-
securityGroups: requiredNetworkIds(
|
|
110
|
-
'EBK_MAINTENANCE_SECURITY_GROUP_IDS',
|
|
111
|
-
),
|
|
112
|
-
subnets: requiredNetworkIds('EBK_MAINTENANCE_SUBNET_IDS'),
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
overrides: {
|
|
116
|
-
containerOverrides: [
|
|
117
|
-
{
|
|
118
|
-
command: [
|
|
119
|
-
'node',
|
|
120
|
-
'dist/jobs/data-retention/src/maintenance.js',
|
|
121
|
-
],
|
|
122
|
-
environment: [
|
|
123
|
-
{
|
|
124
|
-
name: 'EBK_MAINTENANCE_CORRELATION_ID',
|
|
125
|
-
value: correlationId,
|
|
126
|
-
},
|
|
127
|
-
],
|
|
128
|
-
name: containerName,
|
|
129
|
-
},
|
|
130
|
-
],
|
|
131
|
-
},
|
|
132
|
-
taskDefinition: requiredArn(
|
|
133
|
-
'EBK_MAINTENANCE_TASK_DEFINITION_ARN',
|
|
134
|
-
ECS_TASK_DEFINITION_ARN,
|
|
135
|
-
),
|
|
136
|
-
}),
|
|
137
|
-
);
|
|
20
|
+
!contract || contract.kind !== 'ebk-event-contract-schema' ||
|
|
21
|
+
contract.schemaVersion !== 1 || contract.slice !== '${name}' ||
|
|
22
|
+
!Array.isArray(contract.events) || contract.events.length < 2 ||
|
|
23
|
+
contract.events.length > 32
|
|
24
|
+
) throw new Error('Event subscriptions require the bounded seeded ${name} EventContractSchema.');
|
|
25
|
+
const types = new Set<string>();
|
|
26
|
+
for (const raw of contract.events) {
|
|
27
|
+
const event = raw as {
|
|
28
|
+
detailType?: unknown;
|
|
29
|
+
source?: unknown;
|
|
30
|
+
schemaVersion?: unknown;
|
|
31
|
+
data?: unknown;
|
|
32
|
+
} | null;
|
|
138
33
|
if (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
outcome: 'success',
|
|
148
|
-
});
|
|
149
|
-
return { accepted: true };
|
|
150
|
-
} catch (error) {
|
|
151
|
-
logger.error('Retention maintenance task launch failed', {
|
|
152
|
-
attributes: {
|
|
153
|
-
errorCode:
|
|
154
|
-
error instanceof Error
|
|
155
|
-
? error.name.replace(/[^A-Za-z0-9_.-]/g, '').slice(0, 80)
|
|
156
|
-
: 'RetentionMaintenanceLaunchError',
|
|
157
|
-
},
|
|
158
|
-
outcome: 'failure',
|
|
159
|
-
});
|
|
160
|
-
throw error;
|
|
34
|
+
!event || typeof event.detailType !== 'string' ||
|
|
35
|
+
!/^[A-Za-z][A-Za-z0-9._-]{0,127}$/.test(event.detailType) ||
|
|
36
|
+
event.source !== '${name}' || typeof event.schemaVersion !== 'number' ||
|
|
37
|
+
!Number.isSafeInteger(event.schemaVersion) || event.schemaVersion < 1 ||
|
|
38
|
+
!event.data || typeof event.data !== 'object' || Array.isArray(event.data) ||
|
|
39
|
+
types.has(event.detailType)
|
|
40
|
+
) throw new Error('Event subscriptions require unique literal types, exact Slice sources and valid schemas.');
|
|
41
|
+
types.add(event.detailType);
|
|
161
42
|
}
|
|
43
|
+
if (!types.has('${pascalName}Created') || !types.has('DataLifecycleChanged'))
|
|
44
|
+
throw new Error('The generated event contract must retain its built-in event declarations.');
|
|
45
|
+
// Lifecycle consumers have their own exact source declaration and rule.
|
|
46
|
+
types.delete('DataLifecycleChanged');
|
|
47
|
+
return [...types].sort();
|
|
162
48
|
}
|
|
163
49
|
`,
|
|
164
50
|
'infra/route-function-materialization.ts': `type RouteFunctionArgs = {
|
|
@@ -181,7 +67,7 @@ type RouteRegistrar<Result> = (
|
|
|
181
67
|
|
|
182
68
|
export function createVpcRouteFunctionMaterializer(input: {
|
|
183
69
|
directHandlers: readonly string[];
|
|
184
|
-
foundationVpc
|
|
70
|
+
foundationVpc?: unknown;
|
|
185
71
|
output: OutputFactory;
|
|
186
72
|
}) {
|
|
187
73
|
const directHandlerLimit = 2;
|
|
@@ -308,7 +194,7 @@ export function createVpcRouteFunctionMaterializer(input: {
|
|
|
308
194
|
routeFunctions.set(handlerPath, {
|
|
309
195
|
...handler,
|
|
310
196
|
handler: handlerPath,
|
|
311
|
-
vpc: input.foundationVpc,
|
|
197
|
+
...(input.foundationVpc === undefined ? {} : { vpc: input.foundationVpc }),
|
|
312
198
|
});
|
|
313
199
|
try {
|
|
314
200
|
return register(rawRoute, handlerPath, args);
|
|
@@ -502,7 +388,7 @@ export function validateSuccessfulDeploymentReceipt(
|
|
|
502
388
|
'infra/product.ts': `import {
|
|
503
389
|
createManagedLogGroupContract,
|
|
504
390
|
createRouterOriginProofInjection,
|
|
505
|
-
provisionDatabaseBindings
|
|
391
|
+
${sql ? ' provisionDatabaseBindings,\n' : ''}\
|
|
506
392
|
} from '@empire-builder-kit/nx/foundation';
|
|
507
393
|
import * as random from '@pulumi/random';
|
|
508
394
|
import { createHash } from 'node:crypto';
|
|
@@ -534,7 +420,12 @@ import {
|
|
|
534
420
|
${identifierPrefix}UseRecordDelegation,
|
|
535
421
|
} from '../api/contracts/protected.js';
|
|
536
422
|
import lifecycleConsumers from '../data/lifecycle-consumers.json';
|
|
537
|
-
import
|
|
423
|
+
import { EventContractSchema } from '../contracts/events.js';
|
|
424
|
+
import { sameSliceEventDetailTypes } from './event-subscriptions.js';
|
|
425
|
+
${sql ? "import databaseBindings from '../database/bindings.json';\n" : ''}\
|
|
426
|
+
${sql ? "import { createSqlOutboxInfrastructure } from './sql-outbox.js';\n" : ''}\
|
|
427
|
+
${"import { createKeyValueInfrastructure } from './key-value.js';\n"}\
|
|
428
|
+
${"import { createKeyValueRetentionInfrastructure } from './key-value-retention.js';\n"}\
|
|
538
429
|
import localConfiguration from '../configuration/local-values.json';
|
|
539
430
|
import backgroundWorkPolicy from '../operations/background-work.json';
|
|
540
431
|
import { backgroundWorkSchedules } from './background-work.js';
|
|
@@ -542,7 +433,7 @@ import { ConfigurationDeclarations } from '../configuration/declarations.js';
|
|
|
542
433
|
import { assertAsyncAdapterDeploymentReady } from '../async/recovery-adapters.js';
|
|
543
434
|
import {
|
|
544
435
|
getFoundationInfrastructure,
|
|
545
|
-
registerProductMigration
|
|
436
|
+
${sql ? ' registerProductMigration,\n' : ''}\
|
|
546
437
|
registerProductRetention,
|
|
547
438
|
} from './foundation.js';
|
|
548
439
|
import { createVpcRouteFunctionMaterializer } from './route-function-materialization.js';
|
|
@@ -550,9 +441,12 @@ import { removeFinderMetadataFromBuiltFunction } from './next-build-authority.js
|
|
|
550
441
|
import {
|
|
551
442
|
createStandardSliceNativeRuntimeAuthority,
|
|
552
443
|
} from './native-runtime-authority/index.js';
|
|
553
|
-
|
|
444
|
+
${sql
|
|
445
|
+
? `import {
|
|
554
446
|
standardSliceDatabaseTaskFamily,
|
|
555
447
|
} from './native-runtime-authority/effective-intent.js';
|
|
448
|
+
`
|
|
449
|
+
: ''}\
|
|
556
450
|
import { createStandardSliceSecretLinks } from './personal-secrets.js';
|
|
557
451
|
import { create${pascalName}PerformanceCostControls } from './performance-cost-controls.js';
|
|
558
452
|
import {
|
|
@@ -562,7 +456,7 @@ import {
|
|
|
562
456
|
} from './authorization.js';
|
|
563
457
|
import { createStandardDataExportStore } from './data-export.js';
|
|
564
458
|
import { create${pascalName}Reliability } from './reliability.js';
|
|
565
|
-
import { resolveStandardContainerImage } from './container-images.js'
|
|
459
|
+
${sql ? "import { resolveStandardContainerImage } from './container-images.js';\n" : ''}\
|
|
566
460
|
import {
|
|
567
461
|
defineEventConsumerAlarms,
|
|
568
462
|
} from '@empire-builder-kit/runtime/observability';
|
|
@@ -800,11 +694,14 @@ export function product() {
|
|
|
800
694
|
process.env.EBK_SOURCE_COMMIT ?? (protectedStage ? '' : 'unresolved');
|
|
801
695
|
const releaseSourceCommit =
|
|
802
696
|
process.env.EBK_RELEASE_SOURCE_COMMIT ?? sourceCommit;
|
|
803
|
-
|
|
697
|
+
${sql
|
|
698
|
+
? ` const exactDevelopmentRetirement =
|
|
804
699
|
$app.stage === 'development' &&
|
|
805
700
|
Object.values(databaseBindings).some((binding) =>
|
|
806
701
|
binding.provisioned.includes('retirement_rehearsal'),
|
|
807
702
|
);
|
|
703
|
+
`
|
|
704
|
+
: ''}\
|
|
808
705
|
if (
|
|
809
706
|
protectedStage &&
|
|
810
707
|
(!/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(sourceCommit) ||
|
|
@@ -836,16 +733,9 @@ export function product() {
|
|
|
836
733
|
args.triggers = { version: releaseSourceCommit };
|
|
837
734
|
},
|
|
838
735
|
);
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
context: '../..',
|
|
843
|
-
dockerfile: 'packages/${name}/jobs/data-retention/Dockerfile',
|
|
844
|
-
},
|
|
845
|
-
sourceCommit: releaseSourceCommit,
|
|
846
|
-
stage: $app.stage,
|
|
847
|
-
});
|
|
848
|
-
const databaseMigrationContainer = resolveStandardContainerImage({
|
|
736
|
+
${''}\
|
|
737
|
+
${sql
|
|
738
|
+
? ` const databaseMigrationContainer = resolveStandardContainerImage({
|
|
849
739
|
artifactId: '${name}.job.database-migration',
|
|
850
740
|
local: {
|
|
851
741
|
context: '../..',
|
|
@@ -864,6 +754,8 @@ export function product() {
|
|
|
864
754
|
sourceCommit: releaseSourceCommit,
|
|
865
755
|
stage: $app.stage,
|
|
866
756
|
});
|
|
757
|
+
`
|
|
758
|
+
: ''}\
|
|
867
759
|
const performanceDeploymentAuthority = protectedStage
|
|
868
760
|
? protectedPerformanceDeploymentAuthority({
|
|
869
761
|
enabled: process.env.EBK_PERFORMANCE_LOAD_ENABLED ?? 'false',
|
|
@@ -872,12 +764,24 @@ export function product() {
|
|
|
872
764
|
})
|
|
873
765
|
: undefined;
|
|
874
766
|
const foundation = getFoundationInfrastructure();
|
|
767
|
+
${` const keyValue = createKeyValueInfrastructure({
|
|
768
|
+
eventBusArn: foundation.discovery.eventBusArn,
|
|
769
|
+
eventBusName: foundation.discovery.eventBusName,
|
|
770
|
+
alertTopicArn: foundation.discovery.alertTopicArn,
|
|
771
|
+
outbox: backgroundSchedules.outbox,
|
|
772
|
+
managedLogGroup,
|
|
773
|
+
lambdaLogging,
|
|
774
|
+
});
|
|
775
|
+
`}\
|
|
875
776
|
const nativeAuthority = createStandardSliceNativeRuntimeAuthority({
|
|
876
|
-
|
|
777
|
+
${sql
|
|
778
|
+
? ` clusterId: foundation.discovery.clusterId,
|
|
877
779
|
clusterResourceId: foundation.database.clusterResourceId,
|
|
780
|
+
masterSecretArn: foundation.database.masterSecretArn,
|
|
781
|
+
`
|
|
782
|
+
: ''}\
|
|
878
783
|
eventBusArn: foundation.discovery.eventBusArn,
|
|
879
784
|
identityUserPoolArn: foundation.discovery.identityUserPoolArn,
|
|
880
|
-
masterSecretArn: foundation.database.masterSecretArn,
|
|
881
785
|
});
|
|
882
786
|
const runtimeResourceNames = nativeAuthority.resourceNames;
|
|
883
787
|
$transform(aws.dynamodb.Table, (args: any, _opts: any, logicalName: string) => {
|
|
@@ -897,12 +801,15 @@ export function product() {
|
|
|
897
801
|
alertTopicArn: foundation.discovery.alertTopicArn,
|
|
898
802
|
workspace: '${workspace}',
|
|
899
803
|
});
|
|
900
|
-
|
|
804
|
+
${sql
|
|
805
|
+
? ` const databaseProvisions = provisionDatabaseBindings(foundation, {
|
|
901
806
|
bindings: databaseBindings,
|
|
902
807
|
slice: '${name}',
|
|
903
808
|
});
|
|
904
809
|
const databaseProvision = databaseProvisions.bindings.primary;
|
|
905
810
|
const { db: database } = databaseProvision;
|
|
811
|
+
`
|
|
812
|
+
: ''}\
|
|
906
813
|
const authClient = foundation.userPool.addClient('${pascalName}WebAuthClient', {
|
|
907
814
|
transform: {
|
|
908
815
|
client: {
|
|
@@ -922,6 +829,7 @@ export function product() {
|
|
|
922
829
|
const machineClientProvisioner = new sst.aws.Function(
|
|
923
830
|
'${pascalName}MachineClientProvisioner',
|
|
924
831
|
{
|
|
832
|
+
dev: false,
|
|
925
833
|
permissions: standardSliceMachineClientProvisionerPermissions({
|
|
926
834
|
userPoolArn: foundation.discovery.identityUserPoolArn,
|
|
927
835
|
}),
|
|
@@ -1069,11 +977,11 @@ export function product() {
|
|
|
1069
977
|
'api/health.handler',
|
|
1070
978
|
'async/webhook-ingress.handler',
|
|
1071
979
|
],
|
|
1072
|
-
|
|
980
|
+
${''}\
|
|
1073
981
|
output: $output,
|
|
1074
982
|
});
|
|
1075
983
|
const api = new sst.aws.ApiGatewayV2('${pascalName}Api', {
|
|
1076
|
-
...(performanceDeploymentAuthority ? { vpc: foundation.vpc } : {})
|
|
984
|
+
${network ? ' ...(performanceDeploymentAuthority ? { vpc: foundation.vpc } : {}),\n' : ''}\
|
|
1077
985
|
transform: {
|
|
1078
986
|
route: {
|
|
1079
987
|
handler: vpcRouteFunctionMaterializer.transform,
|
|
@@ -1145,6 +1053,7 @@ export function product() {
|
|
|
1145
1053
|
{
|
|
1146
1054
|
permissions: nativeAuthority.permissions('api-machine-authorization-proof'),
|
|
1147
1055
|
environment: {
|
|
1056
|
+
${' ...keyValue.environment,\n'}\
|
|
1148
1057
|
AUTH_CLIENT_ID: authClient.id,
|
|
1149
1058
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1150
1059
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1154,7 +1063,7 @@ export function product() {
|
|
|
1154
1063
|
},
|
|
1155
1064
|
handler: 'api/machine-authorization.handler',
|
|
1156
1065
|
link: [
|
|
1157
|
-
|
|
1066
|
+
${'keyValue.link'},
|
|
1158
1067
|
...secretLinksFor('api-machine-authorization-proof'),
|
|
1159
1068
|
],
|
|
1160
1069
|
...lambdaLogging(machineAuthorizationProofTargetLogs.logGroup.name),
|
|
@@ -1177,6 +1086,7 @@ export function product() {
|
|
|
1177
1086
|
routeInVpc(route.operation.method + ' ' + route.operation.path, {
|
|
1178
1087
|
permissions: nativeAuthority.permissions('api-delegations'),
|
|
1179
1088
|
environment: {
|
|
1089
|
+
${' ...keyValue.environment,\n'}\
|
|
1180
1090
|
AUTH_CLIENT_ID: authClient.id,
|
|
1181
1091
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1182
1092
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1185,7 +1095,7 @@ export function product() {
|
|
|
1185
1095
|
EBK_STAGE: $app.stage,
|
|
1186
1096
|
},
|
|
1187
1097
|
handler: route.handler,
|
|
1188
|
-
link: [
|
|
1098
|
+
link: [${'keyValue.link'}, ...secretLinksFor('api-delegations')],
|
|
1189
1099
|
...lambdaLogging(delegationLogs.logGroup.name),
|
|
1190
1100
|
});
|
|
1191
1101
|
}
|
|
@@ -1230,6 +1140,7 @@ export function product() {
|
|
|
1230
1140
|
routeInVpc(route.operation.method + ' ' + route.operation.path, {
|
|
1231
1141
|
permissions: nativeAuthority.permissions('api-data-rights'),
|
|
1232
1142
|
environment: {
|
|
1143
|
+
${' ...keyValue.environment,\n'}\
|
|
1233
1144
|
AUTH_CLIENT_ID: authClient.id,
|
|
1234
1145
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1235
1146
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1242,7 +1153,7 @@ export function product() {
|
|
|
1242
1153
|
},
|
|
1243
1154
|
handler: route.handler,
|
|
1244
1155
|
link: [
|
|
1245
|
-
|
|
1156
|
+
${'keyValue.link'},
|
|
1246
1157
|
foundation.eventBus,
|
|
1247
1158
|
...secretLinksFor('api-data-rights'),
|
|
1248
1159
|
],
|
|
@@ -1262,6 +1173,7 @@ export function product() {
|
|
|
1262
1173
|
routeInVpc(route.operation.method + ' ' + route.operation.path, {
|
|
1263
1174
|
permissions: nativeAuthority.permissions('api-database-records'),
|
|
1264
1175
|
environment: {
|
|
1176
|
+
${' ...keyValue.environment,\n'}\
|
|
1265
1177
|
AUTH_CLIENT_ID: authClient.id,
|
|
1266
1178
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1267
1179
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1270,7 +1182,7 @@ export function product() {
|
|
|
1270
1182
|
EBK_STAGE: $app.stage,
|
|
1271
1183
|
},
|
|
1272
1184
|
handler: route.handler,
|
|
1273
|
-
link: [
|
|
1185
|
+
link: [${'keyValue.link'}, ...secretLinksFor('api-database-records')],
|
|
1274
1186
|
...lambdaLogging(dataRetentionReviewLogs.logGroup.name),
|
|
1275
1187
|
});
|
|
1276
1188
|
}
|
|
@@ -1281,6 +1193,7 @@ export function product() {
|
|
|
1281
1193
|
{
|
|
1282
1194
|
permissions: nativeAuthority.permissions('api-protected'),
|
|
1283
1195
|
environment: {
|
|
1196
|
+
${' ...keyValue.environment,\n'}\
|
|
1284
1197
|
AUTH_CLIENT_ID: authClient.id,
|
|
1285
1198
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1286
1199
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1289,7 +1202,7 @@ export function product() {
|
|
|
1289
1202
|
EBK_STAGE: $app.stage,
|
|
1290
1203
|
},
|
|
1291
1204
|
handler: 'api/protected.handler',
|
|
1292
|
-
link: [
|
|
1205
|
+
link: [${'keyValue.link'}, ...secretLinksFor('api-protected')],
|
|
1293
1206
|
...lambdaLogging(protectedApiLogs.logGroup.name),
|
|
1294
1207
|
},
|
|
1295
1208
|
);
|
|
@@ -1300,6 +1213,7 @@ export function product() {
|
|
|
1300
1213
|
{
|
|
1301
1214
|
permissions: nativeAuthority.permissions('api-database-health'),
|
|
1302
1215
|
environment: {
|
|
1216
|
+
${' ...keyValue.environment,\n'}\
|
|
1303
1217
|
AUTH_CLIENT_ID: authClient.id,
|
|
1304
1218
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1305
1219
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1308,7 +1222,7 @@ export function product() {
|
|
|
1308
1222
|
EBK_STAGE: $app.stage,
|
|
1309
1223
|
},
|
|
1310
1224
|
handler: 'database/runtime-health.handler',
|
|
1311
|
-
link: [
|
|
1225
|
+
link: [${'keyValue.link'}, ...secretLinksFor('api-database-health')],
|
|
1312
1226
|
...lambdaLogging(databaseHealthLogs.logGroup.name),
|
|
1313
1227
|
},
|
|
1314
1228
|
);
|
|
@@ -1329,6 +1243,7 @@ export function product() {
|
|
|
1329
1243
|
routeInVpc(route.operation.method + ' ' + route.operation.path, {
|
|
1330
1244
|
permissions: nativeAuthority.permissions('api-database-records'),
|
|
1331
1245
|
environment: {
|
|
1246
|
+
${' ...keyValue.environment,\n'}\
|
|
1332
1247
|
AUTH_CLIENT_ID: authClient.id,
|
|
1333
1248
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1334
1249
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1339,7 +1254,7 @@ export function product() {
|
|
|
1339
1254
|
},
|
|
1340
1255
|
handler: route.handler,
|
|
1341
1256
|
link: [
|
|
1342
|
-
|
|
1257
|
+
${'keyValue.link'},
|
|
1343
1258
|
foundation.eventBus,
|
|
1344
1259
|
...secretLinksFor('api-database-records'),
|
|
1345
1260
|
],
|
|
@@ -1359,6 +1274,7 @@ export function product() {
|
|
|
1359
1274
|
routeInVpc(route.operation.method + ' ' + route.operation.path, {
|
|
1360
1275
|
permissions: nativeAuthority.permissions('api-database-records'),
|
|
1361
1276
|
environment: {
|
|
1277
|
+
${' ...keyValue.environment,\n'}\
|
|
1362
1278
|
AUTH_CLIENT_ID: authClient.id,
|
|
1363
1279
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1364
1280
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1367,7 +1283,7 @@ export function product() {
|
|
|
1367
1283
|
EBK_STAGE: $app.stage,
|
|
1368
1284
|
},
|
|
1369
1285
|
handler: route.handler,
|
|
1370
|
-
link: [
|
|
1286
|
+
link: [${'keyValue.link'}, ...secretLinksFor('api-database-records')],
|
|
1371
1287
|
...lambdaLogging(databaseRecordsLogs.logGroup.name),
|
|
1372
1288
|
});
|
|
1373
1289
|
}
|
|
@@ -1378,6 +1294,7 @@ export function product() {
|
|
|
1378
1294
|
{
|
|
1379
1295
|
permissions: nativeAuthority.permissions('api-publish-created'),
|
|
1380
1296
|
environment: {
|
|
1297
|
+
${' ...keyValue.environment,\n'}\
|
|
1381
1298
|
AUTH_CLIENT_ID: authClient.id,
|
|
1382
1299
|
AUTH_MACHINE_ACCEPTED_CLIENT_IDS:
|
|
1383
1300
|
machineAuthorization.acceptedClientIdsJson,
|
|
@@ -1388,7 +1305,7 @@ export function product() {
|
|
|
1388
1305
|
},
|
|
1389
1306
|
handler: 'api/publish-created.handler',
|
|
1390
1307
|
link: [
|
|
1391
|
-
|
|
1308
|
+
${'keyValue.link'},
|
|
1392
1309
|
foundation.eventBus,
|
|
1393
1310
|
...secretLinksFor('api-publish-created'),
|
|
1394
1311
|
],
|
|
@@ -1415,6 +1332,7 @@ export function product() {
|
|
|
1415
1332
|
{
|
|
1416
1333
|
permissions: dataExportStore.cleanupPermissions,
|
|
1417
1334
|
environment: {
|
|
1335
|
+
${' ...keyValue.environment,\n'}\
|
|
1418
1336
|
DATA_EXPORT_BUCKET_NAME: dataExportStore.bucket.bucket,
|
|
1419
1337
|
DATA_EXPORT_KMS_KEY_ARN: dataExportStore.encryptionKey.arn,
|
|
1420
1338
|
EBK_STAGE: $app.stage,
|
|
@@ -1422,12 +1340,12 @@ export function product() {
|
|
|
1422
1340
|
},
|
|
1423
1341
|
handler: 'jobs/data-export-cleanup.handler',
|
|
1424
1342
|
link: [
|
|
1425
|
-
|
|
1343
|
+
${'keyValue.link'},
|
|
1426
1344
|
...secretLinksFor('data-export-cleanup'),
|
|
1427
1345
|
],
|
|
1428
1346
|
...lambdaLogging(dataExportCleanupLogs.logGroup.name),
|
|
1429
1347
|
timeout: '5 minutes',
|
|
1430
|
-
|
|
1348
|
+
${''}\
|
|
1431
1349
|
},
|
|
1432
1350
|
);
|
|
1433
1351
|
const dataExportCleanupRule = new aws.cloudwatch.EventRule(
|
|
@@ -1517,15 +1435,16 @@ export function product() {
|
|
|
1517
1435
|
);
|
|
1518
1436
|
eventQueue.subscribe({
|
|
1519
1437
|
environment: {
|
|
1438
|
+
${' ...keyValue.environment,\n'}\
|
|
1520
1439
|
EBK_STAGE: $app.stage,
|
|
1521
1440
|
EBK_WORKLOAD_IDENTITY: '${name}:event-consumer',
|
|
1522
1441
|
},
|
|
1523
1442
|
handler: 'api/event-consumer.handler',
|
|
1524
|
-
link: [
|
|
1443
|
+
link: [${'keyValue.link'}, ...secretLinksFor('event-consumer')],
|
|
1525
1444
|
permissions: nativeAuthority.permissions('event-consumer'),
|
|
1526
1445
|
...lambdaLogging(eventConsumerLogs.logGroup.name),
|
|
1527
1446
|
timeout: '1 minute',
|
|
1528
|
-
|
|
1447
|
+
${''}\
|
|
1529
1448
|
}, {
|
|
1530
1449
|
batch: { partialResponses: true },
|
|
1531
1450
|
});
|
|
@@ -1535,7 +1454,7 @@ export function product() {
|
|
|
1535
1454
|
{
|
|
1536
1455
|
pattern: {
|
|
1537
1456
|
detail: { meta: { stage: [$app.stage] } },
|
|
1538
|
-
detailType:
|
|
1457
|
+
detailType: sameSliceEventDetailTypes(EventContractSchema),
|
|
1539
1458
|
source: ['${name}'],
|
|
1540
1459
|
},
|
|
1541
1460
|
},
|
|
@@ -1630,7 +1549,7 @@ export function product() {
|
|
|
1630
1549
|
(alertTopicArn: string) => alertTopicArn.split(':').at(-1) ?? '',
|
|
1631
1550
|
),
|
|
1632
1551
|
apiId: api.id,
|
|
1633
|
-
|
|
1552
|
+
${' databaseTableName: keyValue.table.name,\n'}\
|
|
1634
1553
|
functionName: dataExportCleanup.name,
|
|
1635
1554
|
providerQueueName: providerQueue.name,
|
|
1636
1555
|
});
|
|
@@ -1847,6 +1766,7 @@ export function product() {
|
|
|
1847
1766
|
providerQueue.subscribe(
|
|
1848
1767
|
{
|
|
1849
1768
|
environment: {
|
|
1769
|
+
${' ...keyValue.environment,\n'}\
|
|
1850
1770
|
EBK_STAGE: $app.stage,
|
|
1851
1771
|
EBK_WORKLOAD_IDENTITY: '${name}:async-provider-worker',
|
|
1852
1772
|
EBK_WORKSPACE: '${workspace}',
|
|
@@ -1854,14 +1774,14 @@ export function product() {
|
|
|
1854
1774
|
},
|
|
1855
1775
|
handler: 'async/provider-worker.handler',
|
|
1856
1776
|
link: [
|
|
1857
|
-
|
|
1777
|
+
${'keyValue.link'},
|
|
1858
1778
|
providerQueue,
|
|
1859
1779
|
...secretLinksFor('async-provider-worker'),
|
|
1860
1780
|
],
|
|
1861
1781
|
permissions: nativeAuthority.permissions('async-provider-worker'),
|
|
1862
1782
|
...lambdaLogging(asyncProviderWorkerLogs.logGroup.name),
|
|
1863
1783
|
timeout: '1 minute',
|
|
1864
|
-
|
|
1784
|
+
${''}\
|
|
1865
1785
|
},
|
|
1866
1786
|
{
|
|
1867
1787
|
batch: { partialResponses: true },
|
|
@@ -1892,6 +1812,8 @@ export function product() {
|
|
|
1892
1812
|
{
|
|
1893
1813
|
permissions: nativeAuthority.permissions('async-outbox-relay'),
|
|
1894
1814
|
environment: {
|
|
1815
|
+
${' ...keyValue.environment,\n'}\
|
|
1816
|
+
${''}\
|
|
1895
1817
|
EBK_STAGE: $app.stage,
|
|
1896
1818
|
EBK_WORKLOAD_IDENTITY: '${name}:async-outbox-relay',
|
|
1897
1819
|
EBK_WORKSPACE: '${workspace}',
|
|
@@ -1899,32 +1821,45 @@ export function product() {
|
|
|
1899
1821
|
},
|
|
1900
1822
|
handler: 'async/outbox-relay.handler',
|
|
1901
1823
|
link: [
|
|
1902
|
-
|
|
1824
|
+
${'keyValue.link'},
|
|
1903
1825
|
foundation.eventBus,
|
|
1904
1826
|
...secretLinksFor('async-outbox-relay'),
|
|
1905
1827
|
],
|
|
1906
1828
|
...lambdaLogging(asyncOutboxRelayLogs.logGroup.name),
|
|
1907
1829
|
timeout: '1 minute',
|
|
1908
|
-
|
|
1830
|
+
${''}\
|
|
1909
1831
|
},
|
|
1910
1832
|
);
|
|
1833
|
+
${sql
|
|
1834
|
+
? ` const sqlOutbox = createSqlOutboxInfrastructure({
|
|
1835
|
+
workspace: '${workspace}',
|
|
1836
|
+
database, eventBus: foundation.eventBus, eventBusName: foundation.discovery.eventBusName,
|
|
1837
|
+
secretLinks: secretLinksFor('async-outbox-relay'),
|
|
1838
|
+
vpc: foundation.vpc, schedule: backgroundSchedules.sqlOutboxRecovery,
|
|
1839
|
+
alertTopicArn: foundation.discovery.alertTopicArn,
|
|
1840
|
+
managedLogGroup, lambdaLogging,
|
|
1841
|
+
${''}\
|
|
1842
|
+
});
|
|
1843
|
+
`
|
|
1844
|
+
: ''}\
|
|
1911
1845
|
const asyncInboxCleanup = new sst.aws.Function(
|
|
1912
1846
|
'${pascalName}AsyncInboxCleanup',
|
|
1913
1847
|
{
|
|
1914
1848
|
permissions: nativeAuthority.permissions('async-inbox-cleanup'),
|
|
1915
1849
|
environment: {
|
|
1850
|
+
${' ...keyValue.environment,\n'}\
|
|
1916
1851
|
EBK_STAGE: $app.stage,
|
|
1917
1852
|
EBK_WORKLOAD_IDENTITY: '${name}:async-inbox-cleanup',
|
|
1918
1853
|
EBK_WORKSPACE: '${workspace}',
|
|
1919
1854
|
},
|
|
1920
1855
|
handler: 'async/inbox-cleanup.handler',
|
|
1921
1856
|
link: [
|
|
1922
|
-
|
|
1857
|
+
${'keyValue.link'},
|
|
1923
1858
|
...secretLinksFor('async-inbox-cleanup'),
|
|
1924
1859
|
],
|
|
1925
1860
|
...lambdaLogging(asyncInboxCleanupLogs.logGroup.name),
|
|
1926
1861
|
timeout: '5 minutes',
|
|
1927
|
-
|
|
1862
|
+
${''}\
|
|
1928
1863
|
},
|
|
1929
1864
|
);
|
|
1930
1865
|
const asyncScheduleTarget = new sst.aws.Function(
|
|
@@ -1978,7 +1913,7 @@ export function product() {
|
|
|
1978
1913
|
'${pascalName}OutboxRelaySchedule',
|
|
1979
1914
|
{
|
|
1980
1915
|
description:
|
|
1981
|
-
'Durable outbox relay;
|
|
1916
|
+
'Durable DynamoDB outbox relay; cadence and pause are independent of SQL capacity.',
|
|
1982
1917
|
...backgroundSchedules.outbox,
|
|
1983
1918
|
tags: {
|
|
1984
1919
|
'ebk:slice': '${name}',
|
|
@@ -2257,15 +2192,18 @@ export function product() {
|
|
|
2257
2192
|
);
|
|
2258
2193
|
}
|
|
2259
2194
|
|
|
2195
|
+
const webServerLogging = lambdaLogging(nextServerLogs.logGroup.name);
|
|
2260
2196
|
const web = new sst.aws.Nextjs('${pascalName}Web', {
|
|
2261
2197
|
buildCommand: 'node ../tools/ebk-next-build-environment.mjs',
|
|
2198
|
+
invalidation: { wait: true },
|
|
2262
2199
|
dev: {
|
|
2263
|
-
command:
|
|
2200
|
+
command: 'node tools/ebk-next-dev.mjs',
|
|
2264
2201
|
directory: '.',
|
|
2265
2202
|
title: '${pascalName} web',
|
|
2266
2203
|
url: \`http://127.0.0.1:\${devPort}/${name}\`,
|
|
2267
2204
|
},
|
|
2268
2205
|
environment: {
|
|
2206
|
+
${' ...keyValue.environment,\n'}\
|
|
2269
2207
|
AUTH_CLIENT_ID: authClient.id,
|
|
2270
2208
|
AUTH_USER_POOL_ID: foundation.userPool.id,
|
|
2271
2209
|
EBK_SOURCE_COMMIT: releaseSourceCommit,
|
|
@@ -2292,7 +2230,7 @@ export function product() {
|
|
|
2292
2230
|
...runtimeConfigurationEnvironment,
|
|
2293
2231
|
NEXT_PUBLIC_API_URL: api.url,
|
|
2294
2232
|
},
|
|
2295
|
-
link: [database, foundation.userPool],
|
|
2233
|
+
link: [keyValue.link, ${sql ? 'database, foundation.eventBus, ' : ''}foundation.userPool],
|
|
2296
2234
|
path: 'web',
|
|
2297
2235
|
router: { instance: foundation.router, path: '/${name}' },
|
|
2298
2236
|
transform: {
|
|
@@ -2323,23 +2261,38 @@ export function product() {
|
|
|
2323
2261
|
link: secretLinksFor('web-revalidation-seeder'),
|
|
2324
2262
|
...lambdaLogging(nextRevalidationSeederLogs.logGroup.name),
|
|
2325
2263
|
},
|
|
2326
|
-
server: {
|
|
2327
|
-
permissions
|
|
2328
|
-
|
|
2264
|
+
server(args: Record<string, unknown>) {
|
|
2265
|
+
args.permissions = $resolve({
|
|
2266
|
+
inherited: args.permissions,
|
|
2267
|
+
additional: nativeAuthority.permissions('web-server'),
|
|
2268
|
+
}).apply(({ inherited, additional }) => [
|
|
2269
|
+
...((inherited ?? []) as unknown[]),
|
|
2270
|
+
...additional,
|
|
2271
|
+
]);
|
|
2272
|
+
args.hook = {
|
|
2329
2273
|
async postbuild(directory: string) {
|
|
2330
2274
|
removeFinderMetadataFromBuiltFunction(directory);
|
|
2331
2275
|
},
|
|
2332
|
-
}
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2276
|
+
};
|
|
2277
|
+
// SST applies this transform to both its dev runtime and deployed
|
|
2278
|
+
// server. Preserve native/site links; secret links are additive.
|
|
2279
|
+
args.link = $output(args.link ?? []).apply((links: unknown[]) => [
|
|
2280
|
+
...links,
|
|
2281
|
+
...secretLinksFor(
|
|
2282
|
+
'web-server',
|
|
2283
|
+
performanceDeploymentBinding
|
|
2284
|
+
? []
|
|
2285
|
+
: [performanceHmacLogicalName],
|
|
2286
|
+
),
|
|
2287
|
+
]);
|
|
2288
|
+
Object.assign(args, webServerLogging);
|
|
2289
|
+
args.transform = {
|
|
2290
|
+
...webServerLogging.transform,
|
|
2291
|
+
...($dev ? { role: { tags: { 'ebk:dev-runtime': 'web' } } } : {}),
|
|
2292
|
+
};
|
|
2340
2293
|
},
|
|
2341
2294
|
},
|
|
2342
|
-
vpc: foundation.vpc
|
|
2295
|
+
${sql ? ' vpc: foundation.vpc,\n' : ''}\
|
|
2343
2296
|
}, configurationDeployment
|
|
2344
2297
|
? { dependsOn: [configurationDeployment] }
|
|
2345
2298
|
: {});
|
|
@@ -2360,7 +2313,15 @@ export function product() {
|
|
|
2360
2313
|
}
|
|
2361
2314
|
|
|
2362
2315
|
const migrationControls: Record<string, any> = {};
|
|
2363
|
-
|
|
2316
|
+
${` Object.assign(migrationControls, createKeyValueRetentionInfrastructure({
|
|
2317
|
+
keyValue, workspace: '${workspace}', eventBusArn: foundation.discovery.eventBusArn,
|
|
2318
|
+
alertTopicArn: foundation.discovery.alertTopicArn, schedule: backgroundSchedules.retention,
|
|
2319
|
+
scheduleName: runtimeResourceNames.dataRetentionMaintenanceRule,
|
|
2320
|
+
managedLogGroup, lambdaLogging, register: registerProductRetention,
|
|
2321
|
+
}));
|
|
2322
|
+
`}\
|
|
2323
|
+
${sql
|
|
2324
|
+
? ` if (!$dev) {
|
|
2364
2325
|
const region = aws.getRegionOutput({}).name;
|
|
2365
2326
|
const taskArguments = (task: any) => ({
|
|
2366
2327
|
Cluster: task.cluster,
|
|
@@ -2447,316 +2408,7 @@ export function product() {
|
|
|
2447
2408
|
});
|
|
2448
2409
|
};
|
|
2449
2410
|
|
|
2450
|
-
|
|
2451
|
-
throw new Error(
|
|
2452
|
-
'The active primary database is missing its read/write credential reference.',
|
|
2453
|
-
);
|
|
2454
|
-
}
|
|
2455
|
-
const retentionTaskLogs = managedLogContract('job-data-retention');
|
|
2456
|
-
const retentionTask = new sst.aws.Task('${pascalName}DataRetentionTask', {
|
|
2457
|
-
permissions: nativeAuthority.permissions('data-retention-job-task'),
|
|
2458
|
-
cluster: foundation.cluster,
|
|
2459
|
-
environment: {
|
|
2460
|
-
...dataRetentionContainer.environment,
|
|
2461
|
-
AWS_REGION: region,
|
|
2462
|
-
EBK_DATABASE_HOST: foundation.database.clusterEndpoint,
|
|
2463
|
-
EBK_DATABASE_NAME: databaseProvision.databaseName,
|
|
2464
|
-
EBK_DATABASE_PORT: $interpolate\`\${foundation.database.port}\`,
|
|
2465
|
-
EBK_DATABASE_USERNAME: databaseProvision.readwriteRole,
|
|
2466
|
-
EBK_RDS_CA_BUNDLE: '/app/rds-global-bundle.pem',
|
|
2467
|
-
EBK_READWRITE_SECRET_ARN: databaseProvision.readwriteSecretArn,
|
|
2468
|
-
EBK_SLICE: '${name}',
|
|
2469
|
-
EBK_STAGE: $app.stage,
|
|
2470
|
-
EBK_WORKLOAD_IDENTITY: '${name}:data-retention-job',
|
|
2471
|
-
EBK_WORKSPACE: '${workspace}',
|
|
2472
|
-
EVENT_BUS_NAME: foundation.eventBus.name,
|
|
2473
|
-
},
|
|
2474
|
-
image: dataRetentionContainer.image,
|
|
2475
|
-
link: secretLinksFor('data-retention-job-task'),
|
|
2476
|
-
logging: {
|
|
2477
|
-
name: retentionTaskLogs.name,
|
|
2478
|
-
retention: '1 month',
|
|
2479
|
-
},
|
|
2480
|
-
transform: {
|
|
2481
|
-
logGroup: {
|
|
2482
|
-
logGroupClass: retentionTaskLogs.logGroupClass,
|
|
2483
|
-
tags: retentionTaskLogs.tags,
|
|
2484
|
-
},
|
|
2485
|
-
taskDefinition: {
|
|
2486
|
-
family: runtimeResourceNames.dataRetentionTaskFamily,
|
|
2487
|
-
},
|
|
2488
|
-
},
|
|
2489
|
-
});
|
|
2490
|
-
const retentionTaskLogDataProtection = managedLogDataProtection(
|
|
2491
|
-
'${pascalName}DataRetentionTaskLog',
|
|
2492
|
-
retentionTaskLogs,
|
|
2493
|
-
retentionTaskLogs.name,
|
|
2494
|
-
[retentionTask.nodes.taskDefinition],
|
|
2495
|
-
foundation.discovery.alertTopicArn,
|
|
2496
|
-
);
|
|
2497
|
-
const retentionWorkflowLogs = managedLogGroup(
|
|
2498
|
-
'${pascalName}DataRetentionWorkflowLogs',
|
|
2499
|
-
'job-data-retention-orchestration',
|
|
2500
|
-
foundation.discovery.alertTopicArn,
|
|
2501
|
-
);
|
|
2502
|
-
const retentionOverrides = retentionTask.containers.apply(
|
|
2503
|
-
(containers: string[]) => ({
|
|
2504
|
-
ContainerOverrides: containers.map((containerName) => ({
|
|
2505
|
-
Environment: [
|
|
2506
|
-
{
|
|
2507
|
-
Name: 'EBK_RETENTION_APPROVAL_ID',
|
|
2508
|
-
Value: '{% $states.input.approvalRequestId %}',
|
|
2509
|
-
},
|
|
2510
|
-
{
|
|
2511
|
-
Name: 'EBK_RETENTION_CORRELATION_ID',
|
|
2512
|
-
Value: '{% $states.input.correlationId %}',
|
|
2513
|
-
},
|
|
2514
|
-
{
|
|
2515
|
-
Name: 'EBK_RETENTION_AS_OF',
|
|
2516
|
-
Value: '{% $states.input.asOf %}',
|
|
2517
|
-
},
|
|
2518
|
-
{
|
|
2519
|
-
Name: 'EBK_RETENTION_MODE',
|
|
2520
|
-
Value: '{% $states.input.mode %}',
|
|
2521
|
-
},
|
|
2522
|
-
{
|
|
2523
|
-
Name: 'EBK_RETENTION_RUN_ID',
|
|
2524
|
-
Value: '{% $states.input.runId %}',
|
|
2525
|
-
},
|
|
2526
|
-
{
|
|
2527
|
-
Name: 'EBK_STEP_FUNCTIONS_TASK_TOKEN',
|
|
2528
|
-
Value: '{% $states.context.Task.Token %}',
|
|
2529
|
-
},
|
|
2530
|
-
],
|
|
2531
|
-
Name: containerName,
|
|
2532
|
-
})),
|
|
2533
|
-
}),
|
|
2534
|
-
);
|
|
2535
|
-
const retentionStateMachine = createRawStateMachine(
|
|
2536
|
-
'${pascalName}DataRetention',
|
|
2537
|
-
{
|
|
2538
|
-
StartAt: 'RunDataRetention',
|
|
2539
|
-
States: {
|
|
2540
|
-
DataRetentionSucceeded: {
|
|
2541
|
-
QueryLanguage: 'JSONata',
|
|
2542
|
-
Type: 'Succeed',
|
|
2543
|
-
},
|
|
2544
|
-
RunDataRetention: {
|
|
2545
|
-
Arguments: {
|
|
2546
|
-
...taskArguments(retentionTask),
|
|
2547
|
-
Overrides: retentionOverrides,
|
|
2548
|
-
},
|
|
2549
|
-
Next: 'DataRetentionSucceeded',
|
|
2550
|
-
QueryLanguage: 'JSONata',
|
|
2551
|
-
Resource: 'arn:aws:states:::ecs:runTask.waitForTaskToken',
|
|
2552
|
-
Retry: [
|
|
2553
|
-
{
|
|
2554
|
-
BackoffRate: 2,
|
|
2555
|
-
ErrorEquals: [
|
|
2556
|
-
'ECS.AmazonECSException',
|
|
2557
|
-
'ECS.ECSException',
|
|
2558
|
-
],
|
|
2559
|
-
IntervalSeconds: 10,
|
|
2560
|
-
MaxAttempts: 2,
|
|
2561
|
-
},
|
|
2562
|
-
],
|
|
2563
|
-
TimeoutSeconds: 2700,
|
|
2564
|
-
Type: 'Task',
|
|
2565
|
-
},
|
|
2566
|
-
},
|
|
2567
|
-
},
|
|
2568
|
-
retentionWorkflowLogs.logGroup,
|
|
2569
|
-
'data-retention-job-orchestration',
|
|
2570
|
-
);
|
|
2571
|
-
const retentionFailureAlarm = new aws.cloudwatch.MetricAlarm(
|
|
2572
|
-
'${pascalName}DataRetentionFailure',
|
|
2573
|
-
{
|
|
2574
|
-
alarmActions: [foundation.discovery.alertTopicArn],
|
|
2575
|
-
alarmDescription: operationalAlarmDescription({
|
|
2576
|
-
businessSymptom:
|
|
2577
|
-
'The built-in retention Job terminated unsuccessfully.',
|
|
2578
|
-
id: 'retention-job-failure',
|
|
2579
|
-
runbook: 'docs/runbooks/database-recovery.md',
|
|
2580
|
-
}),
|
|
2581
|
-
comparisonOperator: 'GreaterThanOrEqualToThreshold',
|
|
2582
|
-
evaluationPeriods: 1,
|
|
2583
|
-
metricQueries: [
|
|
2584
|
-
...['ExecutionsFailed', 'ExecutionsTimedOut', 'ExecutionsAborted'].map(
|
|
2585
|
-
(metricName, index) => ({
|
|
2586
|
-
id: 'm' + index,
|
|
2587
|
-
metric: {
|
|
2588
|
-
dimensions: {
|
|
2589
|
-
StateMachineArn: retentionStateMachine.arn,
|
|
2590
|
-
},
|
|
2591
|
-
metricName,
|
|
2592
|
-
namespace: 'AWS/States',
|
|
2593
|
-
period: 60,
|
|
2594
|
-
stat: 'Sum',
|
|
2595
|
-
},
|
|
2596
|
-
returnData: false,
|
|
2597
|
-
}),
|
|
2598
|
-
),
|
|
2599
|
-
{
|
|
2600
|
-
expression: 'm0+m1+m2',
|
|
2601
|
-
id: 'failures',
|
|
2602
|
-
label: 'Retention terminal execution failures',
|
|
2603
|
-
returnData: true,
|
|
2604
|
-
},
|
|
2605
|
-
],
|
|
2606
|
-
name: '${name}-' + $app.stage + '-retention-job-failure',
|
|
2607
|
-
threshold: 1,
|
|
2608
|
-
treatMissingData: 'notBreaching',
|
|
2609
|
-
},
|
|
2610
|
-
);
|
|
2611
|
-
const retentionRegistration = registerProductRetention(
|
|
2612
|
-
retentionStateMachine.arn,
|
|
2613
|
-
);
|
|
2614
|
-
migrationControls.dataRetention = {
|
|
2615
|
-
registration: retentionRegistration,
|
|
2616
|
-
retentionFailureAlarm,
|
|
2617
|
-
retentionStateMachine,
|
|
2618
|
-
retentionTask,
|
|
2619
|
-
retentionTaskLogDataProtection,
|
|
2620
|
-
retentionWorkflowLogs,
|
|
2621
|
-
};
|
|
2622
|
-
const retentionMaintenanceTaskLogs = managedLogContract(
|
|
2623
|
-
'job-data-retention-maintenance',
|
|
2624
|
-
);
|
|
2625
|
-
const retentionMaintenanceTask = new sst.aws.Task(
|
|
2626
|
-
'${pascalName}DataRetentionMaintenanceTask',
|
|
2627
|
-
{
|
|
2628
|
-
permissions: nativeAuthority.permissions(
|
|
2629
|
-
'data-retention-maintenance-job-task',
|
|
2630
|
-
),
|
|
2631
|
-
cluster: foundation.cluster,
|
|
2632
|
-
environment: {
|
|
2633
|
-
...dataRetentionContainer.environment,
|
|
2634
|
-
AWS_REGION: region,
|
|
2635
|
-
EBK_DATABASE_HOST: foundation.database.clusterEndpoint,
|
|
2636
|
-
EBK_DATABASE_NAME: databaseProvision.databaseName,
|
|
2637
|
-
EBK_DATABASE_PORT: $interpolate\`\${foundation.database.port}\`,
|
|
2638
|
-
EBK_DATABASE_USERNAME: databaseProvision.readwriteRole,
|
|
2639
|
-
EBK_RDS_CA_BUNDLE: '/app/rds-global-bundle.pem',
|
|
2640
|
-
EBK_READWRITE_SECRET_ARN:
|
|
2641
|
-
databaseProvision.readwriteSecretArn,
|
|
2642
|
-
EBK_SLICE: '${name}',
|
|
2643
|
-
EBK_STAGE: $app.stage,
|
|
2644
|
-
EBK_WORKLOAD_IDENTITY: '${name}:data-retention-job',
|
|
2645
|
-
EBK_WORKSPACE: '${workspace}',
|
|
2646
|
-
},
|
|
2647
|
-
image: dataRetentionContainer.image,
|
|
2648
|
-
link: secretLinksFor(
|
|
2649
|
-
'data-retention-maintenance-job-task',
|
|
2650
|
-
),
|
|
2651
|
-
logging: {
|
|
2652
|
-
name: retentionMaintenanceTaskLogs.name,
|
|
2653
|
-
retention: '1 month',
|
|
2654
|
-
},
|
|
2655
|
-
transform: {
|
|
2656
|
-
logGroup: {
|
|
2657
|
-
logGroupClass:
|
|
2658
|
-
retentionMaintenanceTaskLogs.logGroupClass,
|
|
2659
|
-
tags: retentionMaintenanceTaskLogs.tags,
|
|
2660
|
-
},
|
|
2661
|
-
taskDefinition: {
|
|
2662
|
-
family: runtimeResourceNames.dataRetentionMaintenanceTaskFamily,
|
|
2663
|
-
},
|
|
2664
|
-
},
|
|
2665
|
-
},
|
|
2666
|
-
);
|
|
2667
|
-
const retentionMaintenanceTaskLogDataProtection =
|
|
2668
|
-
managedLogDataProtection(
|
|
2669
|
-
'${pascalName}DataRetentionMaintenanceTaskLog',
|
|
2670
|
-
retentionMaintenanceTaskLogs,
|
|
2671
|
-
retentionMaintenanceTaskLogs.name,
|
|
2672
|
-
[retentionMaintenanceTask.nodes.taskDefinition],
|
|
2673
|
-
foundation.discovery.alertTopicArn,
|
|
2674
|
-
);
|
|
2675
|
-
const retentionMaintenanceLauncherLogs = managedLogGroup(
|
|
2676
|
-
'${pascalName}DataRetentionMaintenanceLauncherLogs',
|
|
2677
|
-
'job-data-retention-maintenance-launcher',
|
|
2678
|
-
foundation.discovery.alertTopicArn,
|
|
2679
|
-
);
|
|
2680
|
-
const retentionMaintenanceContainerName =
|
|
2681
|
-
retentionMaintenanceTask.containers.apply(
|
|
2682
|
-
(containers: string[]) => {
|
|
2683
|
-
if (containers.length !== 1 || !containers[0]) {
|
|
2684
|
-
throw new Error(
|
|
2685
|
-
'Retention maintenance requires exactly one task container.',
|
|
2686
|
-
);
|
|
2687
|
-
}
|
|
2688
|
-
return containers[0];
|
|
2689
|
-
},
|
|
2690
|
-
);
|
|
2691
|
-
const retentionMaintenanceLauncher = new sst.aws.Function(
|
|
2692
|
-
'${pascalName}DataRetentionMaintenanceLauncher',
|
|
2693
|
-
{
|
|
2694
|
-
permissions: nativeAuthority.permissions(
|
|
2695
|
-
'data-retention-maintenance-launcher',
|
|
2696
|
-
),
|
|
2697
|
-
environment: {
|
|
2698
|
-
EBK_MAINTENANCE_ASSIGN_PUBLIC_IP:
|
|
2699
|
-
retentionMaintenanceTask.assignPublicIp.apply(
|
|
2700
|
-
(value: boolean) => String(value),
|
|
2701
|
-
),
|
|
2702
|
-
EBK_MAINTENANCE_CLUSTER_ARN:
|
|
2703
|
-
retentionMaintenanceTask.cluster,
|
|
2704
|
-
EBK_MAINTENANCE_CONTAINER_NAME:
|
|
2705
|
-
retentionMaintenanceContainerName,
|
|
2706
|
-
EBK_MAINTENANCE_SECURITY_GROUP_IDS: $jsonStringify(
|
|
2707
|
-
retentionMaintenanceTask.securityGroups,
|
|
2708
|
-
),
|
|
2709
|
-
EBK_MAINTENANCE_SUBNET_IDS: $jsonStringify(
|
|
2710
|
-
retentionMaintenanceTask.subnets,
|
|
2711
|
-
),
|
|
2712
|
-
EBK_MAINTENANCE_TASK_DEFINITION_ARN:
|
|
2713
|
-
retentionMaintenanceTask.taskDefinition,
|
|
2714
|
-
EBK_STAGE: $app.stage,
|
|
2715
|
-
EBK_WORKSPACE: '${workspace}',
|
|
2716
|
-
},
|
|
2717
|
-
handler: 'jobs/data-retention-maintenance-launcher.handler',
|
|
2718
|
-
...lambdaLogging(
|
|
2719
|
-
retentionMaintenanceLauncherLogs.logGroup.name,
|
|
2720
|
-
),
|
|
2721
|
-
timeout: '1 minute',
|
|
2722
|
-
},
|
|
2723
|
-
);
|
|
2724
|
-
const retentionMaintenanceRule = new aws.cloudwatch.EventRule(
|
|
2725
|
-
'${pascalName}DataRetentionMaintenanceSchedule',
|
|
2726
|
-
{
|
|
2727
|
-
name: runtimeResourceNames.dataRetentionMaintenanceRule,
|
|
2728
|
-
...backgroundSchedules.retention,
|
|
2729
|
-
},
|
|
2730
|
-
);
|
|
2731
|
-
const retentionMaintenancePermission =
|
|
2732
|
-
new aws.lambda.Permission(
|
|
2733
|
-
'${pascalName}DataRetentionMaintenanceSchedulePermission',
|
|
2734
|
-
{
|
|
2735
|
-
action: 'lambda:InvokeFunction',
|
|
2736
|
-
function: retentionMaintenanceLauncher.arn,
|
|
2737
|
-
principal: 'events.amazonaws.com',
|
|
2738
|
-
sourceArn: retentionMaintenanceRule.arn,
|
|
2739
|
-
},
|
|
2740
|
-
);
|
|
2741
|
-
const retentionMaintenanceTarget =
|
|
2742
|
-
new aws.cloudwatch.EventTarget(
|
|
2743
|
-
'${pascalName}DataRetentionMaintenanceTarget',
|
|
2744
|
-
{
|
|
2745
|
-
arn: retentionMaintenanceLauncher.arn,
|
|
2746
|
-
rule: retentionMaintenanceRule.name,
|
|
2747
|
-
targetId: 'DataRetentionMaintenance',
|
|
2748
|
-
},
|
|
2749
|
-
{ dependsOn: [retentionMaintenancePermission] },
|
|
2750
|
-
);
|
|
2751
|
-
migrationControls.dataRetentionMaintenance = {
|
|
2752
|
-
retentionMaintenanceLauncher,
|
|
2753
|
-
retentionMaintenanceLauncherLogs,
|
|
2754
|
-
retentionMaintenanceRule,
|
|
2755
|
-
retentionMaintenanceTarget,
|
|
2756
|
-
retentionMaintenanceTask,
|
|
2757
|
-
retentionMaintenanceTaskLogDataProtection,
|
|
2758
|
-
};
|
|
2759
|
-
|
|
2411
|
+
${''}\
|
|
2760
2412
|
for (const [databaseIdentifier, target] of Object.entries(
|
|
2761
2413
|
databaseProvisions.databases,
|
|
2762
2414
|
)) {
|
|
@@ -3090,6 +2742,8 @@ export function product() {
|
|
|
3090
2742
|
}
|
|
3091
2743
|
}
|
|
3092
2744
|
|
|
2745
|
+
`
|
|
2746
|
+
: ''}\
|
|
3093
2747
|
const outboxRelayAlarm = new aws.cloudwatch.MetricAlarm(
|
|
3094
2748
|
'${pascalName}OutboxRelayErrors',
|
|
3095
2749
|
{
|
|
@@ -3346,6 +3000,7 @@ export function product() {
|
|
|
3346
3000
|
performanceLoadCleanupBacklogAlarm,
|
|
3347
3001
|
performanceLoadCleanupDeadlineAlarm,
|
|
3348
3002
|
asyncOutboxRelay,
|
|
3003
|
+
${sql ? ' sqlOutbox,\n' : ''}\
|
|
3349
3004
|
asyncRecoveryLedger,
|
|
3350
3005
|
asyncScheduleTarget,
|
|
3351
3006
|
asyncTargetDlq,
|
|
@@ -3365,7 +3020,8 @@ export function product() {
|
|
|
3365
3020
|
dataExportCleanupRule,
|
|
3366
3021
|
dataExportCleanupTarget,
|
|
3367
3022
|
dataExportStore,
|
|
3368
|
-
database
|
|
3023
|
+
${sql ? ' database,\n' : ''}\
|
|
3024
|
+
${' keyValue,\n'}\
|
|
3369
3025
|
dlqAlarm,
|
|
3370
3026
|
eventDlq,
|
|
3371
3027
|
eventQueue,
|
|
@@ -3393,5 +3049,7 @@ export function product() {
|
|
|
3393
3049
|
}
|
|
3394
3050
|
`,
|
|
3395
3051
|
};
|
|
3052
|
+
Object.assign(files, (0, built_in_plan_key_value_retention_infrastructure_js_1.renderKeyValueRetentionInfrastructureFiles)(name, pascalName));
|
|
3053
|
+
return files;
|
|
3396
3054
|
}
|
|
3397
3055
|
//# sourceMappingURL=built-in-plan-infrastructure-files.js.map
|