sst 3.0.0 → 3.0.1-2
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/package.json +8 -139
- package/src/index.ts +1 -0
- package/src/resource.ts +15 -0
- package/tsconfig.json +11 -0
- package/LICENSE +0 -21
- package/README.md +0 -43
- package/bootstrap.d.ts +0 -5
- package/bootstrap.js +0 -318
- package/bus.d.ts +0 -20
- package/bus.js +0 -52
- package/cache.d.ts +0 -4
- package/cache.js +0 -31
- package/cdk/deploy-stack.d.ts +0 -223
- package/cdk/deploy-stack.js +0 -562
- package/cdk/deployments-wrapper.d.ts +0 -3
- package/cdk/deployments-wrapper.js +0 -135
- package/cdk/deployments.d.ts +0 -327
- package/cdk/deployments.js +0 -360
- package/cdk/util.d.ts +0 -1
- package/cdk/util.js +0 -17
- package/cli/ci-info.d.ts +0 -4
- package/cli/ci-info.js +0 -8
- package/cli/colors.d.ts +0 -17
- package/cli/colors.js +0 -27
- package/cli/commands/bind.d.ts +0 -19
- package/cli/commands/bind.js +0 -360
- package/cli/commands/bootstrap.d.ts +0 -15
- package/cli/commands/bootstrap.js +0 -11
- package/cli/commands/build.d.ts +0 -17
- package/cli/commands/build.js +0 -25
- package/cli/commands/connect.d.ts +0 -17
- package/cli/commands/connect.js +0 -55
- package/cli/commands/console.d.ts +0 -15
- package/cli/commands/console.js +0 -22
- package/cli/commands/deploy.d.ts +0 -19
- package/cli/commands/deploy.js +0 -112
- package/cli/commands/dev.d.ts +0 -25
- package/cli/commands/dev.js +0 -351
- package/cli/commands/diff.d.ts +0 -19
- package/cli/commands/diff.js +0 -89
- package/cli/commands/plugins/kysely.d.ts +0 -1
- package/cli/commands/plugins/kysely.js +0 -87
- package/cli/commands/plugins/pothos.d.ts +0 -1
- package/cli/commands/plugins/pothos.js +0 -58
- package/cli/commands/plugins/warmer.d.ts +0 -1
- package/cli/commands/plugins/warmer.js +0 -33
- package/cli/commands/remove.d.ts +0 -19
- package/cli/commands/remove.js +0 -62
- package/cli/commands/secrets/get.d.ts +0 -19
- package/cli/commands/secrets/get.js +0 -27
- package/cli/commands/secrets/list.d.ts +0 -19
- package/cli/commands/secrets/list.js +0 -69
- package/cli/commands/secrets/load.d.ts +0 -17
- package/cli/commands/secrets/load.js +0 -47
- package/cli/commands/secrets/remove.d.ts +0 -19
- package/cli/commands/secrets/remove.js +0 -27
- package/cli/commands/secrets/secrets.d.ts +0 -2
- package/cli/commands/secrets/secrets.js +0 -16
- package/cli/commands/secrets/set.d.ts +0 -21
- package/cli/commands/secrets/set.js +0 -54
- package/cli/commands/telemetry.d.ts +0 -17
- package/cli/commands/telemetry.js +0 -24
- package/cli/commands/transform.d.ts +0 -17
- package/cli/commands/transform.js +0 -62
- package/cli/commands/types.d.ts +0 -15
- package/cli/commands/types.js +0 -25
- package/cli/commands/update.d.ts +0 -17
- package/cli/commands/update.js +0 -116
- package/cli/commands/version.d.ts +0 -15
- package/cli/commands/version.js +0 -15
- package/cli/local/router.d.ts +0 -44
- package/cli/local/router.js +0 -43
- package/cli/local/server.d.ts +0 -22
- package/cli/local/server.js +0 -319
- package/cli/program.d.ts +0 -19
- package/cli/program.js +0 -87
- package/cli/spinner.d.ts +0 -3
- package/cli/spinner.js +0 -14
- package/cli/sst.d.ts +0 -2
- package/cli/sst.js +0 -74
- package/cli/telemetry/environment.d.ts +0 -15
- package/cli/telemetry/environment.js +0 -27
- package/cli/telemetry/post-payload.d.ts +0 -1
- package/cli/telemetry/post-payload.js +0 -27
- package/cli/telemetry/project-id.d.ts +0 -2
- package/cli/telemetry/project-id.js +0 -47
- package/cli/telemetry/telemetry.d.ts +0 -19
- package/cli/telemetry/telemetry.js +0 -103
- package/cli/terminal.d.ts +0 -1
- package/cli/terminal.js +0 -8
- package/cli/ui/deploy.d.ts +0 -10
- package/cli/ui/deploy.js +0 -172
- package/cli/ui/functions.d.ts +0 -2
- package/cli/ui/functions.js +0 -130
- package/cli/ui/header.d.ts +0 -5
- package/cli/ui/header.js +0 -16
- package/cli/ui/stack.d.ts +0 -1
- package/cli/ui/stack.js +0 -6
- package/config.d.ts +0 -56
- package/config.js +0 -244
- package/constructs/Api.d.ts +0 -814
- package/constructs/Api.js +0 -743
- package/constructs/ApiGatewayV1Api.d.ts +0 -642
- package/constructs/ApiGatewayV1Api.js +0 -767
- package/constructs/App.d.ts +0 -168
- package/constructs/App.js +0 -493
- package/constructs/AppSyncApi.d.ts +0 -550
- package/constructs/AppSyncApi.js +0 -493
- package/constructs/AstroSite.d.ts +0 -39
- package/constructs/AstroSite.js +0 -78
- package/constructs/AstroSite.tsdoc.d.ts +0 -2
- package/constructs/AstroSite.tsdoc.js +0 -2
- package/constructs/Auth.d.ts +0 -100
- package/constructs/Auth.js +0 -177
- package/constructs/BaseSite.d.ts +0 -29
- package/constructs/BaseSite.js +0 -43
- package/constructs/Bucket.d.ts +0 -364
- package/constructs/Bucket.js +0 -327
- package/constructs/Cognito.d.ts +0 -232
- package/constructs/Cognito.js +0 -370
- package/constructs/Config.d.ts +0 -3
- package/constructs/Config.js +0 -3
- package/constructs/Construct.d.ts +0 -23
- package/constructs/Construct.js +0 -46
- package/constructs/Cron.d.ts +0 -164
- package/constructs/Cron.js +0 -114
- package/constructs/Distribution.d.ts +0 -143
- package/constructs/Distribution.js +0 -260
- package/constructs/EdgeFunction.d.ts +0 -49
- package/constructs/EdgeFunction.js +0 -442
- package/constructs/EventBus.d.ts +0 -444
- package/constructs/EventBus.js +0 -440
- package/constructs/Function.d.ts +0 -690
- package/constructs/Function.js +0 -583
- package/constructs/FunctionalStack.d.ts +0 -13
- package/constructs/FunctionalStack.js +0 -62
- package/constructs/Job.d.ts +0 -337
- package/constructs/Job.js +0 -404
- package/constructs/KinesisStream.d.ts +0 -224
- package/constructs/KinesisStream.js +0 -207
- package/constructs/Metadata.d.ts +0 -60
- package/constructs/Metadata.js +0 -1
- package/constructs/NextjsSite.d.ts +0 -104
- package/constructs/NextjsSite.js +0 -308
- package/constructs/Parameter.d.ts +0 -37
- package/constructs/Parameter.js +0 -53
- package/constructs/Queue.d.ts +0 -194
- package/constructs/Queue.js +0 -204
- package/constructs/RDS.d.ts +0 -221
- package/constructs/RDS.js +0 -363
- package/constructs/RemixSite.d.ts +0 -42
- package/constructs/RemixSite.js +0 -158
- package/constructs/RemixSite.tsdoc.d.ts +0 -2
- package/constructs/RemixSite.tsdoc.js +0 -2
- package/constructs/Script.d.ts +0 -160
- package/constructs/Script.js +0 -179
- package/constructs/Secret.d.ts +0 -30
- package/constructs/Secret.js +0 -59
- package/constructs/Service.d.ts +0 -487
- package/constructs/Service.js +0 -655
- package/constructs/SolidStartSite.d.ts +0 -37
- package/constructs/SolidStartSite.js +0 -66
- package/constructs/SolidStartSite.tsdoc.d.ts +0 -2
- package/constructs/SolidStartSite.tsdoc.js +0 -2
- package/constructs/SsrFunction.d.ts +0 -60
- package/constructs/SsrFunction.js +0 -226
- package/constructs/SsrSite.d.ts +0 -407
- package/constructs/SsrSite.js +0 -850
- package/constructs/Stack.d.ts +0 -127
- package/constructs/Stack.js +0 -243
- package/constructs/StaticSite.d.ts +0 -348
- package/constructs/StaticSite.js +0 -468
- package/constructs/SvelteKitSite.d.ts +0 -40
- package/constructs/SvelteKitSite.js +0 -106
- package/constructs/SvelteKitSite.tsdoc.d.ts +0 -2
- package/constructs/SvelteKitSite.tsdoc.js +0 -2
- package/constructs/Table.d.ts +0 -410
- package/constructs/Table.js +0 -425
- package/constructs/Topic.d.ts +0 -257
- package/constructs/Topic.js +0 -273
- package/constructs/WebSocketApi.d.ts +0 -355
- package/constructs/WebSocketApi.js +0 -404
- package/constructs/cdk/HttpAwsIntegration.d.ts +0 -32
- package/constructs/cdk/HttpAwsIntegration.js +0 -24
- package/constructs/cdk/certificate-base.d.ts +0 -18
- package/constructs/cdk/certificate-base.js +0 -26
- package/constructs/cdk/dns-validated-certificate.d.ts +0 -77
- package/constructs/cdk/dns-validated-certificate.js +0 -125
- package/constructs/cdk/website-redirect.d.ts +0 -53
- package/constructs/cdk/website-redirect.js +0 -77
- package/constructs/context.d.ts +0 -3
- package/constructs/context.js +0 -27
- package/constructs/deferred_task.d.ts +0 -6
- package/constructs/deferred_task.js +0 -45
- package/constructs/deprecated/NextjsSite.d.ts +0 -309
- package/constructs/deprecated/NextjsSite.js +0 -1074
- package/constructs/deprecated/cross-region-helper.d.ts +0 -7
- package/constructs/deprecated/cross-region-helper.js +0 -152
- package/constructs/deprecated/index.d.ts +0 -1
- package/constructs/deprecated/index.js +0 -1
- package/constructs/future/Auth.d.ts +0 -80
- package/constructs/future/Auth.js +0 -122
- package/constructs/future/index.d.ts +0 -1
- package/constructs/future/index.js +0 -1
- package/constructs/index.d.ts +0 -32
- package/constructs/index.js +0 -32
- package/constructs/static-file-list.d.ts +0 -1
- package/constructs/static-file-list.js +0 -51
- package/constructs/util/apiGatewayV1AccessLog.d.ts +0 -15
- package/constructs/util/apiGatewayV1AccessLog.js +0 -76
- package/constructs/util/apiGatewayV2AccessLog.d.ts +0 -10
- package/constructs/util/apiGatewayV2AccessLog.js +0 -107
- package/constructs/util/apiGatewayV2Cors.d.ts +0 -67
- package/constructs/util/apiGatewayV2Cors.js +0 -21
- package/constructs/util/apiGatewayV2Domain.d.ts +0 -47
- package/constructs/util/apiGatewayV2Domain.js +0 -208
- package/constructs/util/appSyncApiDomain.d.ts +0 -41
- package/constructs/util/appSyncApiDomain.js +0 -176
- package/constructs/util/builder.d.ts +0 -3
- package/constructs/util/builder.js +0 -9
- package/constructs/util/duration.d.ts +0 -3
- package/constructs/util/duration.js +0 -19
- package/constructs/util/functionBinding.d.ts +0 -31
- package/constructs/util/functionBinding.js +0 -104
- package/constructs/util/functionUrlCors.d.ts +0 -67
- package/constructs/util/functionUrlCors.js +0 -23
- package/constructs/util/permission.d.ts +0 -8
- package/constructs/util/permission.js +0 -228
- package/constructs/util/size.d.ts +0 -3
- package/constructs/util/size.js +0 -12
- package/constructs/util/warning.d.ts +0 -11
- package/constructs/util/warning.js +0 -21
- package/context/context.d.ts +0 -13
- package/context/context.js +0 -69
- package/context/context2.d.ts +0 -16
- package/context/context2.js +0 -108
- package/context/handler.d.ts +0 -25
- package/context/handler.js +0 -21
- package/context/index.d.ts +0 -2
- package/context/index.js +0 -2
- package/credentials.d.ts +0 -9
- package/credentials.js +0 -145
- package/error.d.ts +0 -6
- package/error.js +0 -10
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/iot.d.ts +0 -6
- package/iot.js +0 -163
- package/logger.d.ts +0 -3
- package/logger.js +0 -32
- package/node/actor/index.d.ts +0 -29
- package/node/actor/index.js +0 -17
- package/node/api/index.d.ts +0 -64
- package/node/api/index.js +0 -179
- package/node/auth/adapter/adapter.d.ts +0 -3
- package/node/auth/adapter/adapter.js +0 -3
- package/node/auth/adapter/facebook.d.ts +0 -2
- package/node/auth/adapter/facebook.js +0 -26
- package/node/auth/adapter/github.d.ts +0 -2
- package/node/auth/adapter/github.js +0 -21
- package/node/auth/adapter/google.d.ts +0 -9
- package/node/auth/adapter/google.js +0 -18
- package/node/auth/adapter/link.d.ts +0 -8
- package/node/auth/adapter/link.js +0 -39
- package/node/auth/adapter/oauth.d.ts +0 -25
- package/node/auth/adapter/oauth.js +0 -52
- package/node/auth/adapter/oidc.d.ts +0 -17
- package/node/auth/adapter/oidc.js +0 -50
- package/node/auth/adapter/twitch.d.ts +0 -2
- package/node/auth/adapter/twitch.js +0 -11
- package/node/auth/auth.d.ts +0 -24
- package/node/auth/auth.js +0 -74
- package/node/auth/index.d.ts +0 -13
- package/node/auth/index.js +0 -12
- package/node/auth/session.d.ts +0 -76
- package/node/auth/session.js +0 -121
- package/node/bucket/index.d.ts +0 -3
- package/node/bucket/index.js +0 -2
- package/node/config/index.d.ts +0 -13
- package/node/config/index.js +0 -22
- package/node/event-bus/index.d.ts +0 -51
- package/node/event-bus/index.js +0 -76
- package/node/function/index.d.ts +0 -3
- package/node/function/index.js +0 -3
- package/node/future/auth/adapter/adapter.d.ts +0 -10
- package/node/future/auth/adapter/adapter.js +0 -1
- package/node/future/auth/adapter/code.d.ts +0 -17
- package/node/future/auth/adapter/code.js +0 -68
- package/node/future/auth/adapter/facebook.d.ts +0 -16
- package/node/future/auth/adapter/facebook.js +0 -27
- package/node/future/auth/adapter/github.d.ts +0 -23
- package/node/future/auth/adapter/github.js +0 -23
- package/node/future/auth/adapter/google.d.ts +0 -28
- package/node/future/auth/adapter/google.js +0 -22
- package/node/future/auth/adapter/link.d.ts +0 -13
- package/node/future/auth/adapter/link.js +0 -47
- package/node/future/auth/adapter/microsoft.d.ts +0 -22
- package/node/future/auth/adapter/microsoft.js +0 -16
- package/node/future/auth/adapter/oauth.d.ts +0 -41
- package/node/future/auth/adapter/oauth.js +0 -67
- package/node/future/auth/adapter/oidc.d.ts +0 -30
- package/node/future/auth/adapter/oidc.js +0 -63
- package/node/future/auth/adapter/spotify.d.ts +0 -23
- package/node/future/auth/adapter/spotify.js +0 -22
- package/node/future/auth/encryption.d.ts +0 -2
- package/node/future/auth/encryption.js +0 -30
- package/node/future/auth/handler.d.ts +0 -46
- package/node/future/auth/handler.js +0 -280
- package/node/future/auth/index.d.ts +0 -17
- package/node/future/auth/index.js +0 -15
- package/node/future/auth/session.d.ts +0 -71
- package/node/future/auth/session.js +0 -146
- package/node/graphql/index.d.ts +0 -15
- package/node/graphql/index.js +0 -32
- package/node/job/index.d.ts +0 -37
- package/node/job/index.js +0 -64
- package/node/kinesis-stream/index.d.ts +0 -3
- package/node/kinesis-stream/index.js +0 -3
- package/node/queue/index.d.ts +0 -3
- package/node/queue/index.js +0 -2
- package/node/rds/index.d.ts +0 -3
- package/node/rds/index.js +0 -2
- package/node/service/index.d.ts +0 -3
- package/node/service/index.js +0 -4
- package/node/site/index.d.ts +0 -18
- package/node/site/index.js +0 -18
- package/node/table/index.d.ts +0 -3
- package/node/table/index.js +0 -4
- package/node/topic/index.d.ts +0 -3
- package/node/topic/index.js +0 -4
- package/node/util/index.d.ts +0 -2
- package/node/util/index.js +0 -196
- package/node/util/loader.d.ts +0 -2
- package/node/util/loader.js +0 -51
- package/node/websocket-api/index.d.ts +0 -23
- package/node/websocket-api/index.js +0 -48
- package/pothos.d.ts +0 -7
- package/pothos.js +0 -160
- package/project.d.ts +0 -75
- package/project.js +0 -188
- package/runtime/handlers/container.d.ts +0 -2
- package/runtime/handlers/container.js +0 -263
- package/runtime/handlers/dotnet.d.ts +0 -2
- package/runtime/handlers/dotnet.js +0 -115
- package/runtime/handlers/go.d.ts +0 -2
- package/runtime/handlers/go.js +0 -126
- package/runtime/handlers/java.d.ts +0 -2
- package/runtime/handlers/java.js +0 -103
- package/runtime/handlers/node.d.ts +0 -2
- package/runtime/handlers/node.js +0 -269
- package/runtime/handlers/python.d.ts +0 -2
- package/runtime/handlers/python.js +0 -141
- package/runtime/handlers/pythonBundling.d.ts +0 -82
- package/runtime/handlers/pythonBundling.js +0 -80
- package/runtime/handlers/rust.d.ts +0 -2
- package/runtime/handlers/rust.js +0 -110
- package/runtime/handlers.d.ts +0 -74
- package/runtime/handlers.js +0 -151
- package/runtime/iot.d.ts +0 -1
- package/runtime/iot.js +0 -17
- package/runtime/runtime.d.ts +0 -32
- package/runtime/runtime.js +0 -1
- package/runtime/server.d.ts +0 -6
- package/runtime/server.js +0 -150
- package/runtime/workers.d.ts +0 -37
- package/runtime/workers.js +0 -85
- package/stacks/app-metadata.d.ts +0 -7
- package/stacks/app-metadata.js +0 -75
- package/stacks/assembly.d.ts +0 -1
- package/stacks/assembly.js +0 -4
- package/stacks/build.d.ts +0 -9
- package/stacks/build.js +0 -110
- package/stacks/deploy.d.ts +0 -9
- package/stacks/deploy.js +0 -240
- package/stacks/diff.d.ts +0 -8
- package/stacks/diff.js +0 -62
- package/stacks/index.d.ts +0 -10
- package/stacks/index.js +0 -10
- package/stacks/metadata.d.ts +0 -11
- package/stacks/metadata.js +0 -83
- package/stacks/monitor.d.ts +0 -32
- package/stacks/monitor.js +0 -151
- package/stacks/remove.d.ts +0 -8
- package/stacks/remove.js +0 -76
- package/stacks/synth.d.ts +0 -12
- package/stacks/synth.js +0 -94
- package/support/base-site-archiver.mjs +0 -99
- package/support/base-site-custom-resource/s3-handler.py +0 -195
- package/support/base-site-custom-resource/s3-upload.py +0 -89
- package/support/bootstrap-metadata-function/index.mjs +0 -58011
- package/support/bridge/Dockerfile +0 -3
- package/support/bridge/bridge.mjs +0 -146
- package/support/certificate-requestor/index.js +0 -549
- package/support/custom-resources/index.mjs +0 -180627
- package/support/dotnet31-bootstrap/Program.cs +0 -17
- package/support/dotnet31-bootstrap/dotnet-bootstrap.csproj +0 -12
- package/support/dotnet31-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
- package/support/dotnet31-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
- package/support/dotnet31-bootstrap/release/System.Runtime.CompilerServices.Unsafe.dll +0 -0
- package/support/dotnet31-bootstrap/release/System.Text.Encodings.Web.dll +0 -0
- package/support/dotnet31-bootstrap/release/System.Text.Json.dll +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.deps.json +0 -230
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.dll +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.pdb +0 -0
- package/support/dotnet31-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +0 -9
- package/support/dotnet6-bootstrap/Program.cs +0 -17
- package/support/dotnet6-bootstrap/dotnet-bootstrap.csproj +0 -12
- package/support/dotnet6-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
- package/support/dotnet6-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.deps.json +0 -59
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.dll +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.pdb +0 -0
- package/support/dotnet6-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +0 -12
- package/support/edge-function/edge-lambda-version.mjs +0 -3
- package/support/edge-function/edge-lambda.mjs +0 -3
- package/support/edge-function/s3-bucket.mjs +0 -3
- package/support/event-bus-retrier/index.mjs +0 -75
- package/support/java-runtime/install.sh +0 -25
- package/support/java-runtime/pom.xml +0 -39
- package/support/java-runtime/release/aws-lambda-java-core-1.2.0.jar +0 -0
- package/support/java-runtime/release/aws-lambda-java-runtime-interface-client-1.1.0.jar +0 -0
- package/support/java-runtime/release/aws-lambda-java-serialization-1.0.0.jar +0 -0
- package/support/job-manager/index.mjs +0 -57679
- package/support/nixpacks/Dockerfile +0 -6
- package/support/nodejs-runtime/index.mjs +0 -169
- package/support/python-runtime/Dockerfile +0 -9
- package/support/python-runtime/Dockerfile.custom +0 -21
- package/support/python-runtime/Dockerfile.dependencies +0 -26
- package/support/python-runtime/runtime.py +0 -127
- package/support/rds-migrator/index.mjs +0 -49
- package/support/remix-site-function/edge-server.js +0 -161
- package/support/remix-site-function/polyfill.js +0 -24
- package/support/remix-site-function/regional-server.js +0 -164
- package/support/script-function/index.mjs +0 -48760
- package/support/service-dev-function/index.js +0 -1
- package/support/signing-function/index.mjs +0 -3769
- package/support/sls-nextjs-site-build-helper/build.cjs +0 -91
- package/support/sls-nextjs-site-build-helper/index-wrapper.js +0 -19
- package/support/sls-nextjs-site-function-code-replacer/lambda-code-updater.py +0 -156
- package/support/sls-nextjs-site-stub/index.html +0 -99
- package/support/ssr-site-function-archiver.mjs +0 -96
- package/support/ssr-site-function-stub/index.js +0 -5
- package/support/ssr-warmer/index.mjs +0 -34235
- package/util/error.d.ts +0 -3
- package/util/error.js +0 -6
- package/util/fs.d.ts +0 -4
- package/util/fs.js +0 -46
- package/util/lazy.d.ts +0 -1
- package/util/lazy.js +0 -11
- package/util/module.d.ts +0 -1
- package/util/module.js +0 -5
- package/util/process.d.ts +0 -2
- package/util/process.js +0 -3
- package/watcher.d.ts +0 -14
- package/watcher.js +0 -35
package/stacks/deploy.js
DELETED
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { useBus } from "../bus.js";
|
|
2
|
-
import { useProject } from "../project.js";
|
|
3
|
-
import { useAWSClient, useAWSProvider } from "../credentials.js";
|
|
4
|
-
import { Logger } from "../logger.js";
|
|
5
|
-
import { filterOutputs, isFailed, monitor, } from "./monitor.js";
|
|
6
|
-
import { VisibleError } from "../error.js";
|
|
7
|
-
export async function publishAssets(stacks) {
|
|
8
|
-
Logger.debug("Publishing assets");
|
|
9
|
-
const provider = await useAWSProvider();
|
|
10
|
-
const { publishDeployAssets } = await import("../cdk/deployments-wrapper.js");
|
|
11
|
-
const results = {};
|
|
12
|
-
for (const stack of stacks) {
|
|
13
|
-
const result = await publishDeployAssets(provider, {
|
|
14
|
-
stack: stack,
|
|
15
|
-
quiet: false,
|
|
16
|
-
deploymentMethod: {
|
|
17
|
-
method: "direct",
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
results[stack.stackName] = result;
|
|
21
|
-
}
|
|
22
|
-
return results;
|
|
23
|
-
}
|
|
24
|
-
export async function deployMany(stacks) {
|
|
25
|
-
if (stacks.length === 0) {
|
|
26
|
-
throw new VisibleError("No stacks to deploy");
|
|
27
|
-
}
|
|
28
|
-
Logger.debug("Deploying stacks", stacks.map((s) => s.stackName));
|
|
29
|
-
const { CloudFormationStackArtifact } = await import("aws-cdk-lib/cx-api");
|
|
30
|
-
await useAWSProvider();
|
|
31
|
-
const bus = useBus();
|
|
32
|
-
const complete = new Set();
|
|
33
|
-
const todo = new Set(stacks.map((s) => s.id));
|
|
34
|
-
const results = {};
|
|
35
|
-
return new Promise((resolve) => {
|
|
36
|
-
async function trigger() {
|
|
37
|
-
for (const stack of stacks) {
|
|
38
|
-
if (!todo.has(stack.id))
|
|
39
|
-
continue;
|
|
40
|
-
Logger.debug("Checking if", stack.id, "is ready to deploy");
|
|
41
|
-
if (stack.dependencies.some((dep) => dep instanceof CloudFormationStackArtifact &&
|
|
42
|
-
!complete.has(dep.id) &&
|
|
43
|
-
stacks.some((s) => s.id === dep.id)))
|
|
44
|
-
continue;
|
|
45
|
-
deploy(stack).then((result) => {
|
|
46
|
-
results[stack.id] = result;
|
|
47
|
-
complete.add(stack.id);
|
|
48
|
-
if (isFailed(result.status))
|
|
49
|
-
stacks.forEach((s) => {
|
|
50
|
-
if (todo.delete(s.stackName)) {
|
|
51
|
-
complete.add(s.stackName);
|
|
52
|
-
results[s.id] = {
|
|
53
|
-
status: "DEPENDENCY_FAILED",
|
|
54
|
-
outputs: {},
|
|
55
|
-
errors: {},
|
|
56
|
-
};
|
|
57
|
-
bus.publish("stack.status", {
|
|
58
|
-
stackID: s.id,
|
|
59
|
-
status: "DEPENDENCY_FAILED",
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
if (complete.size === stacks.length) {
|
|
64
|
-
resolve(results);
|
|
65
|
-
}
|
|
66
|
-
trigger();
|
|
67
|
-
});
|
|
68
|
-
todo.delete(stack.id);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
trigger();
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
export async function deploy(stack) {
|
|
75
|
-
const bus = useBus();
|
|
76
|
-
const { cdk } = useProject().config;
|
|
77
|
-
Logger.debug("Deploying stack", stack.id);
|
|
78
|
-
const provider = await useAWSProvider();
|
|
79
|
-
const { Deployments } = await import("../cdk/deployments.js");
|
|
80
|
-
const deployment = new Deployments({ sdkProvider: provider });
|
|
81
|
-
const stackTags = Object.entries(stack.tags ?? {}).map(([Key, Value]) => ({
|
|
82
|
-
Key,
|
|
83
|
-
Value,
|
|
84
|
-
}));
|
|
85
|
-
try {
|
|
86
|
-
await addInUseExports(stack);
|
|
87
|
-
bus.publish("stack.status", {
|
|
88
|
-
stackID: stack.stackName,
|
|
89
|
-
status: "PUBLISH_ASSETS_IN_PROGRESS",
|
|
90
|
-
});
|
|
91
|
-
const result = await deployment.deployStack({
|
|
92
|
-
stack: stack,
|
|
93
|
-
quiet: true,
|
|
94
|
-
tags: stackTags,
|
|
95
|
-
deploymentMethod: {
|
|
96
|
-
method: "direct",
|
|
97
|
-
},
|
|
98
|
-
toolkitStackName: cdk?.toolkitStackName,
|
|
99
|
-
});
|
|
100
|
-
if (result?.noOp) {
|
|
101
|
-
bus.publish("stack.status", {
|
|
102
|
-
stackID: stack.stackName,
|
|
103
|
-
status: "SKIPPED",
|
|
104
|
-
});
|
|
105
|
-
return {
|
|
106
|
-
errors: {},
|
|
107
|
-
outputs: filterOutputs(result.outputs),
|
|
108
|
-
status: "SKIPPED",
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
bus.publish("stack.updated", {
|
|
112
|
-
stackID: stack.stackName,
|
|
113
|
-
});
|
|
114
|
-
return monitor(stack.stackName);
|
|
115
|
-
}
|
|
116
|
-
catch (ex) {
|
|
117
|
-
Logger.debug("Failed to deploy stack", stack.id, ex);
|
|
118
|
-
if (ex.message === "No updates are to be performed.") {
|
|
119
|
-
return monitor(stack.stackName);
|
|
120
|
-
}
|
|
121
|
-
bus.publish("stack.status", {
|
|
122
|
-
stackID: stack.stackName,
|
|
123
|
-
status: "UPDATE_FAILED",
|
|
124
|
-
});
|
|
125
|
-
return {
|
|
126
|
-
errors: {
|
|
127
|
-
stack: ex.message,
|
|
128
|
-
},
|
|
129
|
-
outputs: {},
|
|
130
|
-
status: "UPDATE_FAILED",
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
async function addInUseExports(stack) {
|
|
135
|
-
// Get old outputs
|
|
136
|
-
const oldOutputs = await getCloudFormationStackOutputs(stack);
|
|
137
|
-
if (!oldOutputs)
|
|
138
|
-
return;
|
|
139
|
-
// Get new exports
|
|
140
|
-
// note: that we only want to handle outputs exported by CDK.
|
|
141
|
-
// ie.
|
|
142
|
-
// "Outputs": {
|
|
143
|
-
// "ExportsOutputRefauthUserPoolA78B038B8D9965B5": {
|
|
144
|
-
// "Value": {
|
|
145
|
-
// "Ref": "authUserPoolA78B038B"
|
|
146
|
-
// },
|
|
147
|
-
// "Export": {
|
|
148
|
-
// "Name": "frank-acme-auth:ExportsOutputRefauthUserPoolA78B038B8D9965B5"
|
|
149
|
-
// }
|
|
150
|
-
// },
|
|
151
|
-
const newTemplate = JSON.parse(await getLocalTemplate(stack));
|
|
152
|
-
const newOutputs = newTemplate.Outputs || {};
|
|
153
|
-
const newExportNames = Object.keys(newOutputs)
|
|
154
|
-
.filter((outputKey) => outputKey.startsWith("ExportsOutput"))
|
|
155
|
-
.filter((outputKey) => newOutputs[outputKey].Export)
|
|
156
|
-
.map((outputKey) => newOutputs[outputKey].Export.Name);
|
|
157
|
-
// Add missing exports
|
|
158
|
-
// ie.
|
|
159
|
-
// Outputs [{
|
|
160
|
-
// OutputKey: (String)
|
|
161
|
-
// OutputValue: (String)
|
|
162
|
-
// Description: (String)
|
|
163
|
-
// ExportName: (String)
|
|
164
|
-
// }]
|
|
165
|
-
let isDirty = false;
|
|
166
|
-
await Promise.all(oldOutputs
|
|
167
|
-
.filter((output) => output.OutputKey?.startsWith("ExportsOutput"))
|
|
168
|
-
.filter((output) => output.ExportName)
|
|
169
|
-
// filter exports not in the new template (ie. CloudFormation will be removing)
|
|
170
|
-
.filter((output) => !newExportNames.includes(output.ExportName))
|
|
171
|
-
// filter the exports still in-use by other stacks
|
|
172
|
-
.map(async (output) => {
|
|
173
|
-
const imports = await listImports(output.ExportName);
|
|
174
|
-
// update template
|
|
175
|
-
if (imports.length > 0) {
|
|
176
|
-
Logger.debug(`deploy stack: addInUseExports: export ${output.ExportName} used in ${imports.join(", ")}`);
|
|
177
|
-
newTemplate.Outputs = newTemplate.Outputs || {};
|
|
178
|
-
newTemplate.Outputs[output.OutputKey] = {
|
|
179
|
-
Description: `Output added by SST b/c exported value still used in ${imports.join(", ")}`,
|
|
180
|
-
Value: output.OutputValue,
|
|
181
|
-
Export: {
|
|
182
|
-
Name: output.ExportName,
|
|
183
|
-
},
|
|
184
|
-
};
|
|
185
|
-
isDirty = true;
|
|
186
|
-
}
|
|
187
|
-
}));
|
|
188
|
-
// Save new template
|
|
189
|
-
if (isDirty) {
|
|
190
|
-
await saveLocalTemplate(stack, JSON.stringify(newTemplate, null, 2));
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
async function getCloudFormationStackOutputs(stack) {
|
|
194
|
-
const { CloudFormationClient, DescribeStacksCommand } = await import("@aws-sdk/client-cloudformation");
|
|
195
|
-
const client = useAWSClient(CloudFormationClient);
|
|
196
|
-
try {
|
|
197
|
-
const { Stacks: stacks } = await client.send(new DescribeStacksCommand({
|
|
198
|
-
StackName: stack.id,
|
|
199
|
-
}));
|
|
200
|
-
if (!stacks || stacks.length === 0)
|
|
201
|
-
return;
|
|
202
|
-
return stacks[0].Outputs || [];
|
|
203
|
-
}
|
|
204
|
-
catch (e) {
|
|
205
|
-
if (e.name === "ValidationError" &&
|
|
206
|
-
e.message.includes("Stack with id") &&
|
|
207
|
-
e.message.includes("does not exist")) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
throw e;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
async function listImports(exportName) {
|
|
216
|
-
const { CloudFormationClient, ListImportsCommand } = await import("@aws-sdk/client-cloudformation");
|
|
217
|
-
const client = useAWSClient(CloudFormationClient);
|
|
218
|
-
try {
|
|
219
|
-
const ret = await client.send(new ListImportsCommand({
|
|
220
|
-
ExportName: exportName,
|
|
221
|
-
}));
|
|
222
|
-
return ret.Imports || [];
|
|
223
|
-
}
|
|
224
|
-
catch (e) {
|
|
225
|
-
if (e.name === "ValidationError" &&
|
|
226
|
-
e.message.includes("is not imported by any stack")) {
|
|
227
|
-
return [];
|
|
228
|
-
}
|
|
229
|
-
throw e;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
async function getLocalTemplate(stack) {
|
|
233
|
-
const fs = await import("fs/promises");
|
|
234
|
-
const fileContent = await fs.readFile(stack.templateFullPath);
|
|
235
|
-
return fileContent.toString();
|
|
236
|
-
}
|
|
237
|
-
async function saveLocalTemplate(stack, content) {
|
|
238
|
-
const fs = await import("fs/promises");
|
|
239
|
-
await fs.writeFile(stack.templateFullPath, content);
|
|
240
|
-
}
|
package/stacks/diff.d.ts
DELETED
package/stacks/diff.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
export async function diff(stack, oldTemplate) {
|
|
2
|
-
const { diffTemplate, formatDifferences, TemplateDiff } = await import("@aws-cdk/cloudformation-diff");
|
|
3
|
-
// Generate diff
|
|
4
|
-
const diff = diffTemplate(oldTemplate, stack.template);
|
|
5
|
-
if (diff.isEmpty) {
|
|
6
|
-
return { count: 0 };
|
|
7
|
-
}
|
|
8
|
-
// Only display resource and output changes
|
|
9
|
-
// @ts-ignore
|
|
10
|
-
diff.iamChanges = { hasChanges: false };
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
diff.securityGroupChanges = { hasChanges: false };
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
diff.awsTemplateFormatVersion = false;
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
diff.transform = false;
|
|
17
|
-
// @ts-ignore
|
|
18
|
-
diff.description = false;
|
|
19
|
-
// @ts-ignore
|
|
20
|
-
diff.parameters = { differenceCount: 0 };
|
|
21
|
-
// @ts-ignore
|
|
22
|
-
diff.metadata = { differenceCount: 0 };
|
|
23
|
-
// @ts-ignore
|
|
24
|
-
diff.mappings = { differenceCount: 0 };
|
|
25
|
-
// @ts-ignore
|
|
26
|
-
diff.conditions = { differenceCount: 0 };
|
|
27
|
-
// @ts-ignore
|
|
28
|
-
diff.unknown = { differenceCount: 0 };
|
|
29
|
-
// Filter out SST internal diffs
|
|
30
|
-
// @ts-ignore
|
|
31
|
-
delete diff.outputs.diffs?.["SSTMetadata"];
|
|
32
|
-
// Format diff
|
|
33
|
-
const output = [];
|
|
34
|
-
const stream = {
|
|
35
|
-
write(chunk) {
|
|
36
|
-
output.push(` ${chunk}`);
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
const pathMap = await buildLogicalToPathMap(stack);
|
|
40
|
-
formatDifferences(stream, diff, pathMap);
|
|
41
|
-
// Remove trailing newline
|
|
42
|
-
while (true) {
|
|
43
|
-
if (output[output.length - 1]?.match(/^\s*$/)) {
|
|
44
|
-
output.pop();
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
break;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
count: diff.outputs.differenceCount + diff.resources.differenceCount,
|
|
52
|
-
diff: output.join(""),
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
async function buildLogicalToPathMap(stack) {
|
|
56
|
-
const { ArtifactMetadataEntryType } = await import("@aws-cdk/cloud-assembly-schema");
|
|
57
|
-
const map = {};
|
|
58
|
-
for (const md of stack.findMetadataByType(ArtifactMetadataEntryType.LOGICAL_ID)) {
|
|
59
|
-
map[md.data] = md.path;
|
|
60
|
-
}
|
|
61
|
-
return map;
|
|
62
|
-
}
|
package/stacks/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from "./app-metadata.js";
|
|
2
|
-
export * from "./assembly.js";
|
|
3
|
-
export * from "./build.js";
|
|
4
|
-
export * from "./deploy.js";
|
|
5
|
-
export * from "./diff.js";
|
|
6
|
-
export * from "./metadata.js";
|
|
7
|
-
export * from "./synth.js";
|
|
8
|
-
export * from "./monitor.js";
|
|
9
|
-
export * from "./remove.js";
|
|
10
|
-
export * as Stacks from "./index.js";
|
package/stacks/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from "./app-metadata.js";
|
|
2
|
-
export * from "./assembly.js";
|
|
3
|
-
export * from "./build.js";
|
|
4
|
-
export * from "./deploy.js";
|
|
5
|
-
export * from "./diff.js";
|
|
6
|
-
export * from "./metadata.js";
|
|
7
|
-
export * from "./synth.js";
|
|
8
|
-
export * from "./monitor.js";
|
|
9
|
-
export * from "./remove.js";
|
|
10
|
-
export * as Stacks from "./index.js";
|
package/stacks/metadata.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Metadata } from "../constructs/Metadata.js";
|
|
2
|
-
declare module "../bus.js" {
|
|
3
|
-
interface Events {
|
|
4
|
-
"stacks.metadata": Awaited<ReturnType<typeof metadata>>;
|
|
5
|
-
"stacks.metadata.updated": {};
|
|
6
|
-
"stacks.metadata.deleted": {};
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export declare function metadataForStack(stack: String): Promise<Metadata[] | undefined>;
|
|
10
|
-
export declare function metadata(): Promise<Record<string, Metadata[]>>;
|
|
11
|
-
export declare const useMetadataCache: () => Promise<Record<string, Metadata[]>>;
|
package/stacks/metadata.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { useBootstrap } from "../bootstrap.js";
|
|
2
|
-
import { useAWSCredentials, } from "../credentials.js";
|
|
3
|
-
import { S3Client, GetObjectCommand, ListObjectsV2Command, } from "@aws-sdk/client-s3";
|
|
4
|
-
import { useCache } from "../cache.js";
|
|
5
|
-
import { useBus } from "../bus.js";
|
|
6
|
-
import { Logger } from "../logger.js";
|
|
7
|
-
import { useProject } from "../project.js";
|
|
8
|
-
import { lazy } from "../util/lazy.js";
|
|
9
|
-
export async function metadataForStack(stack) {
|
|
10
|
-
const project = useProject();
|
|
11
|
-
const [credentials, bootstrap] = await Promise.all([
|
|
12
|
-
useAWSCredentials(),
|
|
13
|
-
useBootstrap(),
|
|
14
|
-
]);
|
|
15
|
-
const s3 = new S3Client({
|
|
16
|
-
region: project.config.region,
|
|
17
|
-
credentials: credentials,
|
|
18
|
-
});
|
|
19
|
-
try {
|
|
20
|
-
const result = await s3.send(new GetObjectCommand({
|
|
21
|
-
Key: `stackMetadata/app.${project.config.name}/stage.${project.config.stage}/stack.${stack}.json`,
|
|
22
|
-
Bucket: bootstrap.bucket,
|
|
23
|
-
}));
|
|
24
|
-
const body = await result.Body.transformToString();
|
|
25
|
-
return JSON.parse(body);
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
Logger.debug(`Fetching metadata for stack ${stack} failed`, e);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
export async function metadata() {
|
|
33
|
-
Logger.debug("Fetching all metadata");
|
|
34
|
-
const project = useProject();
|
|
35
|
-
const [credentials, bootstrap] = await Promise.all([
|
|
36
|
-
useAWSCredentials(),
|
|
37
|
-
useBootstrap(),
|
|
38
|
-
]);
|
|
39
|
-
const s3 = new S3Client({
|
|
40
|
-
region: project.config.region,
|
|
41
|
-
credentials: credentials,
|
|
42
|
-
});
|
|
43
|
-
const key = `stackMetadata/app.${project.config.name}/stage.${project.config.stage}/`;
|
|
44
|
-
const list = await s3.send(new ListObjectsV2Command({
|
|
45
|
-
Prefix: key,
|
|
46
|
-
Bucket: bootstrap.bucket,
|
|
47
|
-
}));
|
|
48
|
-
const result = Object.fromEntries(await Promise.all(list.Contents?.map(async (obj) => {
|
|
49
|
-
const stackID = obj.Key?.split("/").pop();
|
|
50
|
-
const result = await s3.send(new GetObjectCommand({
|
|
51
|
-
Key: obj.Key,
|
|
52
|
-
Bucket: bootstrap.bucket,
|
|
53
|
-
}));
|
|
54
|
-
const body = await result.Body.transformToString();
|
|
55
|
-
return [stackID, JSON.parse(body)];
|
|
56
|
-
}) || []));
|
|
57
|
-
Logger.debug("Fetched metadata from", list.KeyCount, "stacks");
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
export const useMetadataCache = lazy(async () => {
|
|
61
|
-
const bus = useBus();
|
|
62
|
-
const cache = await useCache();
|
|
63
|
-
bus.subscribe("stacks.metadata.updated", async () => {
|
|
64
|
-
const data = await metadata();
|
|
65
|
-
await cache.write(`metadata.json`, JSON.stringify(data));
|
|
66
|
-
bus.publish("stacks.metadata", data);
|
|
67
|
-
});
|
|
68
|
-
bus.subscribe("stacks.metadata.deleted", async () => {
|
|
69
|
-
const data = await metadata();
|
|
70
|
-
await cache.write(`metadata.json`, JSON.stringify(data));
|
|
71
|
-
bus.publish("stacks.metadata", data);
|
|
72
|
-
});
|
|
73
|
-
while (true) {
|
|
74
|
-
try {
|
|
75
|
-
const data = await metadata();
|
|
76
|
-
bus.publish("stacks.metadata", data);
|
|
77
|
-
return data;
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
});
|
package/stacks/monitor.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { DescribeStackResourcesOutput, StackEvent } from "@aws-sdk/client-cloudformation";
|
|
2
|
-
declare module "../bus.js" {
|
|
3
|
-
interface Events {
|
|
4
|
-
"stack.updated": {
|
|
5
|
-
stackID: string;
|
|
6
|
-
};
|
|
7
|
-
"stack.status": {
|
|
8
|
-
stackID: string;
|
|
9
|
-
status: (typeof STATUSES)[number];
|
|
10
|
-
};
|
|
11
|
-
"stack.resources": {
|
|
12
|
-
stackID: string;
|
|
13
|
-
resources: DescribeStackResourcesOutput["StackResources"];
|
|
14
|
-
};
|
|
15
|
-
"stack.event": {
|
|
16
|
-
stackID: string;
|
|
17
|
-
event: StackEvent;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export declare const STATUSES: readonly ["CREATE_IN_PROGRESS", "DELETE_IN_PROGRESS", "REVIEW_IN_PROGRESS", "ROLLBACK_IN_PROGRESS", "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS", "UPDATE_IN_PROGRESS", "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS", "UPDATE_ROLLBACK_IN_PROGRESS", "PUBLISH_ASSETS_IN_PROGRESS", "CREATE_COMPLETE", "UPDATE_COMPLETE", "DELETE_COMPLETE", "SKIPPED", "CREATE_FAILED", "DELETE_FAILED", "ROLLBACK_FAILED", "ROLLBACK_COMPLETE", "UPDATE_FAILED", "UPDATE_ROLLBACK_COMPLETE", "UPDATE_ROLLBACK_FAILED", "DEPENDENCY_FAILED"];
|
|
22
|
-
export declare function isFinal(input: string): boolean;
|
|
23
|
-
export declare function isFailed(input: string): boolean;
|
|
24
|
-
export declare function isSuccess(input: string): boolean;
|
|
25
|
-
export declare function isPending(input: string): boolean;
|
|
26
|
-
export declare function monitor(stack: string): Promise<{
|
|
27
|
-
status: string;
|
|
28
|
-
outputs: Record<string, string>;
|
|
29
|
-
errors: Record<string, string>;
|
|
30
|
-
}>;
|
|
31
|
-
export declare function filterOutputs(input: Record<string, string>): Record<string, string>;
|
|
32
|
-
export type StackDeploymentResult = Awaited<ReturnType<typeof monitor>>;
|
package/stacks/monitor.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { CloudFormationClient, DescribeStackResourcesCommand, DescribeStacksCommand, DescribeStackEventsCommand, } from "@aws-sdk/client-cloudformation";
|
|
2
|
-
import { useBus } from "../bus.js";
|
|
3
|
-
import { useAWSClient } from "../credentials.js";
|
|
4
|
-
import { Logger } from "../logger.js";
|
|
5
|
-
const STATUSES_PENDING = [
|
|
6
|
-
"CREATE_IN_PROGRESS",
|
|
7
|
-
"DELETE_IN_PROGRESS",
|
|
8
|
-
"REVIEW_IN_PROGRESS",
|
|
9
|
-
"ROLLBACK_IN_PROGRESS",
|
|
10
|
-
"UPDATE_COMPLETE_CLEANUP_IN_PROGRESS",
|
|
11
|
-
"UPDATE_IN_PROGRESS",
|
|
12
|
-
"UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS",
|
|
13
|
-
"UPDATE_ROLLBACK_IN_PROGRESS",
|
|
14
|
-
"PUBLISH_ASSETS_IN_PROGRESS",
|
|
15
|
-
];
|
|
16
|
-
const STATUSES_SUCCESS = [
|
|
17
|
-
"CREATE_COMPLETE",
|
|
18
|
-
"UPDATE_COMPLETE",
|
|
19
|
-
"DELETE_COMPLETE",
|
|
20
|
-
"SKIPPED",
|
|
21
|
-
];
|
|
22
|
-
const STATUSES_FAILED = [
|
|
23
|
-
"CREATE_FAILED",
|
|
24
|
-
"DELETE_FAILED",
|
|
25
|
-
"ROLLBACK_FAILED",
|
|
26
|
-
"ROLLBACK_COMPLETE",
|
|
27
|
-
"UPDATE_FAILED",
|
|
28
|
-
"UPDATE_ROLLBACK_COMPLETE",
|
|
29
|
-
"UPDATE_ROLLBACK_FAILED",
|
|
30
|
-
"DEPENDENCY_FAILED",
|
|
31
|
-
];
|
|
32
|
-
export const STATUSES = [
|
|
33
|
-
...STATUSES_PENDING,
|
|
34
|
-
...STATUSES_SUCCESS,
|
|
35
|
-
...STATUSES_FAILED,
|
|
36
|
-
];
|
|
37
|
-
export function isFinal(input) {
|
|
38
|
-
return (STATUSES_SUCCESS.includes(input) ||
|
|
39
|
-
STATUSES_FAILED.includes(input));
|
|
40
|
-
}
|
|
41
|
-
export function isFailed(input) {
|
|
42
|
-
return STATUSES_FAILED.includes(input);
|
|
43
|
-
}
|
|
44
|
-
export function isSuccess(input) {
|
|
45
|
-
return STATUSES_SUCCESS.includes(input);
|
|
46
|
-
}
|
|
47
|
-
export function isPending(input) {
|
|
48
|
-
return STATUSES_PENDING.includes(input);
|
|
49
|
-
}
|
|
50
|
-
export async function monitor(stack) {
|
|
51
|
-
const [cfn, bus] = await Promise.all([
|
|
52
|
-
useAWSClient(CloudFormationClient),
|
|
53
|
-
useBus(),
|
|
54
|
-
]);
|
|
55
|
-
let lastStatus;
|
|
56
|
-
const errors = {};
|
|
57
|
-
let lastEvent;
|
|
58
|
-
while (true) {
|
|
59
|
-
try {
|
|
60
|
-
const [describe, resources, events] = await Promise.all([
|
|
61
|
-
cfn.send(new DescribeStacksCommand({
|
|
62
|
-
StackName: stack,
|
|
63
|
-
})),
|
|
64
|
-
cfn.send(new DescribeStackResourcesCommand({
|
|
65
|
-
StackName: stack,
|
|
66
|
-
})),
|
|
67
|
-
cfn.send(new DescribeStackEventsCommand({
|
|
68
|
-
StackName: stack,
|
|
69
|
-
})),
|
|
70
|
-
]);
|
|
71
|
-
Logger.debug("Stack description", describe);
|
|
72
|
-
if (lastEvent) {
|
|
73
|
-
const eventsReversed = [...(events.StackEvents ?? [])].reverse();
|
|
74
|
-
for (const event of eventsReversed) {
|
|
75
|
-
if (!event.Timestamp)
|
|
76
|
-
continue;
|
|
77
|
-
if (event.Timestamp.getTime() > lastEvent.getTime()) {
|
|
78
|
-
bus.publish("stack.event", {
|
|
79
|
-
event: event,
|
|
80
|
-
stackID: stack,
|
|
81
|
-
});
|
|
82
|
-
if (event.ResourceStatusReason) {
|
|
83
|
-
if (event.ResourceStatusReason.includes("Resource creation cancelled") ||
|
|
84
|
-
event.ResourceStatusReason.includes("Resource update cancelled") ||
|
|
85
|
-
event.ResourceStatusReason.includes("Resource creation Initiated") ||
|
|
86
|
-
// ie. The following resource(s) failed to update: [MyResource10A5921D].
|
|
87
|
-
event.ResourceStatusReason.startsWith("The following resource(s) failed to"))
|
|
88
|
-
continue;
|
|
89
|
-
errors[event.LogicalResourceId] = event.ResourceStatusReason;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
Logger.debug("Last event set to", lastEvent);
|
|
94
|
-
}
|
|
95
|
-
lastEvent = events.StackEvents?.at(0)?.Timestamp;
|
|
96
|
-
bus.publish("stack.resources", {
|
|
97
|
-
stackID: stack,
|
|
98
|
-
resources: resources.StackResources,
|
|
99
|
-
});
|
|
100
|
-
for (const resource of resources.StackResources || []) {
|
|
101
|
-
if (resource.ResourceStatusReason?.includes("Resource creation cancelled") ||
|
|
102
|
-
resource.ResourceStatusReason?.includes("Resource update cancelled") ||
|
|
103
|
-
resource.ResourceStatusReason?.includes("Resource creation Initiated") ||
|
|
104
|
-
// ie. The following resource(s) failed to update: [MyResource10A5921D].
|
|
105
|
-
resource.ResourceStatusReason?.startsWith("The following resource(s) failed to"))
|
|
106
|
-
continue;
|
|
107
|
-
if (resource.ResourceStatusReason)
|
|
108
|
-
errors[resource.LogicalResourceId] = resource.ResourceStatusReason;
|
|
109
|
-
}
|
|
110
|
-
const [first] = describe.Stacks || [];
|
|
111
|
-
if (first) {
|
|
112
|
-
if (lastStatus !== first.StackStatus && first.StackStatus) {
|
|
113
|
-
lastStatus = first.StackStatus;
|
|
114
|
-
bus.publish("stack.status", {
|
|
115
|
-
stackID: stack,
|
|
116
|
-
status: first.StackStatus,
|
|
117
|
-
});
|
|
118
|
-
Logger.debug(first);
|
|
119
|
-
if (isFinal(first.StackStatus)) {
|
|
120
|
-
return {
|
|
121
|
-
status: first.StackStatus,
|
|
122
|
-
outputs: pipe(first.Outputs || [], map((o) => [o.OutputKey, o.OutputValue]), Object.fromEntries, filterOutputs),
|
|
123
|
-
errors: isFailed(first.StackStatus) ? errors : {},
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch (ex) {
|
|
130
|
-
if (ex.message.includes("does not exist")) {
|
|
131
|
-
bus.publish("stack.status", {
|
|
132
|
-
stackID: stack,
|
|
133
|
-
status: "DELETE_COMPLETE",
|
|
134
|
-
});
|
|
135
|
-
return {
|
|
136
|
-
status: "DELETE_COMPLETE",
|
|
137
|
-
outputs: {},
|
|
138
|
-
errors: {},
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
throw ex;
|
|
142
|
-
}
|
|
143
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
import { map, omitBy, pipe } from "remeda";
|
|
147
|
-
export function filterOutputs(input) {
|
|
148
|
-
return pipe(input, omitBy((_, key) => {
|
|
149
|
-
return key.startsWith("Export") || key === "SSTMetadata";
|
|
150
|
-
}));
|
|
151
|
-
}
|
package/stacks/remove.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { CloudFormationStackArtifact } from "aws-cdk-lib/cx-api";
|
|
2
|
-
import { StackDeploymentResult } from "./monitor.js";
|
|
3
|
-
export declare function removeMany(stacks: CloudFormationStackArtifact[]): Promise<Record<string, {
|
|
4
|
-
status: string;
|
|
5
|
-
outputs: Record<string, string>;
|
|
6
|
-
errors: Record<string, string>;
|
|
7
|
-
}>>;
|
|
8
|
-
export declare function remove(stack: CloudFormationStackArtifact): Promise<StackDeploymentResult>;
|