diff --git a/.gitignore b/.gitignore index 38e5f30..6254c68 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,6 @@ *.d.ts node_modules .cdk.staging -cdk.out -dist \ No newline at end of file +cdk*.out +cdk.context.json +dist diff --git a/lib/restate-constructs/index.ts b/lib/restate-constructs/index.ts index dc9a769..37c8319 100644 --- a/lib/restate-constructs/index.ts +++ b/lib/restate-constructs/index.ts @@ -11,5 +11,6 @@ export * from "./service-deployer"; export * from "./restate-environment"; +export * from "./restate-cloud-environment"; export * from "./deployments-common"; export * from "./single-node-restate-deployment"; diff --git a/lib/restate-constructs/restate-cloud-environment.ts b/lib/restate-constructs/restate-cloud-environment.ts new file mode 100644 index 0000000..92d1a1e --- /dev/null +++ b/lib/restate-constructs/restate-cloud-environment.ts @@ -0,0 +1,101 @@ +import * as iam from "aws-cdk-lib/aws-iam"; +import * as secrets from "aws-cdk-lib/aws-secretsmanager"; +import { Construct } from "constructs"; +import { IRestateEnvironment, RestateEnvironment } from "./restate-environment"; +import { ServiceDeployer } from "./service-deployer"; + +/** + * Configuration for a Restate Cloud environment. + */ +export interface RestateCloudEnvironmentProps { + /** + * Unique id of the environment (including the `env_` prefix). + */ + readonly environmentId: EnvironmentId; + + /** + * API key with administrative permissions. Used to manage services to the environment, see {@link ServiceDeployer}. + */ + readonly apiKey: secrets.ISecret; +} + +/** + * A distinct Restate Cloud environment reference. This is a convenience utility for deploying to the + * [Restate Cloud](https://cloud.restate.dev/) hosted service. + */ +export class RestateCloudEnvironment extends Construct implements IRestateEnvironment { + readonly adminUrl: string; + readonly ingressUrl: string; + readonly authToken: secrets.ISecret; + readonly invokerRole: iam.IRole; + + /** + * Constructs a Restate Cloud environment reference along with invoker. Note that this construct is only a pointer to + * an existing Restate Cloud environment and does not create it. However, it does create an invoker role that is used + * invoking Lambda service handlers. If you would prefer to directly manage the invoker role permissions, you can + * override the {@link createInvokerRole} method or construct one yourself and define the environment properties with + * {@link RestateEnvironment.fromAttributes} directly. + * + * @param scope parent construct + * @param id construct id + * @param props environment properties + * @returns Restate Cloud environment + */ + constructor(scope: Construct, id: string, props: RestateCloudEnvironmentProps) { + super(scope, id); + this.invokerRole = this.createInvokerRole(this, props); + this.authToken = props.apiKey; + this.adminUrl = adminEndpoint(RESTATE_CLOUD_REGION_US, props.environmentId); + this.ingressUrl = ingressEndpoint(RESTATE_CLOUD_REGION_US, props.environmentId); + } + + /** + * This role is used by Restate to invoke Lambda service handlers; see https://docs.restate.dev/deploy/cloud for + * information on deploying services to Restate Cloud environments. For standalone environments, the EC2 instance + * profile can be used directly instead of creating a separate role. + */ + protected createInvokerRole(scope: Construct, props: RestateCloudEnvironmentProps): iam.IRole { + const invokerRole = new iam.Role(scope, "InvokerRole", { + assumedBy: new iam.AccountPrincipal(CONFIG[RESTATE_CLOUD_REGION_US].accountId).withConditions({ + StringEquals: { + "sts:ExternalId": props.environmentId, + "aws:PrincipalArn": CONFIG[RESTATE_CLOUD_REGION_US].principalArn, + }, + }), + }); + invokerRole.assumeRolePolicy!.addStatements( + new iam.PolicyStatement({ + principals: [new iam.AccountPrincipal("654654156625")], + actions: ["sts:TagSession"], + }), + ); + return invokerRole; + } +} + +function adminEndpoint(region: RestateCloudRegion, environmentId: EnvironmentId): string { + const bareEnvId = environmentId.replace(/^env_/, ""); + return `https://${bareEnvId}.env.${region}.restate.cloud:9070`; +} + +function ingressEndpoint(region: RestateCloudRegion, environmentId: EnvironmentId): string { + const bareEnvId = environmentId.replace(/^env_/, ""); + return `https://${bareEnvId}.env.${region}.restate.cloud`; +} + +export type EnvironmentId = `env_${string}`; +type RestateCloudRegion = "us"; + +interface RegionConfig { + accountId: string; + principalArn: string; +} + +const RESTATE_CLOUD_REGION_US = "us"; + +const CONFIG = { + us: { + accountId: "654654156625", + principalArn: "arn:aws:iam::654654156625:role/RestateCloud", + }, +} as Record; diff --git a/lib/restate-constructs/restate-environment.ts b/lib/restate-constructs/restate-environment.ts index 5106ae6..a08ba51 100644 --- a/lib/restate-constructs/restate-environment.ts +++ b/lib/restate-constructs/restate-environment.ts @@ -1,9 +1,9 @@ import * as iam from "aws-cdk-lib/aws-iam"; -import { IRole } from "aws-cdk-lib/aws-iam"; -import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager"; -import { ISecret } from "aws-cdk-lib/aws-secretsmanager"; +import * as secrets from "aws-cdk-lib/aws-secretsmanager"; import { FunctionOptions } from "aws-cdk-lib/aws-lambda"; import { ServiceDeployer } from "./service-deployer"; +import { SingleNodeRestateDeployment } from "./single-node-restate-deployment"; +import { RestateCloudEnvironment } from "./restate-cloud-environment"; /** * A Restate environment is a unique deployment of the Restate service. Implementations of this interface may refer to @@ -25,13 +25,18 @@ export interface IRestateEnvironment extends Pick= 18.18.0" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": { + "version": "1.4.1", + "inBundle": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": { + "version": "7.6.3", + "inBundle": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true - }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true - }, "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-sdk/client-secrets-manager": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.592.0.tgz", - "integrity": "sha512-kV8R94QyQwiuJqyz7uWykZ8SXZNabvzT/PXszDwebFr8unSmbZRWrDSGfnRBmo2m0qvEkCPvGpL3mGiv14XDDQ==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.637.0.tgz", + "integrity": "sha512-4AEV+4yhaFYlnD90MbtOouqTyrPVmD8OeGotsjtWxgnVHk55Vd0/dIWVGjic0YCxH3SNdWqJJ9G8Vd93fWymVA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.592.0", - "@aws-sdk/client-sts": "3.592.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2", "uuid": "^9.0.1" @@ -200,47 +291,48 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.592.0.tgz", - "integrity": "sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -249,100 +341,104 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.592.0.tgz", - "integrity": "sha512-11Zvm8nm0s/UF3XCjzFRpQU+8FFVW5rcr3BHfnH6xAe5JEoN6bJN/n+wOfnElnjek+90hh+Qc7s141AMrCjiiw==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz", + "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.592.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.592.0.tgz", - "integrity": "sha512-KUrOdszZfcrlpKr4dpdkGibZ/qq3Lnfu1rjv1U+V1QJQ9OuMo9J3sDWpWV9tigNqY0aGllarWH5cJbz9868W/w==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", + "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sso-oidc": "3.592.0", - "@aws-sdk/core": "3.592.0", - "@aws-sdk/credential-provider-node": "3.592.0", - "@aws-sdk/middleware-host-header": "3.577.0", - "@aws-sdk/middleware-logger": "3.577.0", - "@aws-sdk/middleware-recursion-detection": "3.577.0", - "@aws-sdk/middleware-user-agent": "3.587.0", - "@aws-sdk/region-config-resolver": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@aws-sdk/util-user-agent-browser": "3.577.0", - "@aws-sdk/util-user-agent-node": "3.587.0", - "@smithy/config-resolver": "^3.0.1", - "@smithy/core": "^2.2.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/hash-node": "^3.0.0", - "@smithy/invalid-dependency": "^3.0.0", - "@smithy/middleware-content-length": "^3.0.0", - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.3", - "@smithy/util-defaults-mode-node": "^3.0.3", - "@smithy/util-endpoints": "^2.0.1", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -351,17 +447,21 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.592.0.tgz", - "integrity": "sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==", + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/core": "^2.2.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/signature-v4": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "fast-xml-parser": "4.2.5", + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { @@ -369,14 +469,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.587.0.tgz", - "integrity": "sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -384,19 +485,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.587.0.tgz", - "integrity": "sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==", + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { @@ -404,47 +506,49 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.592.0.tgz", - "integrity": "sha512-3kG6ngCIOPbLJZZ3RV+NsU7HVK6vX1+1DrPJKj9fVlPYn7IXsk8NAaUT5885yC7+jKizjv0cWLrLKvAJV5gfUA==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.587.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.592.0" + "@aws-sdk/client-sts": "^3.637.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.592.0.tgz", - "integrity": "sha512-BguihBGTrEjVBQ07hm+ZsO29eNJaxwBwUZMftgGAm2XcMIEClNPfm5hydxu2BmA4ouIJQJ6nG8pNYghEumM+Aw==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.587.0", - "@aws-sdk/credential-provider-http": "3.587.0", - "@aws-sdk/credential-provider-ini": "3.592.0", - "@aws-sdk/credential-provider-process": "3.587.0", - "@aws-sdk/credential-provider-sso": "3.592.0", - "@aws-sdk/credential-provider-web-identity": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -452,15 +556,16 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.587.0.tgz", - "integrity": "sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -468,17 +573,18 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.592.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.592.0.tgz", - "integrity": "sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/client-sso": "3.592.0", - "@aws-sdk/token-providers": "3.587.0", - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -486,32 +592,34 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.587.0.tgz", - "integrity": "sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==", + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.587.0" + "@aws-sdk/client-sts": "^3.621.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.577.0.tgz", - "integrity": "sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -519,13 +627,14 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.577.0.tgz", - "integrity": "sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -533,14 +642,15 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.577.0.tgz", - "integrity": "sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -548,15 +658,16 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.587.0.tgz", - "integrity": "sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@aws-sdk/util-endpoints": "3.587.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -564,16 +675,17 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.587.0.tgz", - "integrity": "sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { @@ -581,31 +693,33 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.587.0.tgz", - "integrity": "sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.587.0" + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.577.0.tgz", - "integrity": "sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -613,14 +727,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.587.0.tgz", - "integrity": "sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ==", + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", - "@smithy/util-endpoints": "^2.0.1", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", "tslib": "^2.6.2" }, "engines": { @@ -631,6 +746,7 @@ "version": "3.568.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -640,26 +756,28 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.577.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.577.0.tgz", - "integrity": "sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==", + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.587.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.587.0.tgz", - "integrity": "sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ==", + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@aws-sdk/types": "3.577.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -674,15 +792,6 @@ } } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "peer": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -1305,6 +1414,13 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@bufbuild/protobuf": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", + "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -1332,9 +1448,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ "ppc64" ], @@ -1349,9 +1465,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -1366,9 +1482,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -1383,9 +1499,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -1400,9 +1516,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -1417,9 +1533,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -1434,9 +1550,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -1451,9 +1567,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -1468,9 +1584,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -1485,9 +1601,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -1502,9 +1618,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -1519,9 +1635,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -1536,9 +1652,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -1553,9 +1669,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -1570,9 +1686,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -1587,9 +1703,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -1604,9 +1720,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -1621,9 +1737,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -1638,9 +1754,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "cpu": [ "arm64" ], @@ -1655,9 +1771,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -1672,9 +1788,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -1689,9 +1805,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -1706,9 +1822,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -1723,9 +1839,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -2090,6 +2206,30 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@restatedev/restate-sdk": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@restatedev/restate-sdk/-/restate-sdk-1.3.0.tgz", + "integrity": "sha512-tVbuBV+lQJ58xOImRCfIP5RHJ1uSsa8M7+GWtl6ofyHtuhHGpLJqNkh7jIWGIRnpjXsQp/nlhDld/1sJo3vBMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^1.8.0", + "@restatedev/restate-sdk-core": "^1.3.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@restatedev/restate-sdk-core": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@restatedev/restate-sdk-core/-/restate-sdk-core-1.3.0.tgz", + "integrity": "sha512-CS2dLD7ppkQSmUSx8PrIOjpOduhMO8cXO2WtlBMXRcpk/wxdCXZtvVe0oQ06DrchX6J71mX1qC7DZvCBjDA0eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2115,12 +2255,13 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2128,15 +2269,16 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.1.tgz", - "integrity": "sha512-hbkYJc20SBDz2qqLzttjI/EqXemtmWk0ooRznLsiXp3066KQRTvuKHa7U4jCZCJq6Dozqvy0R1/vNESC9inPJg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", + "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { @@ -2144,18 +2286,21 @@ } }, "node_modules/@smithy/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.0.tgz", - "integrity": "sha512-ygLZSSKgt9bR8HAxR9mK+U5obvAJBr6zlQuhN5soYWx/amjDoQN4dTkydTypgKe6rIbUjTILyLU+W5XFwXr4kg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz", + "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-retry": "^3.0.3", - "@smithy/middleware-serde": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { @@ -2163,15 +2308,16 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.0.tgz", - "integrity": "sha512-q4A4d38v8pYYmseu/jTS3Z5I3zXlEOe5Obi+EJreVKgSVyWUHOd7/yaVCinC60QG4MRyCs98tcxBH1IMC0bu7Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", + "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "tslib": "^2.6.2" }, "engines": { @@ -2179,25 +2325,27 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.0.1.tgz", - "integrity": "sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.0.tgz", - "integrity": "sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", + "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2207,12 +2355,13 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.0.tgz", - "integrity": "sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", + "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, @@ -2220,6 +2369,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2229,13 +2379,14 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.0.tgz", - "integrity": "sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", + "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2243,17 +2394,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.1.tgz", - "integrity": "sha512-lQ/UOdGD4KM5kLZiAl0q8Qy3dPbynvAXKAdXnYlrA1OpaUwr+neSsVokDZpY6ZVb5Yx8jnus29uv6XWpM9P4SQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/middleware-serde": "^3.0.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", - "@smithy/url-parser": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { @@ -2261,18 +2413,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.3.tgz", - "integrity": "sha512-Wve1qzJb83VEU/6q+/I0cQdAkDnuzELC6IvIBwDzUEiGpKqXgX1v10FUuZGbRS6Ov/P+HHthcAoHOJZQvZNAkA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz", + "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/service-error-classification": "^3.0.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", - "@smithy/util-retry": "^3.0.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -2281,12 +2434,13 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.0.tgz", - "integrity": "sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2294,12 +2448,13 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.0.tgz", - "integrity": "sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2307,14 +2462,15 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.0.tgz", - "integrity": "sha512-ngfB8QItUfTFTfHMvKuc2g1W60V1urIgZHqD1JNFZC2tTWXahqf2XvKXqcBS7yZqR7GqkQQZy11y/lNOUWzq7Q==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/property-provider": "^3.1.0", - "@smithy/shared-ini-file-loader": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2322,15 +2478,16 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.0.0.tgz", - "integrity": "sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/abort-controller": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/querystring-builder": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2338,12 +2495,13 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.0.tgz", - "integrity": "sha512-Tj3+oVhqdZgemjCiWjFlADfhvLF4C/uKDuKo7/tlEsRQ9+3emCreR2xndj970QSRSsiCEU8hZW3/8JQu+n5w4Q==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2351,12 +2509,13 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.0.tgz", - "integrity": "sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2364,12 +2523,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.0.tgz", - "integrity": "sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -2378,12 +2538,13 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.0.tgz", - "integrity": "sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2391,24 +2552,26 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.0.tgz", - "integrity": "sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", + "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0" + "@smithy/types": "^3.3.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.0.tgz", - "integrity": "sha512-dAM7wSX0NR3qTNyGVN/nwwpEDzfV9T/3AN2eABExWmda5VqZKSsjlINqomO5hjQWGv+IIkoXfs3u2vGSNz8+Rg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2416,15 +2579,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.0.0.tgz", - "integrity": "sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", + "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2434,16 +2599,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.1.tgz", - "integrity": "sha512-tj4Ku7MpzZR8cmVuPcSbrLFVxmptWktmJMwST/uIEq4sarabEdF8CbmQdYB7uJ/X51Qq2EYwnRsoS7hdR4B7rA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/middleware-endpoint": "^3.0.1", - "@smithy/middleware-stack": "^3.0.0", - "@smithy/protocol-http": "^4.0.0", - "@smithy/types": "^3.0.0", - "@smithy/util-stream": "^3.0.1", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { @@ -2451,9 +2617,10 @@ } }, "node_modules/@smithy/types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.0.0.tgz", - "integrity": "sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2463,13 +2630,14 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.0.tgz", - "integrity": "sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/querystring-parser": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" } }, @@ -2477,6 +2645,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -2491,6 +2660,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2500,6 +2670,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2512,6 +2683,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -2525,6 +2697,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2534,14 +2707,15 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.3.tgz", - "integrity": "sha512-3DFON2bvXJAukJe+qFgPV/rorG7ZD3m4gjCXHD1V5z/tgKQp5MCTCLntrd686tX6tj8Uli3lefWXJudNg5WmCA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz", + "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/property-provider": "^3.1.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -2550,17 +2724,18 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.3.tgz", - "integrity": "sha512-D0b8GJXecT00baoSQ3Iieu3k3mZ7GY8w1zmg8pdogYrGvWJeLcIclqk2gbkG4K0DaBGWrO6v6r20iwIFfDYrmA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz", + "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/config-resolver": "^3.0.1", - "@smithy/credential-provider-imds": "^3.1.0", - "@smithy/node-config-provider": "^3.1.0", - "@smithy/property-provider": "^3.1.0", - "@smithy/smithy-client": "^3.1.1", - "@smithy/types": "^3.0.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2568,13 +2743,14 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.1.tgz", - "integrity": "sha512-ZRT0VCOnKlVohfoABMc8lWeQo/JEFuPWctfNRXgTHbyOVssMOLYFUNWukxxiHRGVAhV+n3c0kPW+zUqckjVPEA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", + "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.0", - "@smithy/types": "^3.0.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2585,6 +2761,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2594,12 +2771,13 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.0.tgz", - "integrity": "sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/types": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2607,13 +2785,14 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.0.tgz", - "integrity": "sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", + "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/service-error-classification": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { @@ -2621,14 +2800,15 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.1.tgz", - "integrity": "sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@smithy/fetch-http-handler": "^3.0.1", - "@smithy/node-http-handler": "^3.0.0", - "@smithy/types": "^3.0.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -2643,6 +2823,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.6.2" @@ -2655,6 +2836,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -2697,9 +2879,9 @@ "peer": true }, "node_modules/@types/aws-lambda": { - "version": "8.10.143", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.143.tgz", - "integrity": "sha512-u5vzlcR14ge/4pMTTMDQr3MF0wEe38B2F9o84uC4F43vN5DGTy63npRrB6jQhyt+C0lGv4ZfiRcRkqJoZuPnmg==", + "version": "8.10.145", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==", "dev": true, "license": "MIT" }, @@ -2788,13 +2970,13 @@ } }, "node_modules/@types/node": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz", - "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==", + "version": "22.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", + "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.13.0" + "undici-types": "~6.19.2" } }, "node_modules/@types/source-map-support": { @@ -2930,9 +3112,9 @@ "license": "MIT" }, "node_modules/aws-cdk": { - "version": "2.151.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.151.0.tgz", - "integrity": "sha512-+pM3mTXjzZk44U5q+jaji5Y1X8J2c4ro8szqm2V/Wwa+xXCsJfVwJYiQbstSZkOz6ondfgkrJKtx6EzaodxRNw==", + "version": "2.155.0", + "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.155.0.tgz", + "integrity": "sha512-AV7Ym/o7/xyDh6sqcGatWD6Bqa7Swe0OWJq+1srVww0MdBiy5yM3zYAA1+ZeqZNjFQThJPA+pYZQFTgojuaVBA==", "license": "Apache-2.0", "peer": true, "bin": { @@ -2946,9 +3128,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.151.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.151.0.tgz", - "integrity": "sha512-SIzzOGSYO+s1f+y2zyGKK8wH5JmN+nkrGOL28iHzmx9lXK0NaT0+d5sjTbzLo2C8iogzbR91yGnIKze0GzZXHg==", + "version": "2.155.0", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.155.0.tgz", + "integrity": "sha512-QGzDhLldBXsyOUmhgtZ98PiOUS2g1Mb5MO08FiOvQn3+KSyJjQdq0GoyxtDpCNGLaWmIfcyrtB9aDhod38fl9g==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -2968,6 +3150,7 @@ "@aws-cdk/asset-awscli-v1": "^2.2.202", "@aws-cdk/asset-kubectl-v20": "^2.1.2", "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.3", + "@aws-cdk/cloud-assembly-schema": "^36.0.5", "@balena/dockerignore": "^1.0.2", "case": "1.6.3", "fs-extra": "^11.2.0", @@ -3440,6 +3623,7 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT", "peer": true }, "node_modules/brace-expansion": { @@ -3453,12 +3637,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -3847,9 +4032,9 @@ } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3860,30 +4045,30 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/escalade": { @@ -3972,19 +4157,20 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "peer": true, "dependencies": { "strnum": "^1.0.5" @@ -4059,10 +4245,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4162,6 +4349,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz", + "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -4318,6 +4518,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4485,9 +4686,9 @@ } }, "node_modules/jest-cdk-snapshot": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jest-cdk-snapshot/-/jest-cdk-snapshot-2.2.2.tgz", - "integrity": "sha512-XGYuH0YkJr+B2DsCZ5wxYPrmBzAC4EF6d/oTi6ENV25qsfcJfmyivd8+mFhE8V9cQS8vBWOG+nfvLUWT5x0Lfw==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/jest-cdk-snapshot/-/jest-cdk-snapshot-2.2.5.tgz", + "integrity": "sha512-+7TLHTRwfWm1Cslu8fnSSc53cFufE89BbRTBtytZN0Ac4uS6ha9yMsEiN4tOl/SLAsu+q/8/ppAs0LCX0GP/AQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5241,12 +5442,13 @@ "dev": true }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -5645,6 +5847,16 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -5658,7 +5870,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -5815,6 +6026,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT", "peer": true }, "node_modules/supports-color": { @@ -5875,6 +6087,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -5883,21 +6096,21 @@ } }, "node_modules/ts-jest": { - "version": "29.2.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", - "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, "license": "MIT", "dependencies": { - "bs-logger": "0.x", + "bs-logger": "^0.2.6", "ejs": "^3.1.10", - "fast-json-stable-stringify": "2.x", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -5931,26 +6144,12 @@ } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5958,12 +6157,6 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -6010,11 +6203,47 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD", "peer": true }, + "node_modules/tsx": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.0.tgz", + "integrity": "sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -6051,9 +6280,9 @@ } }, "node_modules/undici-types": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", - "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, @@ -6095,6 +6324,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "peer": true, "bin": { "uuid": "dist/bin/uuid" diff --git a/package.json b/package.json index cec9a34..fc73ae3 100644 --- a/package.json +++ b/package.json @@ -24,22 +24,24 @@ "cdk": "cdk" }, "devDependencies": { - "@types/aws-lambda": "^8.10.143", + "@restatedev/restate-sdk": "^1.3.0", + "@types/aws-lambda": "^8.10.145", "@types/jest": "^29.5.12", - "@types/node": "^22.1.0", + "@types/node": "^22.5.2", "@types/source-map-support": "^0.5.10", - "esbuild": "^0.23.0", + "esbuild": "^0.23.1", "jest": "^29.7.0", - "jest-cdk-snapshot": "^2.2.2", + "jest-cdk-snapshot": "^2.2.5", "prettier": "^3.3.3", "source-map-support": "^0.5.21", - "ts-jest": "^29.2.4", + "ts-jest": "^29.2.5", + "tsx": "^4.19.0", "typescript": "^5.5.4" }, "peerDependencies": { - "@aws-sdk/client-secrets-manager": "^3.592.0", - "aws-cdk": "^2.151.0", - "aws-cdk-lib": "^2.151.0", + "@aws-sdk/client-secrets-manager": "^3.637.0", + "aws-cdk": "^2.155.0", + "aws-cdk-lib": "^2.155.0", "constructs": "^10.3.0", "node-fetch": "^3.3.2" }, diff --git a/test/__snapshots__/restate-constructs.test.ts.snap b/test/__snapshots__/restate-constructs.test.ts.snap index 77fe029..e1e93aa 100644 --- a/test/__snapshots__/restate-constructs.test.ts.snap +++ b/test/__snapshots__/restate-constructs.test.ts.snap @@ -1,8 +1,94 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Restate constructs Create a self-hosted Restate environment deployed on EC2 1`] = ` +exports[`Restate constructs [Experimental] Create a self-hosted Restate environment deployed on ECS Fargate 1`] = ` "Resources: - RestateInstanceRoleACC59A6F: + ZoneA5DE4B68: + Type: 'AWS::Route53::HostedZone' + Properties: + Name: example.com. + RestateContainerDataStore2CD55CF9: + Type: 'AWS::EFS::FileSystem' + Properties: + Encrypted: true + FileSystemPolicy: + Statement: + - Action: 'elasticfilesystem:ClientMount' + Condition: + Bool: + 'elasticfilesystem:AccessedViaMountTarget': 'true' + Effect: Allow + Principal: + AWS: '*' + Sid: AllowEfsMount + - Action: + - 'elasticfilesystem:ClientWrite' + - 'elasticfilesystem:ClientRootAccess' + Condition: + Bool: + 'elasticfilesystem:AccessedViaMountTarget': 'true' + Effect: Allow + Principal: + AWS: '*' + Version: '2012-10-17' + FileSystemTags: + - Key: Name + Value: RestateOnFargateStack/RestateContainer/DataStore + LifecyclePolicies: + - TransitionToIA: AFTER_30_DAYS + PerformanceMode: generalPurpose + ThroughputMode: bursting + UpdateReplacePolicy: Delete + DeletionPolicy: Delete + RestateContainerDataStoreEfsSecurityGroupF3B38961: + Type: 'AWS::EC2::SecurityGroup' + Properties: + GroupDescription: RestateOnFargateStack/RestateContainer/DataStore/EfsSecurityGroup + SecurityGroupEgress: + - CidrIp: 0.0.0.0/0 + Description: Allow all outbound traffic by default + IpProtocol: '-1' + Tags: + - Key: Name + Value: RestateOnFargateStack/RestateContainer/DataStore + VpcId: vpc-12345 + RestateContainerDataStoreEfsSecurityGroupfromRestateOnFargateStackRestateContainerSecurityGroup7DD2FD092049D9445952: + Type: 'AWS::EC2::SecurityGroupIngress' + Properties: + Description: 'from RestateOnFargateStackRestateContainerSecurityGroup7DD2FD09:2049' + FromPort: 2049 + GroupId: + 'Fn::GetAtt': + - RestateContainerDataStoreEfsSecurityGroupF3B38961 + - GroupId + IpProtocol: tcp + SourceSecurityGroupId: + 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + ToPort: 2049 + RestateContainerDataStoreEfsMountTarget14DA83FA9: + Type: 'AWS::EFS::MountTarget' + Properties: + FileSystemId: + Ref: RestateContainerDataStore2CD55CF9 + SecurityGroups: + - 'Fn::GetAtt': + - RestateContainerDataStoreEfsSecurityGroupF3B38961 + - GroupId + SubnetId: p-12345 + RestateContainerDataStoreEfsMountTarget293F01D03: + Type: 'AWS::EFS::MountTarget' + Properties: + FileSystemId: + Ref: RestateContainerDataStore2CD55CF9 + SecurityGroups: + - 'Fn::GetAtt': + - RestateContainerDataStoreEfsSecurityGroupF3B38961 + - GroupId + SubnetId: p-67890 + RestateContainerCluster8240BE00: + Type: 'AWS::ECS::Cluster' + RestateContainerRestateTaskTaskRole8631C1EC: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: @@ -10,32 +96,87 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on - Action: 'sts:AssumeRole' Effect: Allow Principal: - Service: ec2.amazonaws.com + Service: ecs-tasks.amazonaws.com Version: '2012-10-17' - ManagedPolicyArns: - - 'Fn::Join': - - '' - - - 'arn:' - - Ref: 'AWS::Partition' - - ':iam::aws:policy/AmazonSSMManagedInstanceCore' - RestateInstanceRoleDefaultPolicyD1D39538: + RestateContainerRestateTaskTaskRoleDefaultPolicy48E28208: Type: 'AWS::IAM::Policy' Properties: PolicyDocument: Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Resource: + 'Fn::GetAtt': + - RestateContainerInvokerRoleEFCDC05B + - Arn - Action: - - 'logs:CreateLogStream' - - 'logs:PutLogEvents' + - 'elasticfilesystem:ClientMount' + - 'elasticfilesystem:ClientWrite' + - 'elasticfilesystem:ClientRootAccess' + Condition: + Bool: + 'elasticfilesystem:AccessedViaMountTarget': 'true' Effect: Allow Resource: 'Fn::GetAtt': - - RestateLogsFD86ECAE + - RestateContainerDataStore2CD55CF9 - Arn Version: '2012-10-17' - PolicyName: RestateInstanceRoleDefaultPolicyD1D39538 + PolicyName: RestateContainerRestateTaskTaskRoleDefaultPolicy48E28208 Roles: - - Ref: RestateInstanceRoleACC59A6F - RestateInvokerRole42565598: + - Ref: RestateContainerRestateTaskTaskRole8631C1EC + RestateContainerRestateTaskB2410338: + Type: 'AWS::ECS::TaskDefinition' + Properties: + ContainerDefinitions: + - Environment: + - Name: RESTATE_OBSERVABILITY__LOG__FORMAT + Value: Json + Essential: true + Image: Any + LogConfiguration: + LogDriver: awslogs + Options: + awslogs-group: + Ref: RestateContainerLogs4399E84C + awslogs-stream-prefix: restate + awslogs-region: region + MountPoints: + - ContainerPath: /target + ReadOnly: false + SourceVolume: restateStore + Name: restate-runtime + PortMappings: + - ContainerPort: 8080 + Protocol: tcp + - ContainerPort: 9070 + Protocol: tcp + StartTimeout: 20 + StopTimeout: 20 + Cpu: '4096' + ExecutionRoleArn: + 'Fn::GetAtt': + - RestateContainerRestateTaskExecutionRole10CF0851 + - Arn + Family: RestateOnFargateStackRestateContainerRestateTaskBB43DAFB + Memory: '8192' + NetworkMode: awsvpc + RequiresCompatibilities: + - FARGATE + RuntimePlatform: + CpuArchitecture: ARM64 + OperatingSystemFamily: LINUX + TaskRoleArn: + 'Fn::GetAtt': + - RestateContainerRestateTaskTaskRole8631C1EC + - Arn + Volumes: + - EFSVolumeConfiguration: + AuthorizationConfig: {} + FilesystemId: + Ref: RestateContainerDataStore2CD55CF9 + Name: restateStore + RestateContainerRestateTaskExecutionRole10CF0851: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: @@ -43,110 +184,471 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on - Action: 'sts:AssumeRole' Effect: Allow Principal: - AWS: - 'Fn::GetAtt': - - RestateInstanceRoleACC59A6F - - Arn + Service: ecs-tasks.amazonaws.com Version: '2012-10-17' - RestateAssumeInvokerRolePolicy1FA6B6C2: + RestateContainerRestateTaskExecutionRoleDefaultPolicyFDEA8435: Type: 'AWS::IAM::Policy' Properties: PolicyDocument: Statement: - - Action: 'sts:AssumeRole' + - Action: + - 'logs:CreateLogStream' + - 'logs:PutLogEvents' Effect: Allow Resource: 'Fn::GetAtt': - - RestateInvokerRole42565598 + - RestateContainerLogs4399E84C - Arn - Sid: AllowAssumeInvokerRole Version: '2012-10-17' - PolicyName: RestateAssumeInvokerRolePolicy1FA6B6C2 + PolicyName: RestateContainerRestateTaskExecutionRoleDefaultPolicyFDEA8435 Roles: - - Ref: RestateInstanceRoleACC59A6F - RestateLogsFD86ECAE: + - Ref: RestateContainerRestateTaskExecutionRole10CF0851 + RestateContainerTaskPolicyC2BA310D: + Type: 'AWS::IAM::Policy' + Properties: + PolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Resource: '*' + Sid: AllowAssumeAnyRole + Version: '2012-10-17' + PolicyName: RestateContainerTaskPolicyC2BA310D + Roles: + - Ref: RestateContainerRestateTaskTaskRole8631C1EC + RestateContainerInvokerRoleEFCDC05B: + Type: 'AWS::IAM::Role' + Properties: + AssumeRolePolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Principal: + AWS: + 'Fn::GetAtt': + - RestateContainerRestateTaskTaskRole8631C1EC + - Arn + Version: '2012-10-17' + Description: Assumed by Restate deployment to invoke Lambda-based services + RestateContainerLogs4399E84C: Type: 'AWS::Logs::LogGroup' Properties: - LogGroupName: /restate/Restate + LogGroupName: /restate/RestateContainer RetentionInDays: 30 UpdateReplacePolicy: Delete DeletionPolicy: Delete - RestateHostInstanceSecurityGroup471D630B: + RestateContainerSecurityGroup6BE91975: Type: 'AWS::EC2::SecurityGroup' Properties: - GroupDescription: RestateOnFargateStack/Restate/Host/InstanceSecurityGroup + GroupDescription: RestateOnFargateStack/RestateContainer/SecurityGroup SecurityGroupEgress: - CidrIp: 0.0.0.0/0 Description: Allow all outbound traffic by default IpProtocol: '-1' - Tags: - - Key: Name - Value: RestateOnFargateStack/Restate/Host VpcId: vpc-12345 - RestateHostInstanceProfile14AE3AC8: - Type: 'AWS::IAM::InstanceProfile' + RestateContainerSecurityGroupfromRestateOnFargateStackRestateContainerDataStoreEfsSecurityGroup93B5B80320493195848B: + Type: 'AWS::EC2::SecurityGroupIngress' Properties: - Roles: - - Ref: RestateInstanceRoleACC59A6F - RestateHost1AC4F9D1: - Type: 'AWS::EC2::Instance' + Description: >- + from + RestateOnFargateStackRestateContainerDataStoreEfsSecurityGroup93B5B803:2049 + FromPort: 2049 + GroupId: + 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + IpProtocol: tcp + SourceSecurityGroupId: + 'Fn::GetAtt': + - RestateContainerDataStoreEfsSecurityGroupF3B38961 + - GroupId + ToPort: 2049 + RestateContainerSecurityGroupfromRestateOnFargateStackRestateContainerAlbSecurityGroup84369A89808040114BB3: + Type: 'AWS::EC2::SecurityGroupIngress' Properties: - AvailabilityZone: dummy1a - BlockDeviceMappings: - - DeviceName: /dev/sdd - Ebs: - DeleteOnTermination: false - VolumeSize: 8 - VirtualName: restate-data - IamInstanceProfile: - Ref: RestateHostInstanceProfile14AE3AC8 - ImageId: - Ref: >- - SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61arm64C96584B6F00A464EAD1953AFF4B05118Parameter - InstanceType: t4g.micro - SecurityGroupIds: - - 'Fn::GetAtt': - - RestateHostInstanceSecurityGroup471D630B - - GroupId - - 'Fn::GetAtt': - - RestateRestateSecurityGroup73273B13 - - GroupId - SubnetId: s-12345 - Tags: - - Key: Name - Value: RestateOnFargateStack/Restate/Host - UserData: - 'Fn::Base64': - 'Fn::Join': - - '' - - - >+ - Content-Type: multipart/mixed; - boundary="+AWS+CDK+User+Data+Separator==" - - MIME-Version: 1.0 - - - --+AWS+CDK+User+Data+Separator== - - Content-Type: text/cloud-config - - Content-Transfer-Encoding: base64 - - - 'Fn::Base64': |- - cloud_final_modules: - - [scripts-user, always] - - |+ - - --+AWS+CDK+User+Data+Separator== - Content-Type: text/x-shellscript - Content-Transfer-Encoding: base64 - - - 'Fn::Base64': - 'Fn::Join': - - '' - - - >- - #!/bin/bash - + Description: Load balancer to target + FromPort: 8080 + GroupId: + 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + IpProtocol: tcp + SourceSecurityGroupId: + 'Fn::GetAtt': + - RestateContainerAlbSecurityGroup86380461 + - GroupId + ToPort: 8080 + RestateContainerSecurityGroupfromRestateOnFargateStackRestateContainerAlbSecurityGroup84369A899070981DBFA5: + Type: 'AWS::EC2::SecurityGroupIngress' + Properties: + Description: Load balancer to target + FromPort: 9070 + GroupId: + 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + IpProtocol: tcp + SourceSecurityGroupId: + 'Fn::GetAtt': + - RestateContainerAlbSecurityGroup86380461 + - GroupId + ToPort: 9070 + RestateContainerService4B07AFB0: + Type: 'AWS::ECS::Service' + Properties: + Cluster: + Ref: RestateContainerCluster8240BE00 + DeploymentConfiguration: + Alarms: + AlarmNames: [] + Enable: false + Rollback: false + DeploymentCircuitBreaker: + Enable: true + Rollback: true + MaximumPercent: 100 + MinimumHealthyPercent: 0 + DeploymentController: + Type: ECS + EnableECSManagedTags: false + HealthCheckGracePeriodSeconds: 60 + LaunchType: FARGATE + LoadBalancers: + - ContainerName: restate-runtime + ContainerPort: 8080 + TargetGroupArn: + Ref: >- + RestateContainerAlbIngressListenerFargateIngressTargetGroup38EB7B83 + - ContainerName: restate-runtime + ContainerPort: 9070 + TargetGroupArn: + Ref: RestateContainerAlbAdminListenerFargateAdminTargetGroup139F200C + NetworkConfiguration: + AwsvpcConfiguration: + AssignPublicIp: ENABLED + SecurityGroups: + - 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + Subnets: + - s-12345 + - s-67890 + TaskDefinition: + Ref: RestateContainerRestateTaskB2410338 + DependsOn: + - RestateContainerAlbAdminListenerFargateAdminTargetGroup139F200C + - RestateContainerAlbAdminListenerFF3856A3 + - RestateContainerAlbIngressListenerFargateIngressTargetGroup38EB7B83 + - RestateContainerAlbIngressListener09867A46 + - RestateContainerRestateTaskTaskRoleDefaultPolicy48E28208 + - RestateContainerRestateTaskTaskRole8631C1EC + RestateContainerAlbC83EF273: + Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer' + Properties: + LoadBalancerAttributes: + - Key: deletion_protection.enabled + Value: 'false' + Scheme: internal + SecurityGroups: + - 'Fn::GetAtt': + - RestateContainerAlbSecurityGroup86380461 + - GroupId + Subnets: + - p-12345 + - p-67890 + Type: application + RestateContainerAlbSecurityGroup86380461: + Type: 'AWS::EC2::SecurityGroup' + Properties: + GroupDescription: >- + Automatically created Security Group for ELB + RestateOnFargateStackRestateContainerAlbEE60ACC3 + SecurityGroupIngress: + - CidrIp: 0.0.0.0/0 + Description: Allow from anyone on port 443 + FromPort: 443 + IpProtocol: tcp + ToPort: 443 + - CidrIp: 0.0.0.0/0 + Description: Allow from anyone on port 9070 + FromPort: 9070 + IpProtocol: tcp + ToPort: 9070 + VpcId: vpc-12345 + RestateContainerAlbSecurityGrouptoRestateOnFargateStackRestateContainerSecurityGroup7DD2FD098080B5F4540C: + Type: 'AWS::EC2::SecurityGroupEgress' + Properties: + Description: Load balancer to target + DestinationSecurityGroupId: + 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + FromPort: 8080 + GroupId: + 'Fn::GetAtt': + - RestateContainerAlbSecurityGroup86380461 + - GroupId + IpProtocol: tcp + ToPort: 8080 + RestateContainerAlbSecurityGrouptoRestateOnFargateStackRestateContainerSecurityGroup7DD2FD09907051D68255: + Type: 'AWS::EC2::SecurityGroupEgress' + Properties: + Description: Load balancer to target + DestinationSecurityGroupId: + 'Fn::GetAtt': + - RestateContainerSecurityGroup6BE91975 + - GroupId + FromPort: 9070 + GroupId: + 'Fn::GetAtt': + - RestateContainerAlbSecurityGroup86380461 + - GroupId + IpProtocol: tcp + ToPort: 9070 + RestateContainerAlbIngressListener09867A46: + Type: 'AWS::ElasticLoadBalancingV2::Listener' + Properties: + Certificates: + - CertificateArn: + Ref: RestateContainerCertificate65E4F360 + DefaultActions: + - TargetGroupArn: + Ref: >- + RestateContainerAlbIngressListenerFargateIngressTargetGroup38EB7B83 + Type: forward + LoadBalancerArn: + Ref: RestateContainerAlbC83EF273 + Port: 443 + Protocol: HTTPS + RestateContainerAlbIngressListenerFargateIngressTargetGroup38EB7B83: + Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' + Properties: + HealthCheckIntervalSeconds: 5 + HealthCheckPath: /grpc.health.v1.Health/Check + HealthCheckTimeoutSeconds: 2 + HealthyThresholdCount: 3 + Port: 80 + Protocol: HTTP + TargetGroupAttributes: + - Key: deregistration_delay.timeout_seconds + Value: '5' + - Key: stickiness.enabled + Value: 'false' + TargetType: ip + UnhealthyThresholdCount: 3 + VpcId: vpc-12345 + RestateContainerAlbAdminListenerFF3856A3: + Type: 'AWS::ElasticLoadBalancingV2::Listener' + Properties: + Certificates: + - CertificateArn: + Ref: RestateContainerCertificate65E4F360 + DefaultActions: + - TargetGroupArn: + Ref: RestateContainerAlbAdminListenerFargateAdminTargetGroup139F200C + Type: forward + LoadBalancerArn: + Ref: RestateContainerAlbC83EF273 + Port: 9070 + Protocol: HTTPS + RestateContainerAlbAdminListenerFargateAdminTargetGroup139F200C: + Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' + Properties: + HealthCheckIntervalSeconds: 5 + HealthCheckPath: /health + HealthCheckTimeoutSeconds: 2 + HealthyThresholdCount: 3 + Port: 80 + Protocol: HTTP + TargetGroupAttributes: + - Key: deregistration_delay.timeout_seconds + Value: '5' + - Key: stickiness.enabled + Value: 'false' + TargetType: ip + UnhealthyThresholdCount: 3 + VpcId: vpc-12345 + RestateContainerCertificate65E4F360: + Type: 'AWS::CertificateManager::Certificate' + Properties: + DomainName: restate.example.com + DomainValidationOptions: + - DomainName: restate.example.com + HostedZoneId: + Ref: ZoneA5DE4B68 + Tags: + - Key: Name + Value: RestateOnFargateStack/RestateContainer/Certificate + ValidationMethod: DNS + RestateContainerAlbAliasF68387BC: + Type: 'AWS::Route53::RecordSet' + Properties: + AliasTarget: + DNSName: + 'Fn::Join': + - '' + - - dualstack. + - 'Fn::GetAtt': + - RestateContainerAlbC83EF273 + - DNSName + HostedZoneId: + 'Fn::GetAtt': + - RestateContainerAlbC83EF273 + - CanonicalHostedZoneID + HostedZoneId: + Ref: ZoneA5DE4B68 + Name: restate.example.com. + Type: A +" +`; + +exports[`Restate constructs Create a self-hosted Restate environment deployed on EC2 1`] = ` +"Resources: + RestateInstanceRoleACC59A6F: + Type: 'AWS::IAM::Role' + Properties: + AssumeRolePolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Principal: + Service: ec2.amazonaws.com + Version: '2012-10-17' + ManagedPolicyArns: + - 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':iam::aws:policy/AmazonSSMManagedInstanceCore' + RestateInstanceRoleDefaultPolicyD1D39538: + Type: 'AWS::IAM::Policy' + Properties: + PolicyDocument: + Statement: + - Action: + - 'logs:CreateLogStream' + - 'logs:PutLogEvents' + Effect: Allow + Resource: + 'Fn::GetAtt': + - RestateLogsFD86ECAE + - Arn + Version: '2012-10-17' + PolicyName: RestateInstanceRoleDefaultPolicyD1D39538 + Roles: + - Ref: RestateInstanceRoleACC59A6F + RestateInvokerRole42565598: + Type: 'AWS::IAM::Role' + Properties: + AssumeRolePolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Principal: + AWS: + 'Fn::GetAtt': + - RestateInstanceRoleACC59A6F + - Arn + Version: '2012-10-17' + RestateAssumeInvokerRolePolicy1FA6B6C2: + Type: 'AWS::IAM::Policy' + Properties: + PolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Resource: + 'Fn::GetAtt': + - RestateInvokerRole42565598 + - Arn + Sid: AllowAssumeInvokerRole + Version: '2012-10-17' + PolicyName: RestateAssumeInvokerRolePolicy1FA6B6C2 + Roles: + - Ref: RestateInstanceRoleACC59A6F + RestateLogsFD86ECAE: + Type: 'AWS::Logs::LogGroup' + Properties: + LogGroupName: /restate/Restate + RetentionInDays: 30 + UpdateReplacePolicy: Delete + DeletionPolicy: Delete + RestateHostInstanceSecurityGroup471D630B: + Type: 'AWS::EC2::SecurityGroup' + Properties: + GroupDescription: RestateSelfHostedServerEc2Stack/Restate/Host/InstanceSecurityGroup + SecurityGroupEgress: + - CidrIp: 0.0.0.0/0 + Description: Allow all outbound traffic by default + IpProtocol: '-1' + Tags: + - Key: Name + Value: RestateSelfHostedServerEc2Stack/Restate/Host + VpcId: vpc-12345 + RestateHostInstanceProfile14AE3AC8: + Type: 'AWS::IAM::InstanceProfile' + Properties: + Roles: + - Ref: RestateInstanceRoleACC59A6F + RestateHost1AC4F9D1: + Type: 'AWS::EC2::Instance' + Properties: + AvailabilityZone: dummy1a + BlockDeviceMappings: + - DeviceName: /dev/sdd + Ebs: + DeleteOnTermination: false + VolumeSize: 8 + VirtualName: restate-data + IamInstanceProfile: + Ref: RestateHostInstanceProfile14AE3AC8 + ImageId: + Ref: >- + SsmParameterValueawsserviceamiamazonlinuxlatestal2023amikernel61arm64C96584B6F00A464EAD1953AFF4B05118Parameter + InstanceType: t4g.micro + SecurityGroupIds: + - 'Fn::GetAtt': + - RestateHostInstanceSecurityGroup471D630B + - GroupId + - 'Fn::GetAtt': + - RestateRestateSecurityGroup73273B13 + - GroupId + SubnetId: s-12345 + Tags: + - Key: Name + Value: RestateSelfHostedServerEc2Stack/Restate/Host + UserData: + 'Fn::Base64': + 'Fn::Join': + - '' + - - >+ + Content-Type: multipart/mixed; + boundary="+AWS+CDK+User+Data+Separator==" + + MIME-Version: 1.0 + + + --+AWS+CDK+User+Data+Separator== + + Content-Type: text/cloud-config + + Content-Transfer-Encoding: base64 + + - 'Fn::Base64': |- + cloud_final_modules: + - [scripts-user, always] + - |+ + + --+AWS+CDK+User+Data+Separator== + Content-Type: text/x-shellscript + Content-Transfer-Encoding: base64 + + - 'Fn::Base64': + 'Fn::Join': + - '' + - - >- + #!/bin/bash + set -euf -o pipefail yum install -y docker nginx @@ -306,263 +808,77 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; - - location / { - proxy_pass http://localhost:9070; - } - } - - EOF - - systemctl start nginx - - | - - --+AWS+CDK+User+Data+Separator==-- - DependsOn: - - RestateInstanceRoleDefaultPolicyD1D39538 - - RestateInstanceRoleACC59A6F - RestateRestateSecurityGroup73273B13: - Type: 'AWS::EC2::SecurityGroup' - Properties: - GroupDescription: Restate service ACLs - GroupName: RestateSecurityGroup - SecurityGroupEgress: - - CidrIp: 0.0.0.0/0 - Description: Allow all outbound traffic by default - IpProtocol: '-1' - SecurityGroupIngress: - - CidrIp: 0.0.0.0/0 - Description: Allow traffic from anywhere to Restate ingress port - FromPort: 443 - IpProtocol: tcp - ToPort: 443 - - CidrIp: 0.0.0.0/0 - Description: Allow traffic from anywhere to Restate admin port - FromPort: 9073 - IpProtocol: tcp - ToPort: 9073 - VpcId: vpc-12345 -Parameters: Any -" -`; - -exports[`Restate constructs Create a self-hosted Restate environment deployed on ECS Fargate 1`] = ` -"Resources: - ZoneA5DE4B68: - Type: 'AWS::Route53::HostedZone' - Properties: - Name: example.com. - RestateDataStore0EBA6BBD: - Type: 'AWS::EFS::FileSystem' - Properties: - Encrypted: true - FileSystemPolicy: - Statement: - - Action: 'elasticfilesystem:ClientMount' - Condition: - Bool: - 'elasticfilesystem:AccessedViaMountTarget': 'true' - Effect: Allow - Principal: - AWS: '*' - Sid: AllowEfsMount - - Action: - - 'elasticfilesystem:ClientWrite' - - 'elasticfilesystem:ClientRootAccess' - Condition: - Bool: - 'elasticfilesystem:AccessedViaMountTarget': 'true' - Effect: Allow - Principal: - AWS: '*' - Version: '2012-10-17' - FileSystemTags: - - Key: Name - Value: RestateOnFargateStack/Restate/DataStore - LifecyclePolicies: - - TransitionToIA: AFTER_30_DAYS - PerformanceMode: generalPurpose - ThroughputMode: bursting - UpdateReplacePolicy: Delete - DeletionPolicy: Delete - RestateDataStoreEfsSecurityGroup9E142FDF: - Type: 'AWS::EC2::SecurityGroup' - Properties: - GroupDescription: RestateOnFargateStack/Restate/DataStore/EfsSecurityGroup - SecurityGroupEgress: - - CidrIp: 0.0.0.0/0 - Description: Allow all outbound traffic by default - IpProtocol: '-1' - Tags: - - Key: Name - Value: RestateOnFargateStack/Restate/DataStore - VpcId: vpc-12345 - RestateDataStoreEfsSecurityGroupfromRestateOnFargateStackRestateSecurityGroup716176472049806B116B: - Type: 'AWS::EC2::SecurityGroupIngress' - Properties: - Description: 'from RestateOnFargateStackRestateSecurityGroup71617647:2049' - FromPort: 2049 - GroupId: - 'Fn::GetAtt': - - RestateDataStoreEfsSecurityGroup9E142FDF - - GroupId - IpProtocol: tcp - SourceSecurityGroupId: - 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - ToPort: 2049 - RestateDataStoreEfsMountTarget1FE8B299E: - Type: 'AWS::EFS::MountTarget' - Properties: - FileSystemId: - Ref: RestateDataStore0EBA6BBD - SecurityGroups: - - 'Fn::GetAtt': - - RestateDataStoreEfsSecurityGroup9E142FDF - - GroupId - SubnetId: p-12345 - RestateDataStoreEfsMountTarget21C454C30: - Type: 'AWS::EFS::MountTarget' - Properties: - FileSystemId: - Ref: RestateDataStore0EBA6BBD - SecurityGroups: - - 'Fn::GetAtt': - - RestateDataStoreEfsSecurityGroup9E142FDF - - GroupId - SubnetId: p-67890 - RestateCluster26F7C702: - Type: 'AWS::ECS::Cluster' - RestateRestateTaskTaskRole3425804E: - Type: 'AWS::IAM::Role' - Properties: - AssumeRolePolicyDocument: - Statement: - - Action: 'sts:AssumeRole' - Effect: Allow - Principal: - Service: ecs-tasks.amazonaws.com - Version: '2012-10-17' - RestateRestateTaskTaskRoleDefaultPolicyD6897EE5: - Type: 'AWS::IAM::Policy' - Properties: - PolicyDocument: - Statement: - - Action: 'sts:AssumeRole' - Effect: Allow - Resource: - 'Fn::GetAtt': - - RestateInvokerRole42565598 - - Arn - - Action: - - 'elasticfilesystem:ClientMount' - - 'elasticfilesystem:ClientWrite' - - 'elasticfilesystem:ClientRootAccess' - Condition: - Bool: - 'elasticfilesystem:AccessedViaMountTarget': 'true' - Effect: Allow - Resource: - 'Fn::GetAtt': - - RestateDataStore0EBA6BBD - - Arn - Version: '2012-10-17' - PolicyName: RestateRestateTaskTaskRoleDefaultPolicyD6897EE5 - Roles: - - Ref: RestateRestateTaskTaskRole3425804E - RestateRestateTask73B141AE: - Type: 'AWS::ECS::TaskDefinition' + + location / { + proxy_pass http://localhost:9070; + } + } + + EOF + + systemctl start nginx + - | + + --+AWS+CDK+User+Data+Separator==-- + DependsOn: + - RestateInstanceRoleDefaultPolicyD1D39538 + - RestateInstanceRoleACC59A6F + RestateRestateSecurityGroup73273B13: + Type: 'AWS::EC2::SecurityGroup' Properties: - ContainerDefinitions: - - Environment: - - Name: RESTATE_OBSERVABILITY__LOG__FORMAT - Value: Json - Essential: true - Image: 'docker.io/restatedev/restate:latest' - LogConfiguration: - LogDriver: awslogs - Options: - awslogs-group: - Ref: RestateLogsFD86ECAE - awslogs-stream-prefix: restate - awslogs-region: region - MountPoints: - - ContainerPath: /target - ReadOnly: false - SourceVolume: restateStore - Name: restate-runtime - PortMappings: - - ContainerPort: 8080 - Protocol: tcp - - ContainerPort: 9070 - Protocol: tcp - StartTimeout: 20 - StopTimeout: 20 - Cpu: '4096' - ExecutionRoleArn: - 'Fn::GetAtt': - - RestateRestateTaskExecutionRole8ED5B0F9 - - Arn - Family: RestateOnFargateStackRestateRestateTaskD92D0B67 - Memory: '8192' - NetworkMode: awsvpc - RequiresCompatibilities: - - FARGATE - RuntimePlatform: - CpuArchitecture: ARM64 - OperatingSystemFamily: LINUX - TaskRoleArn: - 'Fn::GetAtt': - - RestateRestateTaskTaskRole3425804E - - Arn - Volumes: - - EFSVolumeConfiguration: - AuthorizationConfig: {} - FilesystemId: - Ref: RestateDataStore0EBA6BBD - Name: restateStore - RestateRestateTaskExecutionRole8ED5B0F9: + GroupDescription: Restate service ACLs + GroupName: RestateSecurityGroup + SecurityGroupEgress: + - CidrIp: 0.0.0.0/0 + Description: Allow all outbound traffic by default + IpProtocol: '-1' + SecurityGroupIngress: + - CidrIp: 0.0.0.0/0 + Description: Allow traffic from anywhere to Restate ingress port + FromPort: 443 + IpProtocol: tcp + ToPort: 443 + - CidrIp: 0.0.0.0/0 + Description: Allow traffic from anywhere to Restate admin port + FromPort: 9073 + IpProtocol: tcp + ToPort: 9073 + VpcId: vpc-12345 +Parameters: Any +" +`; + +exports[`Restate constructs Deploy a Lambda service handler to Restate Cloud environment 1`] = ` +"Resources: + RestateInvokerRole42565598: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Statement: - Action: 'sts:AssumeRole' + Condition: + StringEquals: + 'sts:ExternalId': env_test + 'aws:PrincipalArn': 'arn:aws:iam::654654156625:role/RestateCloud' Effect: Allow Principal: - Service: ecs-tasks.amazonaws.com - Version: '2012-10-17' - RestateRestateTaskExecutionRoleDefaultPolicy8E1BA931: - Type: 'AWS::IAM::Policy' - Properties: - PolicyDocument: - Statement: - - Action: - - 'logs:CreateLogStream' - - 'logs:PutLogEvents' - Effect: Allow - Resource: - 'Fn::GetAtt': - - RestateLogsFD86ECAE - - Arn - Version: '2012-10-17' - PolicyName: RestateRestateTaskExecutionRoleDefaultPolicy8E1BA931 - Roles: - - Ref: RestateRestateTaskExecutionRole8ED5B0F9 - RestateTaskPolicy1A15994E: - Type: 'AWS::IAM::Policy' - Properties: - PolicyDocument: - Statement: - - Action: 'sts:AssumeRole' + AWS: + 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':iam::654654156625:root' + - Action: 'sts:TagSession' Effect: Allow - Resource: '*' - Sid: AllowAssumeAnyRole + Principal: + AWS: + 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':iam::654654156625:root' Version: '2012-10-17' - PolicyName: RestateTaskPolicy1A15994E - Roles: - - Ref: RestateRestateTaskTaskRole3425804E - RestateInvokerRole42565598: + RestateServiceHandlerServiceRole07B26D05: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: @@ -570,281 +886,216 @@ exports[`Restate constructs Create a self-hosted Restate environment deployed on - Action: 'sts:AssumeRole' Effect: Allow Principal: - AWS: - 'Fn::GetAtt': - - RestateRestateTaskTaskRole3425804E - - Arn + Service: lambda.amazonaws.com Version: '2012-10-17' - Description: Assumed by Restate deployment to invoke Lambda-based services - RestateLogsFD86ECAE: - Type: 'AWS::Logs::LogGroup' - Properties: - LogGroupName: /restate/Restate - RetentionInDays: 30 - UpdateReplacePolicy: Delete - DeletionPolicy: Delete - RestateSecurityGroup51491232: - Type: 'AWS::EC2::SecurityGroup' - Properties: - GroupDescription: RestateOnFargateStack/Restate/SecurityGroup - SecurityGroupEgress: - - CidrIp: 0.0.0.0/0 - Description: Allow all outbound traffic by default - IpProtocol: '-1' - VpcId: vpc-12345 - RestateSecurityGroupfromRestateOnFargateStackRestateDataStoreEfsSecurityGroupD91B15E020498B6DB4D2: - Type: 'AWS::EC2::SecurityGroupIngress' - Properties: - Description: 'from RestateOnFargateStackRestateDataStoreEfsSecurityGroupD91B15E0:2049' - FromPort: 2049 - GroupId: - 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - IpProtocol: tcp - SourceSecurityGroupId: - 'Fn::GetAtt': - - RestateDataStoreEfsSecurityGroup9E142FDF - - GroupId - ToPort: 2049 - RestateSecurityGroupfromRestateOnFargateStackRestateAlbSecurityGroup0956EE2980803FA00CFA: - Type: 'AWS::EC2::SecurityGroupIngress' - Properties: - Description: Load balancer to target - FromPort: 8080 - GroupId: - 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - IpProtocol: tcp - SourceSecurityGroupId: - 'Fn::GetAtt': - - RestateAlbSecurityGroupFAAA5CAC - - GroupId - ToPort: 8080 - RestateSecurityGroupfromRestateOnFargateStackRestateAlbSecurityGroup0956EE299070AC228309: - Type: 'AWS::EC2::SecurityGroupIngress' - Properties: - Description: Load balancer to target - FromPort: 9070 - GroupId: - 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - IpProtocol: tcp - SourceSecurityGroupId: - 'Fn::GetAtt': - - RestateAlbSecurityGroupFAAA5CAC - - GroupId - ToPort: 9070 - RestateService6A740A49: - Type: 'AWS::ECS::Service' - Properties: - Cluster: - Ref: RestateCluster26F7C702 - DeploymentConfiguration: - Alarms: - AlarmNames: [] - Enable: false - Rollback: false - DeploymentCircuitBreaker: - Enable: true - Rollback: true - MaximumPercent: 100 - MinimumHealthyPercent: 0 - DeploymentController: - Type: ECS - EnableECSManagedTags: false - HealthCheckGracePeriodSeconds: 60 - LaunchType: FARGATE - LoadBalancers: - - ContainerName: restate-runtime - ContainerPort: 8080 - TargetGroupArn: - Ref: RestateAlbIngressListenerFargateIngressTargetGroupF8DA5188 - - ContainerName: restate-runtime - ContainerPort: 9070 - TargetGroupArn: - Ref: RestateAlbAdminListenerFargateAdminTargetGroupB830BB5A - NetworkConfiguration: - AwsvpcConfiguration: - AssignPublicIp: ENABLED - SecurityGroups: - - 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - Subnets: - - s-12345 - - s-67890 - TaskDefinition: - Ref: RestateRestateTask73B141AE - DependsOn: - - RestateAlbAdminListenerFargateAdminTargetGroupB830BB5A - - RestateAlbAdminListenerDEA13626 - - RestateAlbIngressListenerFargateIngressTargetGroupF8DA5188 - - RestateAlbIngressListener7C1FE52C - - RestateRestateTaskTaskRoleDefaultPolicyD6897EE5 - - RestateRestateTaskTaskRole3425804E - RestateAlbDE422F47: - Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer' - Properties: - LoadBalancerAttributes: - - Key: deletion_protection.enabled - Value: 'false' - Scheme: internal - SecurityGroups: - - 'Fn::GetAtt': - - RestateAlbSecurityGroupFAAA5CAC - - GroupId - Subnets: - - p-12345 - - p-67890 - Type: application - RestateAlbSecurityGroupFAAA5CAC: - Type: 'AWS::EC2::SecurityGroup' - Properties: - GroupDescription: >- - Automatically created Security Group for ELB - RestateOnFargateStackRestateAlb82A45EC3 - SecurityGroupIngress: - - CidrIp: 0.0.0.0/0 - Description: Allow from anyone on port 443 - FromPort: 443 - IpProtocol: tcp - ToPort: 443 - - CidrIp: 0.0.0.0/0 - Description: Allow from anyone on port 9070 - FromPort: 9070 - IpProtocol: tcp - ToPort: 9070 - VpcId: vpc-12345 - RestateAlbSecurityGrouptoRestateOnFargateStackRestateSecurityGroup7161764780809AF9E3CE: - Type: 'AWS::EC2::SecurityGroupEgress' + ManagedPolicyArns: + - 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' + RestateServiceHandler71409CD7: + Type: 'AWS::Lambda::Function' Properties: - Description: Load balancer to target - DestinationSecurityGroupId: - 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - FromPort: 8080 - GroupId: + Code: Any + Handler: index.handler + Role: 'Fn::GetAtt': - - RestateAlbSecurityGroupFAAA5CAC - - GroupId - IpProtocol: tcp - ToPort: 8080 - RestateAlbSecurityGrouptoRestateOnFargateStackRestateSecurityGroup716176479070A56BC36B: - Type: 'AWS::EC2::SecurityGroupEgress' + - RestateServiceHandlerServiceRole07B26D05 + - Arn + Runtime: nodejs18.x + DependsOn: + - RestateServiceHandlerServiceRole07B26D05 + RestateServiceHandlerCurrentVersion40030E671fc2ba09c2d7b4ea8c6a3f8fee895a65: + Type: 'AWS::Lambda::Version' Properties: - Description: Load balancer to target - DestinationSecurityGroupId: + FunctionName: + Ref: RestateServiceHandler71409CD7 + RestateServiceHandlerCurrentVersionRestateDeploymentE8F102EB: + Type: 'Custom::RestateServiceDeployment' + Properties: + ServiceToken: 'Fn::GetAtt': - - RestateSecurityGroup51491232 - - GroupId - FromPort: 9070 - GroupId: + - ServiceDeployerCustomResourceProviderframeworkonEvent528FE6C2 + - Arn + servicePath: Service + adminUrl: 'https://test.env.us.restate.cloud:9070' + authTokenSecretArn: + 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':secretsmanager:region:account-id:secret:secret_name' + serviceLambdaArn: + Ref: >- + RestateServiceHandlerCurrentVersion40030E671fc2ba09c2d7b4ea8c6a3f8fee895a65 + invokeRoleArn: 'Fn::GetAtt': - - RestateAlbSecurityGroupFAAA5CAC - - GroupId - IpProtocol: tcp - ToPort: 9070 - RestateAlbIngressListener7C1FE52C: - Type: 'AWS::ElasticLoadBalancingV2::Listener' - Properties: - Certificates: - - CertificateArn: - Ref: RestateCertificateD6532EB8 - DefaultActions: - - TargetGroupArn: - Ref: RestateAlbIngressListenerFargateIngressTargetGroupF8DA5188 - Type: forward - LoadBalancerArn: - Ref: RestateAlbDE422F47 - Port: 443 - Protocol: HTTPS - RestateAlbIngressListenerFargateIngressTargetGroupF8DA5188: - Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' + - RestateInvokerRole42565598 + - Arn + removalPolicy: retain + private: 'false' + insecure: 'false' + DependsOn: + - ServiceDeployerInvocationPolicyD09B639D + UpdateReplacePolicy: Delete + DeletionPolicy: Delete + ServiceDeployerEventHandlerServiceRoleF133584F: + Type: 'AWS::IAM::Role' Properties: - HealthCheckIntervalSeconds: 5 - HealthCheckPath: /grpc.health.v1.Health/Check - HealthCheckTimeoutSeconds: 2 - HealthyThresholdCount: 3 - Port: 80 - Protocol: HTTP - TargetGroupAttributes: - - Key: deregistration_delay.timeout_seconds - Value: '5' - - Key: stickiness.enabled - Value: 'false' - TargetType: ip - UnhealthyThresholdCount: 3 - VpcId: vpc-12345 - RestateAlbAdminListenerDEA13626: - Type: 'AWS::ElasticLoadBalancingV2::Listener' + AssumeRolePolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Principal: + Service: lambda.amazonaws.com + Version: '2012-10-17' + ManagedPolicyArns: + - 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' + ServiceDeployerEventHandlerServiceRoleDefaultPolicyFE2DC3C9: + Type: 'AWS::IAM::Policy' Properties: - Certificates: - - CertificateArn: - Ref: RestateCertificateD6532EB8 - DefaultActions: - - TargetGroupArn: - Ref: RestateAlbAdminListenerFargateAdminTargetGroupB830BB5A - Type: forward - LoadBalancerArn: - Ref: RestateAlbDE422F47 - Port: 9070 - Protocol: HTTPS - RestateAlbAdminListenerFargateAdminTargetGroupB830BB5A: - Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' + PolicyDocument: + Statement: + - Action: + - 'secretsmanager:GetSecretValue' + - 'secretsmanager:DescribeSecret' + Effect: Allow + Resource: + 'Fn::Join': + - '' + - - 'arn:' + - Ref: 'AWS::Partition' + - ':secretsmanager:region:account-id:secret:secret_name-??????' + Version: '2012-10-17' + PolicyName: ServiceDeployerEventHandlerServiceRoleDefaultPolicyFE2DC3C9 + Roles: + - Ref: ServiceDeployerEventHandlerServiceRoleF133584F + ServiceDeployerEventHandler89EAD25F: + Type: 'AWS::Lambda::Function' Properties: - HealthCheckIntervalSeconds: 5 - HealthCheckPath: /health - HealthCheckTimeoutSeconds: 2 - HealthyThresholdCount: 3 - Port: 80 - Protocol: HTTP - TargetGroupAttributes: - - Key: deregistration_delay.timeout_seconds - Value: '5' - - Key: stickiness.enabled - Value: 'false' - TargetType: ip - UnhealthyThresholdCount: 3 - VpcId: vpc-12345 - RestateCertificateD6532EB8: - Type: 'AWS::CertificateManager::Certificate' + Architectures: + - arm64 + Code: Any + Description: Restate custom registration handler + Environment: + Variables: + NODE_OPTIONS: '--enable-source-maps' + Handler: index.handler + MemorySize: 128 + Role: + 'Fn::GetAtt': + - ServiceDeployerEventHandlerServiceRoleF133584F + - Arn + Runtime: nodejs18.x + Timeout: 180 + DependsOn: + - ServiceDeployerEventHandlerServiceRoleDefaultPolicyFE2DC3C9 + - ServiceDeployerEventHandlerServiceRoleF133584F + ServiceDeployerDeploymentLogs5B8BE5D2: + Type: 'AWS::Logs::LogGroup' Properties: - DomainName: restate.example.com - DomainValidationOptions: - - DomainName: restate.example.com - HostedZoneId: - Ref: ZoneA5DE4B68 - Tags: - - Key: Name - Value: RestateOnFargateStack/Restate/Certificate - ValidationMethod: DNS - RestateAlbAliasA12130FD: - Type: 'AWS::Route53::RecordSet' + LogGroupName: + 'Fn::Join': + - '' + - - /aws/lambda/ + - Ref: ServiceDeployerEventHandler89EAD25F + RetentionInDays: 30 + UpdateReplacePolicy: Retain + DeletionPolicy: RetainExceptOnCreate + ServiceDeployerCustomResourceProviderframeworkonEventServiceRole865AFB0C: + Type: 'AWS::IAM::Role' Properties: - AliasTarget: - DNSName: - 'Fn::Join': + AssumeRolePolicyDocument: + Statement: + - Action: 'sts:AssumeRole' + Effect: Allow + Principal: + Service: lambda.amazonaws.com + Version: '2012-10-17' + ManagedPolicyArns: + - 'Fn::Join': - '' - - - dualstack. + - - 'arn:' + - Ref: 'AWS::Partition' + - ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' + ServiceDeployerCustomResourceProviderframeworkonEventServiceRoleDefaultPolicy740A65C9: + Type: 'AWS::IAM::Policy' + Properties: + PolicyDocument: + Statement: + - Action: 'lambda:InvokeFunction' + Effect: Allow + Resource: - 'Fn::GetAtt': - - RestateAlbDE422F47 - - DNSName - HostedZoneId: - 'Fn::GetAtt': - - RestateAlbDE422F47 - - CanonicalHostedZoneID - HostedZoneId: - Ref: ZoneA5DE4B68 - Name: restate.example.com. - Type: A + - ServiceDeployerEventHandler89EAD25F + - Arn + - 'Fn::Join': + - '' + - - 'Fn::GetAtt': + - ServiceDeployerEventHandler89EAD25F + - Arn + - ':*' + Version: '2012-10-17' + PolicyName: >- + ServiceDeployerCustomResourceProviderframeworkonEventServiceRoleDefaultPolicy740A65C9 + Roles: + - Ref: >- + ServiceDeployerCustomResourceProviderframeworkonEventServiceRole865AFB0C + ServiceDeployerCustomResourceProviderframeworkonEvent528FE6C2: + Type: 'AWS::Lambda::Function' + Properties: + Code: Any + Description: >- + AWS CDK resource provider framework - onEvent + (RestateCloudStack/ServiceDeployer/CustomResourceProvider) + Environment: + Variables: + USER_ON_EVENT_FUNCTION_ARN: + 'Fn::GetAtt': + - ServiceDeployerEventHandler89EAD25F + - Arn + Handler: framework.onEvent + Role: + 'Fn::GetAtt': + - >- + ServiceDeployerCustomResourceProviderframeworkonEventServiceRole865AFB0C + - Arn + Runtime: nodejs18.x + Timeout: 900 + DependsOn: + - >- + ServiceDeployerCustomResourceProviderframeworkonEventServiceRoleDefaultPolicy740A65C9 + - ServiceDeployerCustomResourceProviderframeworkonEventServiceRole865AFB0C + ServiceDeployerInvocationPolicyD09B639D: + Type: 'AWS::IAM::Policy' + Properties: + PolicyDocument: + Statement: + - Action: 'lambda:InvokeFunction' + Effect: Allow + Resource: + - 'Fn::GetAtt': + - RestateServiceHandler71409CD7 + - Arn + - 'Fn::Join': + - '' + - - 'Fn::GetAtt': + - RestateServiceHandler71409CD7 + - Arn + - ':*' + Version: '2012-10-17' + PolicyName: ServiceDeployerInvocationPolicyD09B639D + Roles: + - Ref: RestateInvokerRole42565598 " `; -exports[`Restate constructs Deploy a Lambda service handler to a remote Restate environment 1`] = ` +exports[`Restate constructs Deploy a Lambda service handler to existing Restate environment 1`] = ` "Resources: InvokerRole4DB2757E: Type: 'AWS::IAM::Role' @@ -887,7 +1138,7 @@ exports[`Restate constructs Deploy a Lambda service handler to a remote Restate RestateApiKey6463672F: Type: 'AWS::SecretsManager::Secret' Properties: - SecretString: api-key + SecretString: api-key-raw UpdateReplacePolicy: Delete DeletionPolicy: Delete RestateServiceHandlerServiceRole07B26D05: @@ -948,12 +1199,6 @@ exports[`Restate constructs Deploy a Lambda service handler to a remote Restate - ServiceDeployerInvocationPolicyD09B639D UpdateReplacePolicy: Delete DeletionPolicy: Delete - ServiceDeployerLogs3856AE2C: - Type: 'AWS::Logs::LogGroup' - Properties: - RetentionInDays: 30 - UpdateReplacePolicy: Retain - DeletionPolicy: RetainExceptOnCreate ServiceDeployerEventHandlerServiceRoleF133584F: Type: 'AWS::IAM::Role' Properties: @@ -996,9 +1241,6 @@ exports[`Restate constructs Deploy a Lambda service handler to a remote Restate Variables: NODE_OPTIONS: '--enable-source-maps' Handler: index.handler - LoggingConfig: - LogGroup: - Ref: ServiceDeployerLogs3856AE2C MemorySize: 128 Role: 'Fn::GetAtt': @@ -1009,6 +1251,17 @@ exports[`Restate constructs Deploy a Lambda service handler to a remote Restate DependsOn: - ServiceDeployerEventHandlerServiceRoleDefaultPolicyFE2DC3C9 - ServiceDeployerEventHandlerServiceRoleF133584F + ServiceDeployerDeploymentLogs5B8BE5D2: + Type: 'AWS::Logs::LogGroup' + Properties: + LogGroupName: + 'Fn::Join': + - '' + - - /aws/lambda/ + - Ref: ServiceDeployerEventHandler89EAD25F + RetentionInDays: 30 + UpdateReplacePolicy: Retain + DeletionPolicy: RetainExceptOnCreate ServiceDeployerCustomResourceProviderframeworkonEventServiceRole865AFB0C: Type: 'AWS::IAM::Role' Properties: diff --git a/test/e2e/fargate.e2e.ts b/test/e2e/fargate.e2e.ts index 5f5f5e1..3b9c1e8 100644 --- a/test/e2e/fargate.e2e.ts +++ b/test/e2e/fargate.e2e.ts @@ -1,22 +1,42 @@ -import "source-map-support/register"; import * as cdk from "aws-cdk-lib"; +import * as lambda from "aws-cdk-lib/aws-lambda"; import * as r53 from "aws-cdk-lib/aws-route53"; -import { FargateRestateDeployment } from "../../lib/restate-constructs"; +import "source-map-support/register"; +import { ServiceDeployer } from "../../lib/restate-constructs"; +import { FargateRestateDeployment } from "../../lib/restate-constructs/fargate-restate-deployment"; + +// Deploy with: npx cdk --app 'npx tsx fargate.e2e.ts' --output cdk.fargate.out --context domainName=dev.restate.cloud --context name=fargate-e2e-test deploy const app = new cdk.App(); -const stack = new cdk.Stack(app, "e2e-RestateOnFargate", { - env: { account: app.node.getContext("account"), region: app.node.getContext("region") }, +const stack = new cdk.Stack(app, "e2e-RestateEcsFargate", { + env: { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, + }, +}); + +const handler: lambda.Function = new lambda.Function(stack, "Service", { + runtime: lambda.Runtime.NODEJS_LATEST, + code: lambda.Code.fromAsset("../handlers/dist/"), + handler: "bundle.handler", }); const hostedZone = r53.HostedZone.fromLookup(stack, "HostedZone", { domainName: app.node.getContext("domainName"), }); -const restate = new FargateRestateDeployment(stack, "Restate", { +const environment = new FargateRestateDeployment(stack, "Restate", { dnsName: `${app.node.getContext("name")}.${hostedZone.zoneName}`, hostedZone: hostedZone, }); -new cdk.CfnOutput(stack, "RestateIngressUrl", { value: restate.ingressUrl }); +const deployer = new ServiceDeployer(stack, "ServiceDeployer", { + removalPolicy: cdk.RemovalPolicy.DESTROY, + entry: "../../dist/register-service-handler/index.js", // only for tests +}); + +deployer.deployService("Greeter", handler.currentVersion, environment); + +new cdk.CfnOutput(stack, "RestateIngressUrl", { value: environment.ingressUrl }); app.synth(); diff --git a/test/e2e/restate-cloud.e2e.ts b/test/e2e/restate-cloud.e2e.ts new file mode 100644 index 0000000..dd7177e --- /dev/null +++ b/test/e2e/restate-cloud.e2e.ts @@ -0,0 +1,39 @@ +import * as cdk from "aws-cdk-lib"; +import * as lambda from "aws-cdk-lib/aws-lambda"; +import * as logs from "aws-cdk-lib/aws-logs"; +import * as secrets from "aws-cdk-lib/aws-secretsmanager"; +import "source-map-support/register"; + +import { EnvironmentId, RestateCloudEnvironment, ServiceDeployer } from "../../lib/restate-constructs"; + +// Deploy with: RESTATE_ENV_ID=env_... RESTATE_API_KEY=key_... npx cdk --app 'npx tsx restate-cloud.e2e.ts' deploy +const app = new cdk.App(); +const stack = new cdk.Stack(app, "e2e-RestateCloud"); + +if (!process.env.RESTATE_ENV_ID || !process.env.RESTATE_API_KEY) { + throw new Error("Please set RESTATE_ENV_ID and RESTATE_API_KEY"); +} + +const handler: lambda.Function = new lambda.Function(stack, "Service", { + runtime: lambda.Runtime.NODEJS_LATEST, + code: lambda.Code.fromAsset("../handlers/dist/"), + handler: "bundle.handler", +}); + +const environment = new RestateCloudEnvironment(stack, "CloudEnv", { + environmentId: process.env.RESTATE_ENV_ID! as EnvironmentId, + apiKey: new secrets.Secret(stack, "RestateCloudApiKey", { + secretStringValue: cdk.SecretValue.unsafePlainText(process.env.RESTATE_API_KEY!), + }), +}); + +const deployer = new ServiceDeployer(stack, "ServiceDeployer", { + removalPolicy: cdk.RemovalPolicy.DESTROY, + entry: "../../dist/register-service-handler/index.js", // only for tests +}); + +deployer.deployService("Greeter", handler.currentVersion, environment); + +new cdk.CfnOutput(stack, "RestateIngressUrl", { value: environment.ingressUrl }); + +app.synth(); diff --git a/test/e2e/single-node-ec2.e2e.ts b/test/e2e/single-node-ec2.e2e.ts index 6c1bf1a..0634dba 100644 --- a/test/e2e/single-node-ec2.e2e.ts +++ b/test/e2e/single-node-ec2.e2e.ts @@ -1,41 +1,39 @@ -import "source-map-support/register"; import * as cdk from "aws-cdk-lib"; -import { RestateEnvironment, ServiceDeployer, SingleNodeRestateDeployment } from "../../lib/restate-constructs"; -import * as iam from "aws-cdk-lib/aws-iam"; import * as lambda from "aws-cdk-lib/aws-lambda"; import * as logs from "aws-cdk-lib/aws-logs"; +import "source-map-support/register"; + +import { ServiceDeployer, SingleNodeRestateDeployment } from "../../lib/restate-constructs"; +// Deploy with: npx cdk --app 'npx tsx single-node-ec2.e2e.ts' deploy const app = new cdk.App(); -const stack = new cdk.Stack(app, "e2e-RestateServerEC2", { - env: { account: app.node.getContext("account"), region: app.node.getContext("region") }, +const stack = new cdk.Stack(app, "e2e-RestateSingleNodeEc2", { + env: { + account: process.env.CDK_DEFAULT_ACCOUNT, + region: process.env.CDK_DEFAULT_REGION, + }, }); const handler: lambda.Function = new lambda.Function(stack, "Service", { runtime: lambda.Runtime.NODEJS_LATEST, - code: lambda.Code.fromAsset("bundle.js"), - handler: "handler", + code: lambda.Code.fromAsset("../handlers/dist/"), + handler: "bundle.handler", }); const environment = new SingleNodeRestateDeployment(stack, "Restate", { - logGroup: new logs.LogGroup(stack, "RestateLogs", { + logGroup: new logs.LogGroup(stack, "ServerLogs", { retention: logs.RetentionDays.ONE_MONTH, removalPolicy: cdk.RemovalPolicy.DESTROY, }), }); const deployer = new ServiceDeployer(stack, "ServiceDeployer", { - logGroup: new logs.LogGroup(stack, "Deployer", { - retention: logs.RetentionDays.ONE_MONTH, - removalPolicy: cdk.RemovalPolicy.DESTROY, - }), - // vpc, - // vpcSubnets, + removalPolicy: cdk.RemovalPolicy.DESTROY, + entry: "../../dist/register-service-handler/index.js", // only for tests }); deployer.deployService("Greeter", handler.currentVersion, environment, { - private: false, - insecure: true, // self-signed certificate - skipInvokeFunctionGrant: true, + insecure: true, // accept self-signed certificate from server }); new cdk.CfnOutput(stack, "RestateIngressUrl", { value: environment.ingressUrl }); diff --git a/test/restate-constructs.test.ts b/test/restate-constructs.test.ts index 6d29dea..abbeb4d 100644 --- a/test/restate-constructs.test.ts +++ b/test/restate-constructs.test.ts @@ -1,17 +1,40 @@ import * as cdk from "aws-cdk-lib"; -import { RestateEnvironment, ServiceDeployer, SingleNodeRestateDeployment } from "../lib/restate-constructs"; -import { Construct } from "constructs"; import * as lambda from "aws-cdk-lib/aws-lambda"; -import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager"; +import * as secrets from "aws-cdk-lib/aws-secretsmanager"; import * as iam from "aws-cdk-lib/aws-iam"; import * as route53 from "aws-cdk-lib/aws-route53"; import "jest-cdk-snapshot"; +import { + RestateCloudEnvironment, + RestateEnvironment, + ServiceDeployer, + SingleNodeRestateDeployment, +} from "../lib/restate-constructs"; import { FargateRestateDeployment } from "../lib/restate-constructs/fargate-restate-deployment"; describe("Restate constructs", () => { - test("Deploy a Lambda service handler to a remote Restate environment", () => { + test("Deploy a Lambda service handler to Restate Cloud environment", () => { const app = new cdk.App(); - const stack = new LambdaServiceDeployment(app, "LambdaServiceDeployment", {}); + const stack = new cdk.Stack(app, "RestateCloudStack", { + env: { account: "account-id", region: "region" }, + }); + + const cloudEnvironment = new RestateCloudEnvironment(stack, "Restate", { + environmentId: "env_test", + apiKey: secrets.Secret.fromSecretNameV2(stack, "CloudApiKey", "secret_name"), + }); + + const handler: lambda.Function = new lambda.Function(stack, "RestateServiceHandler", { + runtime: lambda.Runtime.NODEJS_LATEST, + handler: "index.handler", + code: lambda.Code.fromInline("{ ... }"), + }); + + const serviceDeployer = new ServiceDeployer(stack, "ServiceDeployer", { + // only needed in testing, where the relative path of the registration function is different from how customers would use it + entry: "dist/register-service-handler/index.js", + }); + serviceDeployer.deployService("Service", handler.currentVersion, cloudEnvironment); expect(stack).toMatchCdkSnapshot({ ignoreAssets: true, @@ -19,17 +42,35 @@ describe("Restate constructs", () => { }); }); - test("Create a self-hosted Restate environment deployed on ECS Fargate", () => { + test("Deploy a Lambda service handler to existing Restate environment", () => { const app = new cdk.App(); - const stack = new cdk.Stack(app, "RestateOnFargateStack", { - env: { account: "account-id", region: "region" }, + const stack = new cdk.Stack(app, "LambdaServiceDeployment", {}); + + const invokerRole = new iam.Role(stack, "InvokerRole", { assumedBy: new iam.AccountRootPrincipal() }); + + const authToken = new secrets.Secret(stack, "RestateApiKey", { + secretStringValue: cdk.SecretValue.unsafePlainText("api-key-raw"), }); - new FargateRestateDeployment(stack, "Restate", { - hostedZone: new route53.HostedZone(stack, "Zone", { zoneName: "example.com" }), - dnsName: "restate.example.com", + const restateEnvironment = RestateEnvironment.fromAttributes({ + invokerRole, + adminUrl: "https://restate.example.com:9070", + authToken, }); + const handler: lambda.Function = new lambda.Function(stack, "RestateServiceHandler", { + runtime: lambda.Runtime.NODEJS_LATEST, + handler: "index.handler", + code: lambda.Code.fromInline("{ ... }"), + }); + handler.grantInvoke(invokerRole); + + const serviceDeployer = new ServiceDeployer(stack, "ServiceDeployer", { + // only needed in testing, where the relative path of the registration function is different from how customers would use it + entry: "dist/register-service-handler/index.js", + }); + serviceDeployer.deployService("Service", handler.currentVersion, restateEnvironment); + expect(stack).toMatchCdkSnapshot({ ignoreAssets: true, yaml: true, @@ -38,7 +79,7 @@ describe("Restate constructs", () => { test("Create a self-hosted Restate environment deployed on EC2", () => { const app = new cdk.App(); - const stack = new cdk.Stack(app, "RestateOnFargateStack", { + const stack = new cdk.Stack(app, "RestateSelfHostedServerEc2Stack", { env: { account: "account-id", region: "region" }, }); @@ -49,35 +90,21 @@ describe("Restate constructs", () => { yaml: true, }); }); -}); - -class LambdaServiceDeployment extends cdk.Stack { - constructor(scope: Construct, id: string, props: {} & cdk.StackProps) { - super(scope, id, props); - const invokerRole = new iam.Role(this, "InvokerRole", { assumedBy: new iam.AccountRootPrincipal() }); - - const authToken = new secretsmanager.Secret(this, "RestateApiKey", { - secretStringValue: cdk.SecretValue.unsafePlainText("api-key"), - }); - - const restateEnvironment = RestateEnvironment.fromAttributes({ - invokerRole, - adminUrl: "https://restate.example.com:9070", - authToken, + test("[Experimental] Create a self-hosted Restate environment deployed on ECS Fargate", () => { + const app = new cdk.App(); + const stack = new cdk.Stack(app, "RestateOnFargateStack", { + env: { account: "account-id", region: "region" }, }); - const handler: lambda.Function = new lambda.Function(this, "RestateServiceHandler", { - runtime: lambda.Runtime.NODEJS_LATEST, - handler: "index.handler", - code: lambda.Code.fromInline("{ ... }"), + new FargateRestateDeployment(stack, "RestateContainer", { + hostedZone: new route53.HostedZone(stack, "Zone", { zoneName: "example.com" }), + dnsName: "restate.example.com", }); - handler.grantInvoke(invokerRole); - const serviceDeployer = new ServiceDeployer(this, "ServiceDeployer", { - // only needed in testing, where the relative path of the registration function is different from how customers would use it - entry: "dist/register-service-handler/index.js", + expect(stack).toMatchCdkSnapshot({ + ignoreAssets: true, + yaml: true, }); - serviceDeployer.deployService("Service", handler.currentVersion, restateEnvironment); - } -} + }); +});