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
|
@@ -1,549 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const aws = require("aws-sdk");
|
|
4
|
-
|
|
5
|
-
const defaultSleep = function (ms) {
|
|
6
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
// These are used for test purposes only
|
|
10
|
-
let defaultResponseURL;
|
|
11
|
-
let waiter;
|
|
12
|
-
let sleep = defaultSleep;
|
|
13
|
-
let random = Math.random;
|
|
14
|
-
let maxAttempts = 10;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Upload a CloudFormation response object to S3.
|
|
18
|
-
*
|
|
19
|
-
* @param {object} event the Lambda event payload received by the handler function
|
|
20
|
-
* @param {object} context the Lambda context received by the handler function
|
|
21
|
-
* @param {string} responseStatus the response status, either 'SUCCESS' or 'FAILED'
|
|
22
|
-
* @param {string} physicalResourceId CloudFormation physical resource ID
|
|
23
|
-
* @param {object} [responseData] arbitrary response data object
|
|
24
|
-
* @param {string} [reason] reason for failure, if any, to convey to the user
|
|
25
|
-
* @returns {Promise} Promise that is resolved on success, or rejected on connection error or HTTP error response
|
|
26
|
-
*/
|
|
27
|
-
let report = function (
|
|
28
|
-
event,
|
|
29
|
-
context,
|
|
30
|
-
responseStatus,
|
|
31
|
-
physicalResourceId,
|
|
32
|
-
responseData,
|
|
33
|
-
reason
|
|
34
|
-
) {
|
|
35
|
-
return new Promise((resolve, reject) => {
|
|
36
|
-
const https = require("https");
|
|
37
|
-
const { URL } = require("url");
|
|
38
|
-
|
|
39
|
-
var responseBody = JSON.stringify({
|
|
40
|
-
Status: responseStatus,
|
|
41
|
-
Reason: reason,
|
|
42
|
-
PhysicalResourceId: physicalResourceId || context.logStreamName,
|
|
43
|
-
StackId: event.StackId,
|
|
44
|
-
RequestId: event.RequestId,
|
|
45
|
-
LogicalResourceId: event.LogicalResourceId,
|
|
46
|
-
Data: responseData,
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
const parsedUrl = new URL(event.ResponseURL || defaultResponseURL);
|
|
50
|
-
const options = {
|
|
51
|
-
hostname: parsedUrl.hostname,
|
|
52
|
-
port: 443,
|
|
53
|
-
path: parsedUrl.pathname + parsedUrl.search,
|
|
54
|
-
method: "PUT",
|
|
55
|
-
headers: {
|
|
56
|
-
"Content-Type": "",
|
|
57
|
-
"Content-Length": responseBody.length,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
https
|
|
62
|
-
.request(options)
|
|
63
|
-
.on("error", reject)
|
|
64
|
-
.on("response", (res) => {
|
|
65
|
-
res.resume();
|
|
66
|
-
if (res.statusCode >= 400) {
|
|
67
|
-
reject(
|
|
68
|
-
new Error(
|
|
69
|
-
`Server returned error ${res.statusCode}: ${res.statusMessage}`
|
|
70
|
-
)
|
|
71
|
-
);
|
|
72
|
-
} else {
|
|
73
|
-
resolve();
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
.end(responseBody, "utf8");
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Adds tags to an existing certificate
|
|
82
|
-
*
|
|
83
|
-
* @param {string} certificateArn the ARN of the certificate to add tags to
|
|
84
|
-
* @param {string} region the region the certificate exists in
|
|
85
|
-
* @param {map} tags Tags to add to the requested certificate
|
|
86
|
-
*/
|
|
87
|
-
const addTags = async function (certificateArn, region, tags) {
|
|
88
|
-
const result = Array.from(Object.entries(tags)).map(([Key, Value]) => ({
|
|
89
|
-
Key,
|
|
90
|
-
Value,
|
|
91
|
-
}));
|
|
92
|
-
const acm = new aws.ACM({ region });
|
|
93
|
-
|
|
94
|
-
await acm
|
|
95
|
-
.addTagsToCertificate({
|
|
96
|
-
CertificateArn: certificateArn,
|
|
97
|
-
Tags: result,
|
|
98
|
-
})
|
|
99
|
-
.promise();
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Requests a public certificate from AWS Certificate Manager, using DNS validation.
|
|
104
|
-
* The hosted zone ID must refer to a **public** Route53-managed DNS zone that is authoritative
|
|
105
|
-
* for the suffix of the certificate's Common Name (CN). For example, if the CN is
|
|
106
|
-
* `*.example.com`, the hosted zone ID must point to a Route 53 zone authoritative
|
|
107
|
-
* for `example.com`.
|
|
108
|
-
*
|
|
109
|
-
* @param {string} requestId the CloudFormation request ID
|
|
110
|
-
* @param {string} domainName the Common Name (CN) field for the requested certificate
|
|
111
|
-
* @param {string} hostedZoneId the Route53 Hosted Zone ID
|
|
112
|
-
* @returns {string} Validated certificate ARN
|
|
113
|
-
*/
|
|
114
|
-
const requestCertificate = async function (
|
|
115
|
-
requestId,
|
|
116
|
-
domainName,
|
|
117
|
-
subjectAlternativeNames,
|
|
118
|
-
certificateTransparencyLoggingPreference,
|
|
119
|
-
hostedZoneId,
|
|
120
|
-
region,
|
|
121
|
-
route53Endpoint
|
|
122
|
-
) {
|
|
123
|
-
const crypto = require("crypto");
|
|
124
|
-
const acm = new aws.ACM({ region });
|
|
125
|
-
const route53 = route53Endpoint
|
|
126
|
-
? new aws.Route53({ endpoint: route53Endpoint })
|
|
127
|
-
: new aws.Route53();
|
|
128
|
-
if (waiter) {
|
|
129
|
-
// Used by the test suite, since waiters aren't mockable yet
|
|
130
|
-
route53.waitFor = acm.waitFor = waiter;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
console.log(`Requesting certificate for ${domainName}`);
|
|
134
|
-
|
|
135
|
-
const reqCertResponse = await acm
|
|
136
|
-
.requestCertificate({
|
|
137
|
-
DomainName: domainName,
|
|
138
|
-
SubjectAlternativeNames: subjectAlternativeNames,
|
|
139
|
-
Options: {
|
|
140
|
-
CertificateTransparencyLoggingPreference:
|
|
141
|
-
certificateTransparencyLoggingPreference,
|
|
142
|
-
},
|
|
143
|
-
IdempotencyToken: crypto
|
|
144
|
-
.createHash("sha256")
|
|
145
|
-
.update(requestId)
|
|
146
|
-
.digest("hex")
|
|
147
|
-
.slice(0, 32),
|
|
148
|
-
ValidationMethod: "DNS",
|
|
149
|
-
})
|
|
150
|
-
.promise();
|
|
151
|
-
|
|
152
|
-
console.log(`Certificate ARN: ${reqCertResponse.CertificateArn}`);
|
|
153
|
-
|
|
154
|
-
console.log("Waiting for ACM to provide DNS records for validation...");
|
|
155
|
-
|
|
156
|
-
let records = [];
|
|
157
|
-
for (let attempt = 0; attempt < maxAttempts && !records.length; attempt++) {
|
|
158
|
-
const { Certificate } = await acm
|
|
159
|
-
.describeCertificate({
|
|
160
|
-
CertificateArn: reqCertResponse.CertificateArn,
|
|
161
|
-
})
|
|
162
|
-
.promise();
|
|
163
|
-
|
|
164
|
-
records = getDomainValidationRecords(Certificate);
|
|
165
|
-
if (!records.length) {
|
|
166
|
-
// Exponential backoff with jitter based on 200ms base
|
|
167
|
-
// component of backoff fixed to ensure minimum total wait time on
|
|
168
|
-
// slow targets.
|
|
169
|
-
const base = Math.pow(2, attempt);
|
|
170
|
-
await sleep(random() * base * 50 + base * 150);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
if (!records.length) {
|
|
174
|
-
throw new Error(
|
|
175
|
-
`Response from describeCertificate did not contain DomainValidationOptions after ${maxAttempts} attempts.`
|
|
176
|
-
);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
console.log(
|
|
180
|
-
`Upserting ${records.length} DNS records into zone ${hostedZoneId}:`
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
await commitRoute53Records(route53, records, hostedZoneId);
|
|
184
|
-
|
|
185
|
-
console.log("Waiting for validation...");
|
|
186
|
-
await acm
|
|
187
|
-
.waitFor("certificateValidated", {
|
|
188
|
-
// Wait up to 9 minutes and 30 seconds
|
|
189
|
-
$waiter: {
|
|
190
|
-
delay: 30,
|
|
191
|
-
maxAttempts: 19,
|
|
192
|
-
},
|
|
193
|
-
CertificateArn: reqCertResponse.CertificateArn,
|
|
194
|
-
})
|
|
195
|
-
.promise();
|
|
196
|
-
|
|
197
|
-
return reqCertResponse.CertificateArn;
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Deletes a certificate from AWS Certificate Manager (ACM) by its ARN.
|
|
202
|
-
* If the certificate does not exist, the function will return normally.
|
|
203
|
-
*
|
|
204
|
-
* @param {string} arn The certificate ARN
|
|
205
|
-
*/
|
|
206
|
-
const deleteCertificate = async function (
|
|
207
|
-
arn,
|
|
208
|
-
region,
|
|
209
|
-
hostedZoneId,
|
|
210
|
-
route53Endpoint,
|
|
211
|
-
cleanupRecords
|
|
212
|
-
) {
|
|
213
|
-
const acm = new aws.ACM({ region });
|
|
214
|
-
const route53 = route53Endpoint
|
|
215
|
-
? new aws.Route53({ endpoint: route53Endpoint })
|
|
216
|
-
: new aws.Route53();
|
|
217
|
-
if (waiter) {
|
|
218
|
-
// Used by the test suite, since waiters aren't mockable yet
|
|
219
|
-
route53.waitFor = acm.waitFor = waiter;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
try {
|
|
223
|
-
console.log(`Waiting for certificate ${arn} to become unused`);
|
|
224
|
-
|
|
225
|
-
let inUseByResources;
|
|
226
|
-
let records = [];
|
|
227
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
228
|
-
const { Certificate } = await acm
|
|
229
|
-
.describeCertificate({
|
|
230
|
-
CertificateArn: arn,
|
|
231
|
-
})
|
|
232
|
-
.promise();
|
|
233
|
-
|
|
234
|
-
if (cleanupRecords) {
|
|
235
|
-
records = getDomainValidationRecords(Certificate);
|
|
236
|
-
}
|
|
237
|
-
inUseByResources = Certificate.InUseBy || [];
|
|
238
|
-
|
|
239
|
-
if (inUseByResources.length || !records.length) {
|
|
240
|
-
// Exponential backoff with jitter based on 200ms base
|
|
241
|
-
// component of backoff fixed to ensure minimum total wait time on
|
|
242
|
-
// slow targets.
|
|
243
|
-
const base = Math.pow(2, attempt);
|
|
244
|
-
await sleep(random() * base * 50 + base * 150);
|
|
245
|
-
} else {
|
|
246
|
-
break;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if (inUseByResources.length) {
|
|
251
|
-
throw new Error(
|
|
252
|
-
`Response from describeCertificate did not contain an empty InUseBy list after ${maxAttempts} attempts.`
|
|
253
|
-
);
|
|
254
|
-
}
|
|
255
|
-
if (cleanupRecords && !records.length) {
|
|
256
|
-
throw new Error(
|
|
257
|
-
`Response from describeCertificate did not contain DomainValidationOptions after ${maxAttempts} attempts.`
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
console.log(`Deleting certificate ${arn}`);
|
|
262
|
-
|
|
263
|
-
await acm
|
|
264
|
-
.deleteCertificate({
|
|
265
|
-
CertificateArn: arn,
|
|
266
|
-
})
|
|
267
|
-
.promise();
|
|
268
|
-
|
|
269
|
-
if (cleanupRecords) {
|
|
270
|
-
console.log(
|
|
271
|
-
`Deleting ${records.length} DNS records from zone ${hostedZoneId}:`
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
await commitRoute53Records(route53, records, hostedZoneId, "DELETE");
|
|
275
|
-
}
|
|
276
|
-
} catch (err) {
|
|
277
|
-
if (err.name !== "ResourceNotFoundException") {
|
|
278
|
-
throw err;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Retrieve the unique domain validation options as records to be upserted (or deleted) from Route53.
|
|
285
|
-
*
|
|
286
|
-
* Returns an empty array ([]) if the domain validation options is empty or the records are not yet ready.
|
|
287
|
-
*/
|
|
288
|
-
function getDomainValidationRecords(certificate) {
|
|
289
|
-
const options = certificate.DomainValidationOptions || [];
|
|
290
|
-
// Ensure all records are ready; there is (at least a theory there's) a chance of a partial response here in rare cases.
|
|
291
|
-
if (
|
|
292
|
-
options.length > 0 &&
|
|
293
|
-
options.every((opt) => opt && !!opt.ResourceRecord)
|
|
294
|
-
) {
|
|
295
|
-
// some alternative names will produce the same validation record
|
|
296
|
-
// as the main domain (eg. example.com + *.example.com)
|
|
297
|
-
// filtering duplicates to avoid errors with adding the same record
|
|
298
|
-
// to the route53 zone twice
|
|
299
|
-
const unique = options
|
|
300
|
-
.map((val) => val.ResourceRecord)
|
|
301
|
-
.reduce((acc, cur) => {
|
|
302
|
-
acc[cur.Name] = cur;
|
|
303
|
-
return acc;
|
|
304
|
-
}, {});
|
|
305
|
-
return Object.keys(unique)
|
|
306
|
-
.sort()
|
|
307
|
-
.map((key) => unique[key]);
|
|
308
|
-
}
|
|
309
|
-
return [];
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Execute Route53 ChangeResourceRecordSets for a set of records within a Hosted Zone,
|
|
314
|
-
* and wait for the records to commit. Defaults to an 'UPSERT' action.
|
|
315
|
-
*/
|
|
316
|
-
async function commitRoute53Records(
|
|
317
|
-
route53,
|
|
318
|
-
records,
|
|
319
|
-
hostedZoneId,
|
|
320
|
-
action = "UPSERT"
|
|
321
|
-
) {
|
|
322
|
-
const changeBatch = await route53
|
|
323
|
-
.changeResourceRecordSets({
|
|
324
|
-
ChangeBatch: {
|
|
325
|
-
Changes: records.map((record) => {
|
|
326
|
-
console.log(`${record.Name} ${record.Type} ${record.Value}`);
|
|
327
|
-
return {
|
|
328
|
-
Action: action,
|
|
329
|
-
ResourceRecordSet: {
|
|
330
|
-
Name: record.Name,
|
|
331
|
-
Type: record.Type,
|
|
332
|
-
TTL: 60,
|
|
333
|
-
ResourceRecords: [
|
|
334
|
-
{
|
|
335
|
-
Value: record.Value,
|
|
336
|
-
},
|
|
337
|
-
],
|
|
338
|
-
},
|
|
339
|
-
};
|
|
340
|
-
}),
|
|
341
|
-
},
|
|
342
|
-
HostedZoneId: hostedZoneId,
|
|
343
|
-
})
|
|
344
|
-
.promise();
|
|
345
|
-
|
|
346
|
-
console.log("Waiting for DNS records to commit...");
|
|
347
|
-
await route53
|
|
348
|
-
.waitFor("resourceRecordSetsChanged", {
|
|
349
|
-
// Wait up to 5 minutes
|
|
350
|
-
$waiter: {
|
|
351
|
-
delay: 30,
|
|
352
|
-
maxAttempts: 10,
|
|
353
|
-
},
|
|
354
|
-
Id: changeBatch.ChangeInfo.Id,
|
|
355
|
-
})
|
|
356
|
-
.promise();
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Determines whether an update request should request a new certificate
|
|
361
|
-
*
|
|
362
|
-
* @param {map} oldParams the previously process request parameters
|
|
363
|
-
* @param {map} newParams the current process request parameters
|
|
364
|
-
* @param {string} physicalResourceId the physicalResourceId
|
|
365
|
-
* @returns {boolean} whether or not to request a new certificate
|
|
366
|
-
*/
|
|
367
|
-
function shouldUpdate(oldParams, newParams, physicalResourceId) {
|
|
368
|
-
if (!oldParams) return true;
|
|
369
|
-
if (oldParams.DomainName !== newParams.DomainName) return true;
|
|
370
|
-
if (oldParams.SubjectAlternativeNames !== newParams.SubjectAlternativeNames)
|
|
371
|
-
return true;
|
|
372
|
-
if (
|
|
373
|
-
oldParams.CertificateTransparencyLoggingPreference !==
|
|
374
|
-
newParams.CertificateTransparencyLoggingPreference
|
|
375
|
-
)
|
|
376
|
-
return true;
|
|
377
|
-
if (oldParams.HostedZoneId !== newParams.HostedZoneId) return true;
|
|
378
|
-
if (oldParams.Region !== newParams.Region) return true;
|
|
379
|
-
if (!physicalResourceId || !physicalResourceId.startsWith("arn:"))
|
|
380
|
-
return true;
|
|
381
|
-
return false;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
/**
|
|
385
|
-
* Main handler, invoked by Lambda
|
|
386
|
-
*/
|
|
387
|
-
exports.certificateRequestHandler = async function (event, context) {
|
|
388
|
-
var responseData = {};
|
|
389
|
-
var physicalResourceId;
|
|
390
|
-
var certificateArn;
|
|
391
|
-
async function processRequest() {
|
|
392
|
-
certificateArn = await requestCertificate(
|
|
393
|
-
event.RequestId,
|
|
394
|
-
event.ResourceProperties.DomainName,
|
|
395
|
-
event.ResourceProperties.SubjectAlternativeNames,
|
|
396
|
-
event.ResourceProperties.CertificateTransparencyLoggingPreference,
|
|
397
|
-
event.ResourceProperties.HostedZoneId,
|
|
398
|
-
event.ResourceProperties.Region,
|
|
399
|
-
event.ResourceProperties.Route53Endpoint
|
|
400
|
-
);
|
|
401
|
-
responseData.Arn = physicalResourceId = certificateArn;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
try {
|
|
405
|
-
switch (event.RequestType) {
|
|
406
|
-
case "Create":
|
|
407
|
-
await processRequest();
|
|
408
|
-
if (
|
|
409
|
-
event.ResourceProperties.Tags &&
|
|
410
|
-
physicalResourceId.startsWith("arn:")
|
|
411
|
-
) {
|
|
412
|
-
await addTags(
|
|
413
|
-
physicalResourceId,
|
|
414
|
-
event.ResourceProperties.Region,
|
|
415
|
-
event.ResourceProperties.Tags
|
|
416
|
-
);
|
|
417
|
-
}
|
|
418
|
-
break;
|
|
419
|
-
case "Update":
|
|
420
|
-
if (
|
|
421
|
-
shouldUpdate(
|
|
422
|
-
event.OldResourceProperties,
|
|
423
|
-
event.ResourceProperties,
|
|
424
|
-
event.PhysicalResourceId
|
|
425
|
-
)
|
|
426
|
-
) {
|
|
427
|
-
await processRequest();
|
|
428
|
-
} else {
|
|
429
|
-
responseData.Arn = physicalResourceId = event.PhysicalResourceId;
|
|
430
|
-
}
|
|
431
|
-
if (
|
|
432
|
-
event.ResourceProperties.Tags &&
|
|
433
|
-
physicalResourceId.startsWith("arn:")
|
|
434
|
-
) {
|
|
435
|
-
await addTags(
|
|
436
|
-
physicalResourceId,
|
|
437
|
-
event.ResourceProperties.Region,
|
|
438
|
-
event.ResourceProperties.Tags
|
|
439
|
-
);
|
|
440
|
-
}
|
|
441
|
-
break;
|
|
442
|
-
case "Delete":
|
|
443
|
-
physicalResourceId = event.PhysicalResourceId;
|
|
444
|
-
const removalPolicy =
|
|
445
|
-
event.ResourceProperties.RemovalPolicy ?? "destroy";
|
|
446
|
-
// If the resource didn't create correctly, the physical resource ID won't be the
|
|
447
|
-
// certificate ARN, so don't try to delete it in that case.
|
|
448
|
-
if (
|
|
449
|
-
physicalResourceId.startsWith("arn:") &&
|
|
450
|
-
removalPolicy === "destroy"
|
|
451
|
-
) {
|
|
452
|
-
await deleteCertificate(
|
|
453
|
-
physicalResourceId,
|
|
454
|
-
event.ResourceProperties.Region,
|
|
455
|
-
event.ResourceProperties.HostedZoneId,
|
|
456
|
-
event.ResourceProperties.Route53Endpoint,
|
|
457
|
-
event.ResourceProperties.CleanupRecords === "true"
|
|
458
|
-
);
|
|
459
|
-
}
|
|
460
|
-
break;
|
|
461
|
-
default:
|
|
462
|
-
throw new Error(`Unsupported request type ${event.RequestType}`);
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
console.log(`Uploading SUCCESS response to S3...`);
|
|
466
|
-
await report(event, context, "SUCCESS", physicalResourceId, responseData);
|
|
467
|
-
console.log("Done.");
|
|
468
|
-
} catch (err) {
|
|
469
|
-
console.log(`Caught error ${err}. Uploading FAILED message to S3.`);
|
|
470
|
-
await report(
|
|
471
|
-
event,
|
|
472
|
-
context,
|
|
473
|
-
"FAILED",
|
|
474
|
-
physicalResourceId,
|
|
475
|
-
null,
|
|
476
|
-
err.message
|
|
477
|
-
);
|
|
478
|
-
}
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* @private
|
|
483
|
-
*/
|
|
484
|
-
exports.withReporter = function (reporter) {
|
|
485
|
-
report = reporter;
|
|
486
|
-
};
|
|
487
|
-
|
|
488
|
-
/**
|
|
489
|
-
* @private
|
|
490
|
-
*/
|
|
491
|
-
exports.withDefaultResponseURL = function (url) {
|
|
492
|
-
defaultResponseURL = url;
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
/**
|
|
496
|
-
* @private
|
|
497
|
-
*/
|
|
498
|
-
exports.withWaiter = function (w) {
|
|
499
|
-
waiter = w;
|
|
500
|
-
};
|
|
501
|
-
|
|
502
|
-
/**
|
|
503
|
-
* @private
|
|
504
|
-
*/
|
|
505
|
-
exports.resetWaiter = function () {
|
|
506
|
-
waiter = undefined;
|
|
507
|
-
};
|
|
508
|
-
|
|
509
|
-
/**
|
|
510
|
-
* @private
|
|
511
|
-
*/
|
|
512
|
-
exports.withSleep = function (s) {
|
|
513
|
-
sleep = s;
|
|
514
|
-
};
|
|
515
|
-
|
|
516
|
-
/**
|
|
517
|
-
* @private
|
|
518
|
-
*/
|
|
519
|
-
exports.resetSleep = function () {
|
|
520
|
-
sleep = defaultSleep;
|
|
521
|
-
};
|
|
522
|
-
|
|
523
|
-
/**
|
|
524
|
-
* @private
|
|
525
|
-
*/
|
|
526
|
-
exports.withRandom = function (r) {
|
|
527
|
-
random = r;
|
|
528
|
-
};
|
|
529
|
-
|
|
530
|
-
/**
|
|
531
|
-
* @private
|
|
532
|
-
*/
|
|
533
|
-
exports.resetRandom = function () {
|
|
534
|
-
random = Math.random;
|
|
535
|
-
};
|
|
536
|
-
|
|
537
|
-
/**
|
|
538
|
-
* @private
|
|
539
|
-
*/
|
|
540
|
-
exports.withMaxAttempts = function (ma) {
|
|
541
|
-
maxAttempts = ma;
|
|
542
|
-
};
|
|
543
|
-
|
|
544
|
-
/**
|
|
545
|
-
* @private
|
|
546
|
-
*/
|
|
547
|
-
exports.resetMaxAttempts = function () {
|
|
548
|
-
maxAttempts = 10;
|
|
549
|
-
};
|