diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 94dc825..e180d99 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,6 +19,13 @@ jobs: - run: pnpm install - - run: pnpm run build + - name: Setup Rclone + uses: animmouse/setup-rclone@v1 - - run: pnpm run package + - run: ./test-go-direct.sh + working-directory: packages/aws-copy-out-sharer/docker/rclone-batch-docker-image + + - run: ./test-docker-direct.sh + working-directory: packages/aws-copy-out-sharer/docker/rclone-batch-docker-image +# - run: pnpm run build +# - run: pnpm run package diff --git a/.gitignore b/.gitignore index ee45e62..9e6ca9c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ node_modules/ cdk.context.json cdk.out/ + + +.DS_Store diff --git a/README.md b/README.md index ead4b6f..6b8d98e 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,63 @@ A service that can be installed into an Elsa Data environment and which enables parallel file copying out into a destination bucket in the same region. +NOTE: this is a general purpose "S3 file copy" tool - so might +be useful outside of Elsa Data. It can certainly be invoked +directly as a Steps function independent of Elsa Data (all +the Elsa Data does is sets up the input CSVs and then invokes +the Steps function itself). + +## Development + +On check-out (once only) (note that `pre-commit` is presumed installed externally) + +```shell +pre-commit install +``` + +For package installation (note that `pnpm` is presumed installed externally) + +```shell +pnpm install +``` + +Edit the packages and deploy to dev + +```shell +(in the dev folder) +pnpm run deploy +``` + +## Testing + +Because this service is very dependent on the behaviour of AWS Steps +(using distributed maps) - it was too complex to set up a "local" test +that would actually test much of the pieces likely to fail. + +Instead, development is done and the CDK project is deployed to a "dev" account (noting +that this sets the minimum dev cadence for trying changes +to minutes rather than seconds). + +There is then a test script - that creates samples objects - and launches +test invocations. + ## Input ```json { "sourceFilesCsvBucket": "bucket-with-csv", "sourceFilesCsvKey": "key-of-source-files.csv", - "destinationBucket": "a-target-bucket-in-same-region", + "destinationBucket": "a-target-bucket-in-same-region-but-not-same-account", "maxItemsPerBatch": 10 } ``` + +The copy will fan-out wide (to sensible width (~ 100)) - but there is a small AWS Config +cost to the startup/shutdown +of the Fargate tasks. Therefore the `maxItemsPerBatch` controls how many individuals files are attempted per +Fargate task - though noting that we request SPOT tasks. + +So there is balance between the likelihood of SPOT interruptions v re-use of Fargate tasks. If +tasks are SPOT interrupted - then the next invocation will skip already transferred files (assuming +at least one is copied) - so it is probably safe and cheapest to leave the items per batch at 10 +and be prepared to perhaps re-execute the copy. diff --git a/dev/EXAMPLE-COPY-README.md b/dev/EXAMPLE-COPY-README.md new file mode 100644 index 0000000..6bc0bf1 --- /dev/null +++ b/dev/EXAMPLE-COPY-README.md @@ -0,0 +1,36 @@ +How to do a full scale invoke test. + +Go to "elsa-data-tmp" bucket in dev. +It probably will be empty as objects auto-expire. +Make a folder "copy-out-test-working". +Copy "example-copy-manifest.csv" to that folder. + +THE FOLDER MUST BE EXACTLY AS SPECIFIED AS THAT PERMISSION IS BAKED INTO +THE DEV DEPLOYMENT (IN ORDER TO TEST PERMISSIONS!) + +Invoke the dev Steps with the input (feel free to change to "0\_" if you +want to run multiple experiments without overriding the results) + +```json +{ + "sourceFilesCsvBucket": "elsa-data-tmp", + "sourceFilesCsvKey": "example-copy-manifest.csv", + "destinationBucket": "elsa-data-copy-target-sydney", + "maxItemsPerBatch": 2, + "destinationStartCopyRelativeKey": "0_STARTED_COPY.txt", + "destinationEndCopyRelativeKey": "0_ENDED_COPY.csv" +} +``` + +For a test of AG (in the AG account - with public/made up data files) + +```json +{ + "sourceFilesCsvBucket": "elsa-data-copy-working", + "sourceFilesCsvKey": "example-copy-manifest-ag.csv", + "destinationBucket": "elsa-data-copy-target-sydney", + "maxItemsPerBatch": 1, + "destinationStartCopyRelativeKey": "AG_STARTED_COPY.txt", + "destinationEndCopyRelativeKey": "AG_ENDED_COPY.csv" +} +``` diff --git a/dev/constants.ts b/dev/constants.ts new file mode 100644 index 0000000..31e6d1b --- /dev/null +++ b/dev/constants.ts @@ -0,0 +1,22 @@ +/** + * The only configurable item needed for the test cases - set this to a bucket you have + * full access to. Ideally the bucket should have a lifecycle that auto expires objects after 1 day. + * In order to keep minimal AWS permissions this is also specified + * in the CDK deployment. + */ +export const TEST_BUCKET = "elsa-data-tmp"; + +/** + * A designated area in our test bucket that is where we can find the list + * of objects to copy - and other working files + * NOTE: this is not where the source or destination files are located. + */ +export const TEST_BUCKET_WORKING_PREFIX = "copy-out-test-working/"; + +/** + * We have a clear permissions split between the objects that we are copying - and + * the working objects we create in doing the copy. By making sure they are in + * different test folders - we can confirm that our permissions aren't accidentally + * overlapping (which might mean we pass tests that later fail for real) + */ +export const TEST_BUCKET_OBJECT_PREFIX = "copy-out-test-objects/"; diff --git a/dev/dev.ts b/dev/dev.ts index 97fe028..9e3b75f 100644 --- a/dev/dev.ts +++ b/dev/dev.ts @@ -1,6 +1,10 @@ -import { CopyOutStack } from "aws-copy-out-sharer"; -import { SubnetType } from "aws-cdk-lib/aws-ec2"; -import { App } from "aws-cdk-lib"; +import { CopyOutStateMachineConstruct } from "aws-copy-out-sharer"; +import { SubnetType, Vpc } from "aws-cdk-lib/aws-ec2"; +import { App, Stack, StackProps } from "aws-cdk-lib"; +import { InfrastructureClient } from "@elsa-data/aws-infrastructure"; +import { Service } from "aws-cdk-lib/aws-servicediscovery"; +import { Construct } from "constructs"; +import { TEST_BUCKET, TEST_BUCKET_WORKING_PREFIX } from "./constants"; const app = new App(); @@ -8,8 +12,54 @@ const description = "Bulk copy-out service for Elsa Data - an application for controlled genomic data sharing"; const devId = "ElsaDataDevCopyOutStack"; +const agId = "ElsaDataAgCopyOutStack"; -new CopyOutStack(app, devId, { +/** + * Wraps the copy out construct for development purposes. We don't do this Stack definition in the + * construct itself - as unlike some other Elsa Data constructs - there may be general + * utility to the copy out service (i.e. we want to let people just install the Copy Out + * state machine without elsa infrastructure). But for dev purposes we are developing + * this in conjunction with Elsa Data - so we register it into the namespace and use a common + * VPC etc. + */ +class ElsaDataCopyOutStack extends Stack { + constructor(scope?: Construct, id?: string, props?: StackProps) { + super(scope, id, props); + + // our client unlocks the ability to fetch/create CDK objects that match our + // installed infrastructure stack (by infrastructure stack name) + const infraClient = new InfrastructureClient( + "ElsaDataDevInfrastructureStack", + ); + + const vpc = infraClient.getVpcFromLookup(this); + + const namespace = infraClient.getNamespaceFromLookup(this); + + const service = new Service(this, "Service", { + namespace: namespace, + name: "CopyOut", + description: "Parallel file copying service", + }); + + const copyOut = new CopyOutStateMachineConstruct(this, "CopyOut", { + vpc: vpc, + vpcSubnetSelection: SubnetType.PRIVATE_WITH_EGRESS, + workingBucket: TEST_BUCKET, + workingBucketPrefixKey: TEST_BUCKET_WORKING_PREFIX, + aggressiveTimes: true, + allowWriteToInstalledAccount: true, + }); + + service.registerNonIpInstance("StateMachine", { + customAttributes: { + stateMachineArn: copyOut.stateMachine.stateMachineArn, + }, + }); + } +} + +new ElsaDataCopyOutStack(app, devId, { // the stack can only be deployed to 'dev' env: { account: "843407916570", @@ -20,7 +70,40 @@ new CopyOutStack(app, devId, { "umccr-org:Stack": devId, }, description: description, - isDevelopment: true, - infrastructureStackName: "ElsaDataDevInfrastructureStack", - infrastructureSubnetSelection: SubnetType.PRIVATE_WITH_EGRESS, +}); + +/** + * Wraps an even simpler deployment direct for AG. We have needs to do AG copies + * outside of Elsa. This is also a good test of the copy-out mechanics. So this + * allows us to directly deploy/destroy. + */ +class ElsaDataSimpleCopyOutStack extends Stack { + constructor(scope?: Construct, id?: string, props?: StackProps) { + super(scope, id, props); + + const vpc = Vpc.fromLookup(this, "Vpc", { vpcName: "main-vpc" }); + + const copyOut = new CopyOutStateMachineConstruct(this, "CopyOut", { + vpc: vpc, + vpcSubnetSelection: SubnetType.PRIVATE_WITH_EGRESS, + workingBucket: "elsa-data-copy-working", + aggressiveTimes: false, + allowWriteToInstalledAccount: true, + }); + + //stateMachineArn: copyOut.stateMachine.stateMachineArn, + } +} + +new ElsaDataSimpleCopyOutStack(app, agId, { + // the stack can only be deployed to 'dev' + env: { + account: "602836945884", + region: "ap-southeast-2", + }, + tags: { + "umccr-org:Product": "ElsaData", + "umccr-org:Stack": agId, + }, + description: description, }); diff --git a/dev/example-copy-manifest-ag.csv b/dev/example-copy-manifest-ag.csv new file mode 100644 index 0000000..18c3ad9 --- /dev/null +++ b/dev/example-copy-manifest-ag.csv @@ -0,0 +1,2 @@ +elsa-data-demo-agha-gdr-store,FLAGSHIP_A/2020-02-01/ERR251112_R1.fastq.gz +elsa-data-demo-agha-gdr-store,FLAGSHIP_A/2020-02-01/ERR251112_R2.fastq.gz diff --git a/dev/example-copy-manifest.csv b/dev/example-copy-manifest.csv new file mode 100644 index 0000000..ca86f0d --- /dev/null +++ b/dev/example-copy-manifest.csv @@ -0,0 +1,13 @@ +umccr-10f-data-dev,"ASHKENAZIM/HG002-HG003-HG004.joint.filter.bcf" +umccr-10f-data-dev,"ASHKENAZIM/HG002-HG003-HG004.joint.filter.bcf.csi" +umccr-10f-data-dev,"ASHKENAZIM/HG002-HG003-HG004.joint.filter.vcf" +umccr-10f-data-dev,"ASHKENAZIM/HG002-HG003-HG004.joint.filter.vcf.gz" +umccr-10f-data-dev,"ASHKENAZIM/HG002-HG003-HG004.joint.filter.vcf.gz.csi" +umccr-10f-data-dev,"ASHKENAZIM/HG002-HG003-HG004.joint.filter.vcf.gz.tbi" +umccr-10f-data-dev,AFILETHATDOESNOTEXIST.txt +umccr-10f-data-dev,ASHKENAZIM/HG002.bam +umccr-10f-data-dev,ASHKENAZIM/HG002.bam.bai +umccr-10f-data-dev,ASHKENAZIM/HG003.bam +umccr-10f-data-dev,ASHKENAZIM/HG003.bam.bai +umccr-10f-data-dev,ASHKENAZIM/HG004.bam +umccr-10f-data-dev,ASHKENAZIM/HG004.bam.bai diff --git a/dev/package.json b/dev/package.json index fb8a0c7..d609d55 100644 --- a/dev/package.json +++ b/dev/package.json @@ -3,10 +3,24 @@ "private": true, "version": "0.0.0", "description": "Manual CDK deployment for development", + "scripts": { + "deploy": "pnpm -w run build && cdk deploy ElsaDataDevCopyOutStack", + "destroy": "pnpm -w run build && cdk destroy ElsaDataDevCopyOutStack", + "agdeploy": "pnpm -w run build && cdk deploy ElsaDataAgCopyOutStack", + "agdestroy": "pnpm -w run build && cdk destroy ElsaDataAgCopyOutStack", + "test": "ts-node --prefer-ts-exts test.ts", + "test-quick": "ts-node --prefer-ts-exts test.ts" + }, "dependencies": { - "aws-cdk": "2.93.0", - "aws-cdk-lib": "2.93.0", - "aws-copy-out-sharer": "link:../packages/aws-copy-out-sharer" + "@aws-sdk/client-s3": "3.576.0", + "@aws-sdk/client-servicediscovery": "3.576.0", + "@aws-sdk/client-sfn": "3.576.0", + "@aws-sdk/client-sso-oidc": "3.574.0", + "@elsa-data/aws-infrastructure": "1.5.1", + "aws-cdk": "2.141.0", + "aws-cdk-lib": "2.141.0", + "aws-copy-out-sharer": "link:../packages/aws-copy-out-sharer", + "constructs": "10.3.0" }, "devDependencies": {} } diff --git a/dev/test.ts b/dev/test.ts new file mode 100644 index 0000000..bf19db6 --- /dev/null +++ b/dev/test.ts @@ -0,0 +1,198 @@ +import { randomBytes } from "crypto"; +import { S3Client, PutObjectCommand, StorageClass } from "@aws-sdk/client-s3"; +import { SFNClient, StartExecutionCommand } from "@aws-sdk/client-sfn"; +import { + DiscoverInstancesCommand, + ServiceDiscoveryClient, +} from "@aws-sdk/client-servicediscovery"; +import { + TEST_BUCKET, + TEST_BUCKET_OBJECT_PREFIX, + TEST_BUCKET_WORKING_PREFIX, +} from "./constants"; +import { makeObjectDictionaryCsv, makeTestObject } from "./tests-util"; + +const discoveryClient = new ServiceDiscoveryClient({}); +const s3Client = new S3Client({}); +const sfnClient = new SFNClient({}); + +// generate a unique run folder for this execution of the entire test suite +const uniqueFolder = randomBytes(8).toString("hex"); + +function getPaths(testNumber: number) { + const tsvName = `${testNumber}-objects-to-copy.tsv`; + + return { + // because this must exist in the working folder - we need it + // both as a relative path (how we will refer to it within the steps) + // and an absolute path (for use outside our steps) + testFolderObjectsTsvRelative: `${uniqueFolder}/${tsvName}`, + testFolderObjectsTsvAbsolute: `${TEST_BUCKET_WORKING_PREFIX}${uniqueFolder}/${tsvName}`, + + testFolderSrc: `${TEST_BUCKET_OBJECT_PREFIX}${uniqueFolder}/${testNumber}-src/`, + testFolderDest: `${TEST_BUCKET_OBJECT_PREFIX}${uniqueFolder}/${testNumber}-dest/`, + }; +} + +async function doTest1(stateMachineArn: string) { + const { + testFolderSrc, + testFolderDest, + testFolderObjectsTsvAbsolute, + testFolderObjectsTsvRelative, + } = getPaths(1); + + // 3 files in standard storage (no thawing) + const sourceObjects = { + [`${testFolderSrc}/1.bin`]: StorageClass.STANDARD, + [`${testFolderSrc}/2.bin`]: StorageClass.STANDARD, + [`${testFolderSrc}/3.bin`]: StorageClass.STANDARD, + }; + + for (const [n, stor] of Object.entries(sourceObjects)) { + await makeTestObject(TEST_BUCKET, n, 256 * 1024, stor); + } + + await makeObjectDictionaryCsv(TEST_BUCKET, testFolderObjectsTsvAbsolute, { + TEST_BUCKET: Object.keys(sourceObjects), + }); + + await sfnClient.send( + new StartExecutionCommand({ + stateMachineArn: stateMachineArn, + input: JSON.stringify({ + sourceFilesCsvKey: testFolderObjectsTsvRelative, + destinationBucket: TEST_BUCKET, + destinationPrefixKey: testFolderDest, + maxItemsPerBatch: 1, + }), + }), + ); +} + +async function doTest2(stateMachineArn: string) { + const { + testFolderSrc, + testFolderDest, + testFolderObjectsTsvAbsolute, + testFolderObjectsTsvRelative, + } = getPaths(1); + + // we are going to make objects that are in both the src *and* destination + // this will let us test our "checksum skipping" + + // same name and same content + await makeTestObject( + TEST_BUCKET, + `${testFolderSrc}existing-a.bin`, + 256 * 1024, + ); + await makeTestObject( + TEST_BUCKET, + `${testFolderDest}existing-a.bin`, + 256 * 1024, + ); + + // same name and different content - the result should be that rclone *does* copy this + await makeTestObject( + TEST_BUCKET, + `${testFolderSrc}existing-b.bin`, + 64 * 1024, + ); + await makeTestObject( + TEST_BUCKET, + `${testFolderDest}existing-b.bin`, + 64 * 1024, + "STANDARD", + 1, + ); + + await makeObjectDictionaryCsv(TEST_BUCKET, testFolderObjectsTsvAbsolute, { + "umccr-10g-data-dev": [ + "HG00096/HG00096.hard-filtered.vcf.gz", + "HG00097/HG00097.hard-filtered.vcf.gz", + // this does not exist + "HG000XX/HG000XX.hard-filtered.vcf.gz", + ], + "not-a-bucket-that-exists": ["a-file-that-also-does-not-exist.bam"], + [TEST_BUCKET]: [ + `${testFolderSrc}existing-a.bin`, + `${testFolderSrc}existing-b.bin`, + ], + }); + + await sfnClient.send( + new StartExecutionCommand({ + stateMachineArn: stateMachineArn, + input: JSON.stringify({ + sourceFilesCsvKey: testFolderObjectsTsvRelative, + destinationBucket: TEST_BUCKET, + destinationPrefixKey: testFolderDest, + maxItemsPerBatch: 2, + }), + }), + ); +} + +// s3:///HG00096/HG00096.hard-filtered.vcf.gz +async function doTest3(stateMachineArn: string) { + const testFolderSrc = uniqueFolder + "-src2"; + const testFolderDest = uniqueFolder + "-dest2"; + + const sourceObjects = { + [`${testFolderSrc}/1.bin`]: StorageClass.GLACIER_IR, + [`${testFolderSrc}/2.bin`]: StorageClass.STANDARD, + [`${testFolderSrc}/3.bin`]: StorageClass.GLACIER, + }; + + for (const [n, stor] of Object.entries(sourceObjects)) { + await makeTestObject(TEST_BUCKET, n, 1000, stor); + } + + //await makeObjectDictionaryCsv(TEST_BUCKET, testFolderObjectsTsvAbsolute, { + // TEST_BUCKET: Object.keys(sourceObjects), + //}); + + await sfnClient.send( + new StartExecutionCommand({ + stateMachineArn: stateMachineArn, + input: JSON.stringify({ + sourceFilesCsvKey: `${testFolderSrc}/objects-to-copy.tsv`, + destinationBucket: TEST_BUCKET, + destinationPrefixKey: testFolderDest, + maxItemsPerBatch: 1, + }), + }), + ); +} + +(async () => { + console.log(`Working folder = ${TEST_BUCKET}:${uniqueFolder}`); + + const stepsDiscover = await discoveryClient.send( + new DiscoverInstancesCommand({ + NamespaceName: "elsa-data", + ServiceName: "CopyOut", + }), + ); + + if ( + !stepsDiscover || + !stepsDiscover.Instances || + stepsDiscover.Instances.length != 1 + ) + throw new Error( + "Did not discover the expected number of CopyOut instances in the Elsa Data CloudMap", + ); + + const stateMachineDiscovered = stepsDiscover?.Instances[0]; + + if (!stateMachineDiscovered.Attributes) + throw new Error( + "Did not discover state machine settings in CopyOut CloudMap", + ); + + const stateMachineArn = stateMachineDiscovered.Attributes["stateMachineArn"]; + + await doTest2(stateMachineArn); +})(); diff --git a/dev/tests-util.ts b/dev/tests-util.ts new file mode 100644 index 0000000..1940305 --- /dev/null +++ b/dev/tests-util.ts @@ -0,0 +1,68 @@ +import { PutObjectCommand, S3Client, StorageClass } from "@aws-sdk/client-s3"; + +const s3Client = new S3Client({}); + +/** + * Put a dictionary of objects as a two column CSV into an S3 object. + * + * @param csvBucket + * @param csvAbsoluteKey the key of the CSV in the working folder + * @param objects a dictionary of buckets->key[] + */ +export async function makeObjectDictionaryCsv( + csvBucket: string, + csvAbsoluteKey: string, + objects: Record, +) { + let content = ""; + + // for each bucket + for (const b of Object.keys(objects)) { + // for each key + for (const k of objects[b]) content += `${b},"${k}"\n`; + } + + // now save the CSV to S3 + const response = await s3Client.send( + new PutObjectCommand({ + Bucket: csvBucket, + Key: csvAbsoluteKey, + Body: content, + }), + ); +} + +/** + * Makes an S3 object of a certain size and storage class - and + * filled with basically blank data + * + * @param bucket the bucket of the object + * @param key the key of the object + * @param sizeInBytes the size in bytes of the object to make + * @param storageClass the storage class for the object, defaults to STANDARD + * @param forceContentByte force a content byte if the default needs to be overridden + * @returns the byte value that is the content of the created file + */ +export async function makeTestObject( + bucket: string, + key: string, + sizeInBytes: number, + storageClass: StorageClass = "STANDARD", + forceContentByte: number | undefined = undefined, +) { + const contentByte = + forceContentByte === undefined ? sizeInBytes % 256 : forceContentByte; + const response = await s3Client.send( + new PutObjectCommand({ + Bucket: bucket, + Key: key, + // so rather than make every file filled with 0s - we fill + // with a value that depends on the size... no particular + // point other than we can I guess assert content has been + // successfully copied by looking at the destination content after copy + Body: Buffer.alloc(sizeInBytes, contentByte), + StorageClass: storageClass, + }), + ); + return contentByte; +} diff --git a/packages/aws-copy-out-sharer/README.md b/packages/aws-copy-out-sharer/README.md new file mode 100644 index 0000000..7b7bc85 --- /dev/null +++ b/packages/aws-copy-out-sharer/README.md @@ -0,0 +1,3 @@ +# Copy out state machine + +A construct for a AWS Steps Copy Out state machine. diff --git a/packages/aws-copy-out-sharer/construct/can-write-lambda/can-write-lambda.js b/packages/aws-copy-out-sharer/construct/can-write-lambda/can-write-lambda.js deleted file mode 100644 index e4646e6..0000000 --- a/packages/aws-copy-out-sharer/construct/can-write-lambda/can-write-lambda.js +++ /dev/null @@ -1,52 +0,0 @@ -const { PutObjectCommand, S3Client } = require("@aws-sdk/client-s3"); - -export const handler = async (event) => { - function WrongRegionError(message) { - this.name = "WrongRegionError"; - this.message = message; - } - WrongRegionError.prototype = new Error(); - - function AccessDeniedError(message) { - this.name = "AccessDeniedError"; - this.message = message; - } - AccessDeniedError.prototype = new Error(); - - console.log(event.requiredRegion); - console.log(event.destinationBucket); - - // we are being super specific here - the required region is where we are going - // to make our client - in order to ensure we get 301 Redirects for buckets outside our location - const client = new S3Client({ region: event.requiredRegion }); - - try { - const putCommand = new PutObjectCommand({ - Bucket: event.destinationBucket, - Key: "ELSA_DATA_STARTED_TRANSFER.txt", - Body: "A file created by Elsa Data copy out to ensure correct permissions", - }); - - const response = await client.send(putCommand); - } catch (e) { - if (e.Code === "PermanentRedirect") - throw new WrongRegionError( - "S3 Put failed because bucket was in the wrong region", - ); - - if (e.Code === "AccessDenied") - throw new AccessDeniedError("S3 Put failed with access denied error"); - - throw e; - } -}; - -/*handler({ - requiredRegion: "ap-southeast-2", - //destinationBucket: "elsa-data-tmp" - //destinationBucket: "cdk-hnb659fds-assets-843407916570-us-east-1" - //destinationBucket: "elsa-data-replication-target-foo" - destinationBucket: "elsa-data-replication-target" - // destinationBucket: "elsa-data-copy-target-sydney" - // destinationBucket: "elsa-data-copy-target-tokyo" -}) */ diff --git a/packages/aws-copy-out-sharer/construct/can-write-lambda/package.json b/packages/aws-copy-out-sharer/construct/can-write-lambda/package.json deleted file mode 100644 index 6c62bf2..0000000 --- a/packages/aws-copy-out-sharer/construct/can-write-lambda/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "can-write-lambda", - "version": "1.0.0", - "main": "can-write-lambda.js", - "dependencies": { - "@aws-sdk/client-s3": "^3.405.0" - } -} diff --git a/packages/aws-copy-out-sharer/construct/copy-out-state-machine-construct.ts b/packages/aws-copy-out-sharer/construct/copy-out-state-machine-construct.ts deleted file mode 100644 index e66ae22..0000000 --- a/packages/aws-copy-out-sharer/construct/copy-out-state-machine-construct.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { Construct } from "constructs"; -import { Effect, ManagedPolicy, PolicyStatement } from "aws-cdk-lib/aws-iam"; -import { - ChainDefinitionBody, - Fail, - Pass, - StateMachine, - Succeed, - Wait, - WaitTime, -} from "aws-cdk-lib/aws-stepfunctions"; -import { Arn, ArnFormat, Duration, Stack } from "aws-cdk-lib"; -import { ICluster } from "aws-cdk-lib/aws-ecs"; -import { Service } from "aws-cdk-lib/aws-servicediscovery"; -import { CanWriteLambdaStepConstruct } from "./can-write-lambda-step-construct"; -import { IVpc, SubnetType } from "aws-cdk-lib/aws-ec2"; -import { DistributedMapStepConstruct } from "./distributed-map-step-construct"; -import { FargateRunTaskConstruct } from "./fargate-run-task-construct"; - -export type CopyOutStateMachineProps = { - vpc: IVpc; - - vpcSubnetSelection: SubnetType; - - fargateCluster: ICluster; - - namespaceService: Service; - - /** - * Whether the stack should use duration/timeouts that are more suited - * to demonstration/development. i.e. minutes rather than hours for wait times, - * hours rather than days for copy time outs. - */ - aggressiveTimes?: boolean; -}; - -export class CopyOutStateMachineConstruct extends Construct { - private readonly stateMachine: StateMachine; - constructor(scope: Construct, id: string, props: CopyOutStateMachineProps) { - super(scope, id); - - const canWriteLambdaStep = new CanWriteLambdaStepConstruct( - this, - "CanWrite", - { - vpc: props.vpc, - vpcSubnetSelection: props.vpcSubnetSelection, - requiredRegion: Stack.of(this).region, - }, - ); - - const rcloneRunTask = new FargateRunTaskConstruct( - this, - "RcloneFargateTask", - { - fargateCluster: props.fargateCluster, - vpcSubnetSelection: props.vpcSubnetSelection, - }, - ).ecsRunTask; - - // our task is an idempotent copy operation so we can retry if we happen to get killed - // (possible given we are using Spot fargate) - rcloneRunTask.addRetry({ - errors: ["States.TaskFailed"], - maxAttempts: 3, - }); - - const distributedMapStep = new DistributedMapStepConstruct( - this, - "MapStep", - { - task: rcloneRunTask, - }, - ).distributedMapStep; - - const canWriteStep = canWriteLambdaStep.invocableLambda; - - const waitStep = new Wait(this, "Wait X Minutes", { - time: WaitTime.duration( - props.aggressiveTimes ? Duration.seconds(30) : Duration.minutes(10), - ), - }); - - const defineDefaults = new Pass(this, "Define Defaults", { - parameters: { - maxItemsPerBatch: 1, - }, - resultPath: "$.inputDefaults", - }); - - const success = new Succeed(this, "Succeed"); - - const fail = new Fail(this, "Fail Wrong Bucket Region"); - - const applyDefaults = new Pass(this, "Apply Defaults", { - // merge default parameters into whatever the user has sent us - resultPath: "$.withDefaults", - outputPath: "$.withDefaults.args", - parameters: { - "args.$": - "States.JsonMerge($.inputDefaults, $$.Execution.Input, false)", - }, - }); - - canWriteStep.addCatch(waitStep.next(canWriteStep), { - errors: ["AccessDeniedError"], - }); - - canWriteStep.addCatch(fail, { errors: ["WrongRegionError"] }); - - const definition = ChainDefinitionBody.fromChainable( - defineDefaults - .next(applyDefaults) - .next(canWriteStep) - .next(distributedMapStep) - .next(success), - ); - - // NOTE: we use a technique here to allow optional input parameters to the state machine - // by defining defaults and then JsonMerging them with the actual input params - this.stateMachine = new StateMachine(this, "StateMachine", { - // we give people a window of time in which to create the destination bucket - so this - // could run a long time - timeout: props.aggressiveTimes ? Duration.hours(24) : Duration.days(30), - definitionBody: definition, - }); - - // this is needed to support distributed map - once there is a native CDK for this I presume this goes - this.stateMachine.addToRolePolicy( - new PolicyStatement({ - effect: Effect.ALLOW, - actions: ["states:StartExecution"], - resources: [ - Arn.format( - { - arnFormat: ArnFormat.COLON_RESOURCE_NAME, - service: "states", - resource: "stateMachine", - resourceName: "*", - }, - Stack.of(this), - ), - ], - }), - ); - - // this is needed to support distributed map - once there is a native CDK for this I presume this goes - this.stateMachine.addToRolePolicy( - new PolicyStatement({ - effect: Effect.ALLOW, - actions: ["states:DescribeExecution", "states:StopExecution"], - resources: [ - Arn.format( - { - arnFormat: ArnFormat.COLON_RESOURCE_NAME, - service: "states", - resource: "execution", - resourceName: "*" + "/*", - }, - Stack.of(this), - ), - ], - }), - ); - - // this is too broad - but once the CFN native Distributed Map is created - it will handle this for us - // (I think it isn't doing it because of our DummyMap) - this.stateMachine.addToRolePolicy( - new PolicyStatement({ - effect: Effect.ALLOW, - actions: ["lambda:InvokeFunction"], - resources: ["*"], - }), - ); - - this.stateMachine.addToRolePolicy( - new PolicyStatement({ - effect: Effect.ALLOW, - actions: ["ecs:*", "iam:PassRole"], - resources: ["*"], - }), - ); - - // TODO tighten this - this.stateMachine.role.addManagedPolicy( - ManagedPolicy.fromAwsManagedPolicyName("AmazonS3FullAccess"), - ); - - this.stateMachine.role.addManagedPolicy( - ManagedPolicy.fromAwsManagedPolicyName("CloudWatchEventsFullAccess"), - ); - - props.namespaceService.registerNonIpInstance("StateMachine", { - customAttributes: { - stateMachineArn: this.stateMachine.stateMachineArn, - }, - }); - } -} diff --git a/packages/aws-copy-out-sharer/construct/distributed-map-step-construct.ts b/packages/aws-copy-out-sharer/construct/distributed-map-step-construct.ts deleted file mode 100644 index 0e6e2d0..0000000 --- a/packages/aws-copy-out-sharer/construct/distributed-map-step-construct.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Construct } from "constructs"; -import { - CustomState, - IChainable, - JsonPath, - Map, -} from "aws-cdk-lib/aws-stepfunctions"; - -type Props = { - task: IChainable; -}; - -export class DistributedMapStepConstruct extends Construct { - public readonly distributedMapStep: CustomState; - - constructor(scope: Construct, id: string, props: Props) { - super(scope, id); - - // This is a workaround from the following issue - // https://github.com/aws/aws-cdk/issues/23216 - // awaiting native support for a Distributed Map in CDK - // this uses a dummy map in order to generate all the fields we - // need to iterate over our ECS task - const dummyMap = new Map(this, "DummyMap"); - dummyMap.iterator(props.task); - const mapItemProcessor = (dummyMap.toStateJson() as any).Iterator; - - // { - // "BatchInput": { - // "destinationBucketForRclone": "s3:cpg-cardiac-flagship-transfer" - // }, - // "Items": [ - // { - // "source": "s3:bucket/1.fastq.gz" - // }, - // { - // "source": "s3:bucket/2.fastq.gz" - // }, - // } - - // these names are internal only - but we pull out as a const to make sure - // they are consistent - const bucketColumnName = "b"; - const keyColumnName = "k"; - - this.distributedMapStep = new CustomState(this, "DistributedMap", { - stateJson: { - // https://states-language.net/#map-state - Type: "Map", - // we need to be careful of the concurrency of the Fargate RunTask.. - // not sure distributed map knows how to handle back-off?? - // https://docs.aws.amazon.com/AmazonECS/latest/userguide/throttling.html - MaxConcurrency: 80, - ToleratedFailurePercentage: 25, - ItemReader: { - ReaderConfig: { - InputType: "CSV", - // note we are providing the nominal column names.. there is no header row in the CSV - CSVHeaderLocation: "GIVEN", - CSVHeaders: [bucketColumnName, keyColumnName], - }, - Resource: "arn:aws:states:::s3:getObject", - Parameters: { - "Bucket.$": "$.sourceFilesCsvBucket", - "Key.$": "$.sourceFilesCsvKey", - }, - }, - ItemBatcher: { - MaxItemsPerBatchPath: JsonPath.stringAt("$.maxItemsPerBatch"), - BatchInput: { - "destinationBucketForRclone.$": JsonPath.format( - "s3:{}", - JsonPath.stringAt("$.destinationBucket"), - ), - }, - }, - ItemProcessor: { - ...mapItemProcessor, - ProcessorConfig: { - Mode: "DISTRIBUTED", - ExecutionType: "STANDARD", - }, - }, - ItemSelector: { - "source.$": JsonPath.format( - // note: this is not an s3:// URL, it is the peculiar syntax used by rclone - "s3:{}/{}", - JsonPath.stringAt(`$$.Map.Item.Value.${bucketColumnName}`), - JsonPath.stringAt(`$$.Map.Item.Value.${keyColumnName}`), - ), - }, - }, - }); - } -} diff --git a/packages/aws-copy-out-sharer/construct/rclone-batch-copy-docker-image/Dockerfile b/packages/aws-copy-out-sharer/construct/rclone-batch-copy-docker-image/Dockerfile deleted file mode 100644 index b36abe0..0000000 --- a/packages/aws-copy-out-sharer/construct/rclone-batch-copy-docker-image/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM rclone/rclone:1.63.1 - -# a shell script that allows us to take more batch like input to rclone -COPY rclone-batch-copy.sh /app/ - -ENTRYPOINT ["/bin/sh", "/app/rclone-batch-copy.sh"] diff --git a/packages/aws-copy-out-sharer/construct/rclone-batch-copy-docker-image/rclone-batch-copy.sh b/packages/aws-copy-out-sharer/construct/rclone-batch-copy-docker-image/rclone-batch-copy.sh deleted file mode 100644 index a299157..0000000 --- a/packages/aws-copy-out-sharer/construct/rclone-batch-copy-docker-image/rclone-batch-copy.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo "Destination = $destination" - -for src in "$@"; do - echo "Source arg = $src" - /usr/local/bin/rclone copy --stats-log-level NOTICE --checksum "$src" "$destination" -done diff --git a/packages/aws-copy-out-sharer/copy-out-stack-props.ts b/packages/aws-copy-out-sharer/copy-out-stack-props.ts deleted file mode 100644 index b135db3..0000000 --- a/packages/aws-copy-out-sharer/copy-out-stack-props.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { SubnetType } from "aws-cdk-lib/aws-ec2"; -import { StackProps } from "aws-cdk-lib"; - -export { SubnetType } from "aws-cdk-lib/aws-ec2"; - -export interface CopyOutStackProps extends StackProps { - readonly isDevelopment?: boolean; - - /** - * The name of a previously installed stack providing us with network/db/storage/cert infrastructure - * via cloud formation exports. - */ - readonly infrastructureStackName: string; - - /** - * The choice of what subnet in the VPC we want to run this copy operation. - */ - readonly infrastructureSubnetSelection: SubnetType; -} diff --git a/packages/aws-copy-out-sharer/copy-out-stack.ts b/packages/aws-copy-out-sharer/copy-out-stack.ts deleted file mode 100644 index 18767da..0000000 --- a/packages/aws-copy-out-sharer/copy-out-stack.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Stack } from "aws-cdk-lib"; -import { Construct } from "constructs"; -import { CopyOutStackProps } from "./copy-out-stack-props"; -import { Cluster } from "aws-cdk-lib/aws-ecs"; -import { CopyOutStateMachineConstruct } from "./construct/copy-out-state-machine-construct"; -import { Service } from "aws-cdk-lib/aws-servicediscovery"; -import { InfrastructureClient } from "@elsa-data/aws-infrastructure-client"; - -export { CopyOutStackProps, SubnetType } from "./copy-out-stack-props"; - -export class CopyOutStack extends Stack { - constructor(scope: Construct, id: string, props: CopyOutStackProps) { - super(scope, id, props); - - // our client unlocks the ability to fetch/create CDK objects that match our - // installed infrastructure stack (by infrastructure stack name) - const infraClient = new InfrastructureClient(props.infrastructureStackName); - - const vpc = infraClient.getVpcFromLookup(this); - - const namespace = infraClient.getNamespaceFromLookup(this); - - const cluster = new Cluster(this, "FargateCluster", { - vpc: vpc, - enableFargateCapacityProviders: true, - }); - - const service = new Service(this, "Service", { - namespace: namespace, - name: "CopyOut", - description: "Parallel file copying service", - }); - - new CopyOutStateMachineConstruct(this, "CopyOut", { - vpc: vpc, - vpcSubnetSelection: props.infrastructureSubnetSelection, - fargateCluster: cluster, - namespaceService: service, - aggressiveTimes: props.isDevelopment, - }); - } -} diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/.dockerignore b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/.dockerignore new file mode 100644 index 0000000..0c530a3 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/.dockerignore @@ -0,0 +1,4 @@ +Dockerfile +test/* +test-*.sh +rclone-batch diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/.gitignore b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/.gitignore new file mode 100644 index 0000000..f0382e3 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/.gitignore @@ -0,0 +1,3 @@ + +# ignore the binary we build in testing +rclone-batch diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/Dockerfile b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/Dockerfile new file mode 100644 index 0000000..38f0731 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/Dockerfile @@ -0,0 +1,31 @@ +FROM golang:1.21-alpine as builder + +# git is needed for go mod download to work +RUN apk add --no-cache git + +WORKDIR /build + +RUN go env -w GOPROXY=direct + +ADD go.mod go.sum ./ + +RUN go mod download + +ADD *.go ./ + +RUN env GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build rclone-batch.go + + +FROM rclone/rclone:1.64.2 + +# if we want signals to propogate through to the app we need a lightweight initd +RUN apk add --no-cache tini + +# this is where rclone binary ends up by default so we will do our work there +WORKDIR /data + +COPY --from=builder /build/rclone-batch ./ + +ENV RB_RCLONE_BINARY "/usr/local/bin/rclone" + +ENTRYPOINT ["/sbin/tini", "-vvv", "--", "/data/rclone-batch"] diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/README.md b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/README.md new file mode 100644 index 0000000..5c43111 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/README.md @@ -0,0 +1,43 @@ +# rclone-batch + +`rclone-batch` is a Go wrapper around the invocation of `rclone`. Why do we need +a wrapper? Well we want to get the statistics output of `rclone` in a way +that we can standardise and use in our Steps DistributedMap results. + +Also, we want optionally to be able to send this info +back to the parent AWS Steps via Task Tokens. + +Furthermore, there are aspects of signal +handling that we want to support for Fargate Spot that is not quite the same as +`rclone` out of the box. + +## How to dev? + +A decent amount of development can be done without deploying anything +to AWS/CDK/Steps. + +```shell +./test-go-direct.sh +``` + +Will compile the application and attempt some test copies. This is a purely +local invocation of the app with local temporary directories, made up local +files, and a local rclone binary. + +This is good for + +- checking the Go program compiles +- basic program logic + +```shell +./test-docker-direct.sh +``` + +Will build the Docker image that is used by the parent AWS ECS, but then +invokes it directly, with a mount point to bind in a local temporary +directory. + +This is good for + +- checking the Docker configuration can build +- basic Docker sanity diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/go.mod b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/go.mod new file mode 100644 index 0000000..2025277 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/go.mod @@ -0,0 +1,21 @@ +module rclone-batch + +go 1.21 + +require ( + github.com/aws/aws-sdk-go-v2 v1.23.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.25.1 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.1 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3 // indirect + github.com/aws/aws-sdk-go-v2/service/sfn v1.22.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.17.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.25.2 // indirect + github.com/aws/smithy-go v1.17.0 // indirect + gonum.org/v1/gonum v0.14.0 // indirect +) diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/go.sum b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/go.sum new file mode 100644 index 0000000..8d6e9db --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/go.sum @@ -0,0 +1,30 @@ +github.com/aws/aws-sdk-go-v2 v1.23.0 h1:PiHAzmiQQr6JULBUdvR8fKlA+UPKLT/8KbiqpFBWiAo= +github.com/aws/aws-sdk-go-v2 v1.23.0/go.mod h1:i1XDttT4rnf6vxc9AuskLc6s7XBee8rlLilKlc03uAA= +github.com/aws/aws-sdk-go-v2/config v1.25.1 h1:YsjngBOl2mx4l3egkVWndr6/6TqtkdsWJFZIsQ924Ek= +github.com/aws/aws-sdk-go-v2/config v1.25.1/go.mod h1:yV6h7TRVzhdIFmUk9WWDRpWwYGg1woEzKr0k1IYz2Tk= +github.com/aws/aws-sdk-go-v2/credentials v1.16.1 h1:WessyrdgyFN5TB+eLQdrFSlN/3oMnqukIFhDxK6z8h0= +github.com/aws/aws-sdk-go-v2/credentials v1.16.1/go.mod h1:RQJyPxKcr+m4ArlIG1LUhMOrjposVfzbX6H8oR6oCgE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4 h1:9wKDWEjwSnXZre0/O3+ZwbBl1SmlgWYBbrTV10X/H1s= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4/go.mod h1:t4i+yGHMCcUNIX1x7YVYa6bH/Do7civ5I6cG/6PMfyA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.3 h1:DUwbD79T8gyQ23qVXFUthjzVMTviSHi3y4z58KvghhM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.3/go.mod h1:7sGSz1JCKHWWBHq98m6sMtWQikmYPpxjqOydDemiVoM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.3 h1:AplLJCtIaUZDCbr6+gLYdsYNxne4iuaboJhVt9d+WXI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.3/go.mod h1:ify42Rb7nKeDDPkFjKn7q1bPscVPu/+gmHH8d2c+anU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 h1:usgqiJtamuGIBj+OvYmMq89+Z1hIKkMJToz1WpoeNUY= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 h1:rpkF4n0CyFcrJUG/rNNohoTmhtWlFTRI4BsZOh9PvLs= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1/go.mod h1:l9ymW25HOqymeU2m1gbUQ3rUIsTwKs8gYHXkqDQUhiI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3 h1:kJOolE8xBAD13xTCgOakByZkyP4D/owNmvEiioeUNAg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3/go.mod h1:Owv1I59vaghv1Ax8zz8ELY8DN7/Y0rGS+WWAmjgi950= +github.com/aws/aws-sdk-go-v2/service/sfn v1.22.1 h1:kT2DEMbibZlhGbGiM3p34tNOI8bh82x9Fe7HLCrnjho= +github.com/aws/aws-sdk-go-v2/service/sfn v1.22.1/go.mod h1:AM0scrWjoTK5MJ4++nLnqkdJfwAy9b0jV7EcANYn59M= +github.com/aws/aws-sdk-go-v2/service/sso v1.17.2 h1:V47N5eKgVZoRSvx2+RQ0EpAEit/pqOhqeSQFiS4OFEQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.17.2/go.mod h1:/pE21vno3q1h4bbhUOEi+6Zu/aT26UK2WKkDXd+TssQ= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.2 h1:sMAcO7VHVw28HTAdZpTULDzFirHOsVm/x25CxhUH0jA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.2/go.mod h1:dWqm5G767qwKPuayKfzm4rjzFmVjiBFbOJrpSPnAMDs= +github.com/aws/aws-sdk-go-v2/service/sts v1.25.2 h1:vwyiRTnXLqsak/6WAQ+uTRhVqKI6vxUQ0HJXjKij0zM= +github.com/aws/aws-sdk-go-v2/service/sts v1.25.2/go.mod h1:4EqRHDCKP78hq3zOnmFXu5k0j4bXbRFfCh/zQ6KnEfQ= +github.com/aws/smithy-go v1.17.0 h1:wWJD7LX6PBV6etBUwO0zElG0nWN9rUhp0WdYeHSHAaI= +github.com/aws/smithy-go v1.17.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= +gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/rclone-batch.go b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/rclone-batch.go new file mode 100644 index 0000000..481c92b --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/rclone-batch.go @@ -0,0 +1,307 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/sfn" + "log" + "os" + "os/exec" + "os/signal" + "strconv" + "strings" + "syscall" + "time" +) + +// NOTE: we use a prefix of RB (rclone-batch) just so we don't accidentally clash with a real +// env variable that has meaning to rclone (for example) + +const rcloneBinaryEnvName = "RB_RCLONE_BINARY" +const destinationEnvName = "RB_DESTINATION" + +// our parent ECS task (when a SPOT instance) can be sent a TERM signal - we then have a hard +// limit of 120 seconds before the process is hard killed +// this value here is the seconds to wait after receiving the TERM in the hope that our +// jobs might finish +const postTermCleanupSeconds = 90 + +/** + * A ternaryish operator + */ +func If[T any](cond bool, vtrue, vfalse T) T { + if cond { + return vtrue + } + return vfalse +} + +/** + * A command line wrapper for invoking rclone one by one and return stats/error messages + * to the parent caller. Finishes by sending the stats back to the AWS parent task if asked. + * + * Inputs + * os.Args the source object paths to copy (rclone syntax e.g s3:bucket:key) + * Env + * RB_RCLONE_BINARY the path to an rclone binary to use + * RB_DESTINATION the path to send the objects (rclone syntax e.g s3:bucket:key) + * RB_TASK_TOKEN if present, the task token to use to send the copy results back to the parent + * RB_DEBUG_BANDWIDTH if present, a rclone bandwidth setting (just for debug/testing) + * ...any other rclone settings needed... + * RCLONE_CONFIG_S3_PROVIDER... + */ +func main() { + // NOTE: if this was a traditional command line tool we would take these in as command + // line parameters. However, we are invoking this as an ECS Task and it turns out easier + // to pass these down via environment variables - saving the command line args *only* for the list + // of files we want to copy + + rcloneBinary, rcloneBinaryOk := os.LookupEnv(rcloneBinaryEnvName) + + if !rcloneBinaryOk { + log.Fatalf("No environment variable %s telling us the path to an rclone executable", rcloneBinaryEnvName) + } + + if !strings.Contains(rcloneBinary, "rclone") { + // given we are a program that executes another program - just a little sanity check that what we + // are invoking vaguely makes sense + // (feel free to remove this if you have a use case where the binary is named otherwise) + log.Fatalf("The environment variable %s should have the string rclone in it somewhere", rcloneBinaryEnvName) + } + + destination, destinationOk := os.LookupEnv(destinationEnvName) + + if !destinationOk { + log.Fatalf("No environment variable %s telling us where to copy the objects", destinationEnvName) + } + + // a task token that ECS/Steps can pass us so we can return data + taskToken, taskTokenOk := os.LookupEnv("RB_TASK_TOKEN") + + // now that we know whether we want to use the task token - we will definitely need AWS config to work + // - so no need starting copying if we will fail at the end + cfg, err := config.LoadDefaultConfig(context.TODO()) + + if taskTokenOk { + if err != nil { + log.Fatalf("Unable to load AWS config, %v", err) + } + } + + // special environment variables that we can use for some debug/testing + debugBandwidth, debugBandwidthOk := os.LookupEnv("RB_DEBUG_BANDWIDTH") + debugSignalWait, debugSignalWaitOk := os.LookupEnv("RB_DEBUG_SIGNAL_WAIT") + + // we end up with a result array entry for each object we have been asked to copy + results := make([]any, len(os.Args)-1) + var resultErrorCount int64 = 0 + + signalChannel := make(chan os.Signal) + + // set as soon as we receive a SIGTERM - so that we will then just quickly skip the rest of the files + interrupted := false + + for i := 1; i < len(os.Args); i++ { + + // what we are processing in this iteration + which := i - 1 + source := os.Args[i] + + log.Printf("Asked to copy %s as the %d object to copy", source, which) + + if !interrupted { + // setup an rclone copy with capture stats (noting that stats are sent to stderr) + cmd := exec.Command(rcloneBinary, + "--use-json-log", + "--stats-log-level", "NOTICE", + "--stats-one-line", + // only display stats at the end (after 10000 hours) + "--stats", "10000h", + // normally no bandwidth limiting ("0") - but can institute bandwidth limit if asked + "--bwlimit", If(debugBandwidthOk, debugBandwidth, "0"), + // because we are transferring between S3 - which has a consistent idea of checksums + // at src and destination we enable this options + "--checksum", + "copy", source, destination) + + // we are only interested in stderr + stderrStringBuilder := new(strings.Builder) + cmd.Stderr = stderrStringBuilder + + // we need to be able handling getting a SIGTERM when AWS wants to reclaim our SPOT instance + signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM) + go func() { + sig := <-signalChannel + switch sig { + case syscall.SIGTERM: + // indicate we don't want future rclones to run + interrupted = true + + // we do however have a 120 second (hard) window in which we might want + // to let the current rclone finish + // so lets sleep for a bit before we self-terminate + // (we have a little debug settable value here to make our tests run quicker) + if debugSignalWaitOk { + i, err := strconv.Atoi(debugSignalWait) + if err == nil { + time.Sleep(time.Duration(i) * time.Second) + } + } else { + time.Sleep(postTermCleanupSeconds * time.Second) + } + + // terminate the currently running rclone + // NOTE we ignore the error here - if the process has already gone away then the + // signal possibly fails (by which point we should be exiting the process anyhow) + cmd.Process.Signal(syscall.SIGTERM) + } + }() + + runErr := cmd.Run() + + if runErr != nil { + log.Printf("rclone Run() failed with %v", runErr) + } else { + log.Printf("rclone Run() succeeded") + } + + foundStats := false + + // no matter what the exit code/status of the run is - we are going to (safely!) trawl + // through the stderr + // each line of stderr output is stats in JSON format or possibly other random messages + stderrStringLines := strings.Split(strings.TrimSuffix(stderrStringBuilder.String(), "\n"), "\n") + + // attempt to process each line of log output to stderr as JSON (if not then log it ourselves) + for _, line := range stderrStringLines { + var logLineJson map[string]any + + decoder := json.NewDecoder(strings.NewReader(line)) + decoder.UseNumber() + + decoderErr := decoder.Decode(&logLineJson) + + if decoderErr == nil { + statsValue, statsOk := logLineJson["stats"].(map[string]any) + + if statsOk { + // an rclone stats block will definitely have a "errors" count + // so we test for this and then use it + errorsValue, errorsOk := statsValue["errors"].(json.Number) + + if errorsOk { + errorsIntValue, errorsIntOk := errorsValue.Int64() + + if errorsIntOk == nil { + resultErrorCount += errorsIntValue + + // insert information about the file we were copying into the rclone stats block + statsValue["source"] = source + + // record the stats block + results[which] = statsValue + + foundStats = true + } + } + } + } else { + // we couldn't parse the line as JSON so it is probably a stderr msg from rclone + log.Printf("rclone stderr -> %s", line) + } + } + + // if`no valid stats block was output by rclone we need to make our own "compatible" one + if !foundStats { + // if we get a well structured runtime error result we can work out some + // specific error messages + + // keep in mind we *only* get here if rclone itself didn't provide JSON stats + // (which is itself a bug - as rclone does provide stats on every copy) + if runErr != nil { + if runExitErr, runExitOk := runErr.(*exec.ExitError); runExitOk { + // https://rclone.org/docs/#list-of-exit-codes + switch runExitErr.ExitCode() { + case 143: + results[which] = map[string]any{ + "errors": 1, + "lastError": "interrupted by SIGTERM", + "source": source} + resultErrorCount++ + default: + results[which] = map[string]any{ + "errors": 1, + "lastError": fmt.Sprintf("exit of rclone with code %v but no JSON statistics block generated", runExitErr.ExitCode()), + "systemError": fmt.Sprintf("%#v", runExitErr), + "source": source} + resultErrorCount++ + } + } + } + } + + } else { + // if we have previously received a SIGTERM - then for the rest we have been asked to copy we just need to skip + // create a fake "compatible" stats block + results[which] = map[string]any{ + "errors": 1, + "lastError": "skipped due to previous SIGTERM received", + "source": source} + resultErrorCount++ + } + + // if we have fallen through all the way to here without any details then we put in + // something generic - but we want to make sure every copy operation has a "result" block + if results[which] == nil { + results[which] = map[string]any{ + "errors": 1, + "lastError": "Exit of rclone but no JSON statistics block generated or reason detected", + "source": source} + resultErrorCount++ + } + } + + // we have now attempted to copy every file and generated a stats dictionary in results[] + + // we need to report this back as JSON though + resultsJson, err := json.MarshalIndent(results, "", " ") + + if err != nil { + log.Fatalf("Could not marshall the rclone outputs to JSON", err) + } + + resultsString := string(resultsJson) + + // the normal mechanism by which we will send back results to our caller is + // Steps SendTask - which sends back JSON + if taskTokenOk { + sfnSvc := sfn.NewFromConfig(cfg) + + // output + // The JSON output of the task. Length constraints apply to the payload size, and are expressed as bytes in UTF-8 encoding. + // Type: String + // Length Constraints: Maximum length of 262144. + + // if we got any errors - we want to signal that up to the steps + //if resultErrorCount > 0 { + // sfnSvc.SendTaskFailure(context.TODO(), &sfn.SendTaskFailureInput{ + // Output: aws.String(resultsString), + // TaskToken: aws.String(taskToken), + // }) + //} else { + sfnSvc.SendTaskSuccess(context.TODO(), &sfn.SendTaskSuccessInput{ + Output: aws.String(resultsString), + TaskToken: aws.String(taskToken), + }) + //} + + } else { + // if no task token was given then we just print the results + fmt.Println(resultsString) + } + + os.Exit(int(resultErrorCount)) +} diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-assert.sh b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-assert.sh new file mode 100755 index 0000000..a0c8723 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-assert.sh @@ -0,0 +1,186 @@ +#!/bin/bash +# assert.sh 1.1 - bash unit testing framework +# Copyright (C) 2009-2015 Robert Lehmann +# +# http://github.com/lehmannro/assert.sh +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +export DISCOVERONLY=${DISCOVERONLY:-} +export DEBUG=${DEBUG:-} +export STOP=${STOP:-} +export INVARIANT=${INVARIANT:-} +export CONTINUE=${CONTINUE:-} + +args="$(getopt -n "$0" -l \ + verbose,help,stop,discover,invariant,continue vhxdic $*)" \ +|| exit -1 +for arg in $args; do + case "$arg" in + -h) + echo "$0 [-vxidc]" \ + "[--verbose] [--stop] [--invariant] [--discover] [--continue]" + echo "`sed 's/./ /g' <<< "$0"` [-h] [--help]" + exit 0;; + --help) + cat < [stdin] + (( tests_ran++ )) || : + [[ -z "$DISCOVERONLY" ]] || return + expected=$(echo -ne "${2:-}") + result="$(eval 2>/dev/null $1 <<< ${3:-})" || true + if [[ "$result" == "$expected" ]]; then + [[ -z "$DEBUG" ]] || echo -n . + return + fi + result="$(sed -e :a -e '$!N;s/\n/\\n/;ta' <<< "$result")" + [[ -z "$result" ]] && result="nothing" || result="\"$result\"" + [[ -z "$2" ]] && expected="nothing" || expected="\"$2\"" + _assert_fail "expected $expected${_indent}got $result" "$1" "$3" +} + +assert_raises() { + # assert_raises [stdin] + (( tests_ran++ )) || : + [[ -z "$DISCOVERONLY" ]] || return + status=0 + (eval $1 <<< ${3:-}) > /dev/null 2>&1 || status=$? + expected=${2:-0} + if [[ "$status" -eq "$expected" ]]; then + [[ -z "$DEBUG" ]] || echo -n . + return + fi + _assert_fail "program terminated with code $status instead of $expected" "$1" "$3" +} + +_assert_fail() { + # _assert_fail + [[ -n "$DEBUG" ]] && echo -n X + report="test #$tests_ran \"$2${3:+ <<< $3}\" failed:${_indent}$1" + if [[ -n "$STOP" ]]; then + [[ -n "$DEBUG" ]] && echo + echo "$report" + exit 1 + fi + tests_errors[$tests_failed]="$report" + (( tests_failed++ )) || : +} + +skip_if() { + # skip_if + (eval $@) > /dev/null 2>&1 && status=0 || status=$? + [[ "$status" -eq 0 ]] || return + skip +} + +skip() { + # skip (no arguments) + shopt -q extdebug && tests_extdebug=0 || tests_extdebug=1 + shopt -q -o errexit && tests_errexit=0 || tests_errexit=1 + # enable extdebug so returning 1 in a DEBUG trap handler skips next command + shopt -s extdebug + # disable errexit (set -e) so we can safely return 1 without causing exit + set +o errexit + tests_trapped=0 + trap _skip DEBUG +} +_skip() { + if [[ $tests_trapped -eq 0 ]]; then + # DEBUG trap for command we want to skip. Do not remove the handler + # yet because *after* the command we need to reset extdebug/errexit (in + # another DEBUG trap.) + tests_trapped=1 + [[ -z "$DEBUG" ]] || echo -n s + return 1 + else + trap - DEBUG + [[ $tests_extdebug -eq 0 ]] || shopt -u extdebug + [[ $tests_errexit -eq 1 ]] || set -o errexit + return 0 + fi +} + + +_assert_reset +: ${tests_suite_status:=0} # remember if any of the tests failed so far +_assert_cleanup() { + local status=$? + # modify exit code if it's not already non-zero + [[ $status -eq 0 && -z $CONTINUE ]] && exit $tests_suite_status +} +trap _assert_cleanup EXIT diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-docker-direct.sh b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-docker-direct.sh new file mode 100755 index 0000000..babe68f --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-docker-direct.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# we want to exit immediately on error (especially for Go/Docker build errors) +set -e + +docker build . -t rclone-batch-image + +# make a temporary directory for the copy destination +# NOTE: we do not remove this on a EXIT trap as that interferes with the assert.sh exit codes +TEMPD=$(mktemp -d) +if [ ! -e "$TEMPD" ]; then + >&2 echo "Failed to create temp directory" + exit 1 +fi + +# note the /etc files here are not important! We are just using them as source files +# that happen to already exist in the docker image by default +docker run --rm \ + --env RB_DESTINATION=/tmp \ + --mount "type=bind,source=$TEMPD,target=/tmp" \ + rclone-batch-image \ + /etc/alpine-release /etc/os-release /etc/services + +# need to write some assertions here (need to separate out various outputs) + +ls -al $TEMPD diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-go-direct.sh b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-go-direct.sh new file mode 100755 index 0000000..06c1ea5 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/test-go-direct.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +# we want to exit immediately on error (especially for Go compile errors) +set -e + +# bring in some helpful bash assertions +. test-assert.sh --invariant + +# build our rclone-batch executable +go build rclone-batch.go + +# make a temporary directory for the copy destination +# NOTE: we do not remove this on a EXIT trap as that interferes with the assert.sh exit codes +TEMPD=$(mktemp -d) +if [ ! -e "$TEMPD" ]; then + >&2 echo "Failed to create temp directory" + exit 1 +fi + +RB_RCLONE_BINARY="$(which rclone)" +if [ ! -e "$RB_RCLONE_BINARY" ]; then + >&2 echo "Failed to locate rclone binary to use" + exit 1 +fi + +export RB_RCLONE_BINARY + +# our tests do return exit codes so we need to *not* fail on error +set +e + +# +# Test 1 +# +echo "Test 1 - copying two files" + +RB_DESTINATION="$TEMPD/test1" ./rclone-batch ./testfile1.txt ./testfile2.txt > "$TEMPD/result.json" + +test1_exit=$? + +cat "$TEMPD/result.json" + +assert " echo $test1_exit " "0" +assert " find $TEMPD/test1 -type f | awk 'END{print NR}' " "2" +assert " cat $TEMPD/result.json | jq -r '.[0] | .bytes' " "20" +assert " cat $TEMPD/result.json | jq -r '.[1] | .bytes' " "37" + +rm "$TEMPD/result.json" + +# +# Test 2 +# +echo "Test 2 - copying two files but one not present/fails" + +RB_DESTINATION="$TEMPD/test2" ./rclone-batch ./afilethatdoesnotexist.txt ./testfile2.txt > "$TEMPD/result.json" + +test2_exit=$? + +cat "$TEMPD/result.json" + +assert " echo $test2_exit " "1" +assert "find $TEMPD/test2 -type f | awk 'END{print NR}'" "1" +assert " cat $TEMPD/result.json | jq -r '.[0] | .lastError' " "directory not found" +assert " cat $TEMPD/result.json | jq -r '.[0] | .bytes' " "0" +assert " cat $TEMPD/result.json | jq -r '.[1] | .lastError' " "null" +assert " cat $TEMPD/result.json | jq -r '.[1] | .bytes' " "37" + +rm "$TEMPD/result.json" + +# +# Test 3 +# +# this is a test that app will intercept a SIGTERM, pass it to any running rclone process, +# and return sensible results +# +echo "Test 3 - copying two files but signals tells us to stop" + +# we set the bandwidth to 1B so that it is slow enough that our TERM signal will come mid-process +# we set the signal wait because otherwise the test will run for more than a minute +# we start this execution in the background +RB_DESTINATION="$TEMPD/test3" RB_DEBUG_BANDWIDTH="1B" RB_DEBUG_SIGNAL_WAIT="5" ./rclone-batch ./testfile1.txt ./testfile2.txt > "$TEMPD/result.json" & + +# wait a small amount +sleep 1 + +# now send a SIGTERM to the launched job +kill %1 + +# but still wait for it to finish as it intercepts the SIGTERM +wait %1 + +cat "$TEMPD/result.json" + +assert " cat $TEMPD/result.json | jq -r '.[0] | .lastError' " "interrupted by SIGTERM" +assert " cat $TEMPD/result.json | jq -r '.[1] | .lastError' " "skipped due to previous SIGTERM received" + +rm "$TEMPD/result.json" + +# +# end overall testing and set return code +# + +assert_end examples diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/testfile1.txt b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/testfile1.txt new file mode 100644 index 0000000..f638667 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/testfile1.txt @@ -0,0 +1 @@ +This is test file 1 diff --git a/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/testfile2.txt b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/testfile2.txt new file mode 100644 index 0000000..240e788 --- /dev/null +++ b/packages/aws-copy-out-sharer/docker/rclone-batch-docker-image/testfile2.txt @@ -0,0 +1 @@ +This is test file 2 - it has content diff --git a/packages/aws-copy-out-sharer/construct/can-write-lambda/.gitignore b/packages/aws-copy-out-sharer/lambda/can-write-lambda/.gitignore similarity index 100% rename from packages/aws-copy-out-sharer/construct/can-write-lambda/.gitignore rename to packages/aws-copy-out-sharer/lambda/can-write-lambda/.gitignore diff --git a/packages/aws-copy-out-sharer/lambda/can-write-lambda/can-write-lambda.ts b/packages/aws-copy-out-sharer/lambda/can-write-lambda/can-write-lambda.ts new file mode 100644 index 0000000..4331876 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/can-write-lambda/can-write-lambda.ts @@ -0,0 +1,53 @@ +import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; +import { + AccessDeniedError, + DestinationPrefixKeyNoTrailingSlashError, + WrongRegionError, +} from "./errors"; + +// see the main src/copy-out-state-machine-input.ts for matching fields + +interface InvokeEvent { + requiredRegion: string; + + destinationBucket: string; + + destinationPrefixKey: string; + + destinationStartCopyRelativeKey: string; +} + +export async function handler(event: InvokeEvent) { + console.log(JSON.stringify(event, null, 2)); + + if (event.destinationPrefixKey) + if (!event.destinationPrefixKey.endsWith("/")) + throw new DestinationPrefixKeyNoTrailingSlashError( + "The destination prefix key must either be an empty string or a string with a trailing slash", + ); + + // we are being super specific here - more so than our normal client creation + // the "required region" is where we are going + // to make our client - in order to ensure we get 301 Redirects for buckets outside our location + const client = new S3Client({ region: event.requiredRegion }); + + try { + const putCommand = new PutObjectCommand({ + Bucket: event.destinationBucket, + Key: `${event.destinationPrefixKey}${event.destinationStartCopyRelativeKey}`, + Body: "A file created by copy out to ensure correct permissions and to indicate that start of the copy process", + }); + + await client.send(putCommand); + } catch (e: any) { + if (e.Code === "PermanentRedirect") + throw new WrongRegionError( + "S3 Put failed because bucket was in the wrong region", + ); + + if (e.Code === "AccessDenied") + throw new AccessDeniedError("S3 Put failed with access denied error"); + + throw e; + } +} diff --git a/packages/aws-copy-out-sharer/lambda/can-write-lambda/errors.ts b/packages/aws-copy-out-sharer/lambda/can-write-lambda/errors.ts new file mode 100644 index 0000000..427d755 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/can-write-lambda/errors.ts @@ -0,0 +1,23 @@ +export class WrongRegionError extends Error { + constructor(message: string) { + super(); + this.name = "WrongRegionError"; + this.message = message; + } +} + +export class AccessDeniedError extends Error { + constructor(message: string) { + super(); + this.name = "AccessDeniedError"; + this.message = message; + } +} + +export class DestinationPrefixKeyNoTrailingSlashError extends Error { + constructor(message: string) { + super(); + this.name = "DestinationPrefixKeyNoTrailingSlashError"; + this.message = message; + } +} diff --git a/packages/aws-copy-out-sharer/lambda/can-write-lambda/package-lock.json b/packages/aws-copy-out-sharer/lambda/can-write-lambda/package-lock.json new file mode 100644 index 0000000..e84c5e8 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/can-write-lambda/package-lock.json @@ -0,0 +1,1438 @@ +{ + "name": "can-write-lambda", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "can-write-lambda", + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-s3": "3.405.0", + "@types/aws-lambda": "8.10.93" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "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==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.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" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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==", + "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-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" + } + }, + "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==" + }, + "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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "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==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", + "integrity": "sha512-+LK6OCbKplR51zBZAtK/+RxaPsXcEklsA1+mmUA3M1h4KHl6GMiK5r/D9dlKht5DRntmmjCn3SI99QbfckqKXg==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.405.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-bucket-endpoint": "3.405.0", + "@aws-sdk/middleware-expect-continue": "3.398.0", + "@aws-sdk/middleware-flexible-checksums": "3.400.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-location-constraint": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-s3": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-ssec": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/signature-v4-multi-region": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/eventstream-serde-browser": "^2.0.5", + "@smithy/eventstream-serde-config-resolver": "^2.0.5", + "@smithy/eventstream-serde-node": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-blob-browser": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/hash-stream-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/md5-js": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.405.0.tgz", + "integrity": "sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.405.0.tgz", + "integrity": "sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-sts": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.405.0.tgz", + "integrity": "sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.405.0.tgz", + "integrity": "sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.405.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.405.0.tgz", + "integrity": "sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.405.0.tgz", + "integrity": "sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==", + "dependencies": { + "@aws-sdk/client-sso": "3.405.0", + "@aws-sdk/token-providers": "3.405.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.405.0.tgz", + "integrity": "sha512-wKmHZi44NkbaGXXbMwassUm06/wDtSYucPbM4paU2cMbBUOnwFpndHWlrRYCNmj5Ty5A2HjdkGlhgla8nifHzQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.398.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.405.0.tgz", + "integrity": "sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.405.0.tgz", + "integrity": "sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", + "dependencies": { + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.13.tgz", + "integrity": "sha512-OJ/2g/VxkzA+mYZxV102oX3CsiE+igTSmqq/ir3oEVG2kSIdRC00ryttj/lmL14W06ExNi0ysmfLxQkL8XrAZQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.13.tgz", + "integrity": "sha512-2BI1CbnYuEvAYoWSeWJtPNygbIKiWeSLxCmDLnyM6wQV32Of7VptiQlaFXPxXp4zqn/rs3ocZ/T29rxE4s4Gsg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.13.tgz", + "integrity": "sha512-7NbFwPafb924elFxCBDvm48jy/DeSrpFbFQN0uN2ThuY5HrEeubikS0t7WMva4Z4EnRoivpbuT0scb9vUIJKoA==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.13.tgz", + "integrity": "sha512-j0yFd5UfftM+ia9dxLRbheJDCkCZBHpcEzCsPO8BxVOTbdcX/auVJCv6ov/yvpCKsf4Hv3mOqi0Is1YogM2g3Q==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.14.tgz", + "integrity": "sha512-yWdghyPJIEqLYsaE7YVgd3YhM7jN4Pv6eJQvTomnMsz5K2qRBlpjUx3T9fKlElp1qdeQ7DNc3sAat4i9CUBO7Q==", + "dependencies": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.15.tgz", + "integrity": "sha512-ZZ6kC/pHt5Dc2goXIIyC8uA7A4GUMSzdCynAabnZ3CSSaV6ctP8mlvVkqjPph0O3XzHlx/80gdLrNqi1GDPUsA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.15.tgz", + "integrity": "sha512-pAZaokib56XvhU0t/R9vAcr3L3bMhIakhF25X7EMSQ7LAURiLfce/tgON8I3x/dIbnZUyeRi8f2cx2azu6ATew==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "dependencies": { + "@smithy/types": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.93", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.93.tgz", + "integrity": "sha512-Vsyi9ogDAY3REZDjYnXMRJJa62SDvxHXxJI5nGDQdZW058dDE+av/anynN2rLKbCKXDRNw3D/sQmqxVflZFi4A==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "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==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + } + } +} diff --git a/packages/aws-copy-out-sharer/lambda/can-write-lambda/package.json b/packages/aws-copy-out-sharer/lambda/can-write-lambda/package.json new file mode 100644 index 0000000..c52f4b9 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/can-write-lambda/package.json @@ -0,0 +1,9 @@ +{ + "name": "can-write-lambda", + "version": "1.0.0", + "main": "can-write-lambda.ts", + "dependencies": { + "@aws-sdk/client-s3": "3.405.0", + "@types/aws-lambda": "8.10.93" + } +} diff --git a/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/.gitignore b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/.gitignore new file mode 100644 index 0000000..dc19133 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/.gitignore @@ -0,0 +1,3 @@ + +# this lambda is a straight JS - no typescript so we need to include the JS +!*.js diff --git a/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/errors.ts b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/errors.ts new file mode 100644 index 0000000..d693553 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/errors.ts @@ -0,0 +1,15 @@ +export class WrongRegionError extends Error { + constructor(message: string) { + super(); + this.name = "WrongRegionError"; + this.message = message; + } +} + +export class AccessDeniedError extends Error { + constructor(message: string) { + super(); + this.name = "AccessDeniedError"; + this.message = message; + } +} diff --git a/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/package-lock.json b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/package-lock.json new file mode 100644 index 0000000..dbd2b9a --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/package-lock.json @@ -0,0 +1,1444 @@ +{ + "name": "can-write-lambda", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "can-write-lambda", + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-s3": "3.405.0", + "@types/aws-lambda": "8.10.93", + "csv-stringify": "6.4.4" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "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==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.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" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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==", + "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-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" + } + }, + "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==" + }, + "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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "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==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", + "integrity": "sha512-+LK6OCbKplR51zBZAtK/+RxaPsXcEklsA1+mmUA3M1h4KHl6GMiK5r/D9dlKht5DRntmmjCn3SI99QbfckqKXg==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.405.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-bucket-endpoint": "3.405.0", + "@aws-sdk/middleware-expect-continue": "3.398.0", + "@aws-sdk/middleware-flexible-checksums": "3.400.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-location-constraint": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-s3": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-ssec": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/signature-v4-multi-region": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/eventstream-serde-browser": "^2.0.5", + "@smithy/eventstream-serde-config-resolver": "^2.0.5", + "@smithy/eventstream-serde-node": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-blob-browser": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/hash-stream-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/md5-js": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.405.0.tgz", + "integrity": "sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.405.0.tgz", + "integrity": "sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-sts": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.405.0.tgz", + "integrity": "sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.405.0.tgz", + "integrity": "sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.405.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.405.0.tgz", + "integrity": "sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.405.0.tgz", + "integrity": "sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==", + "dependencies": { + "@aws-sdk/client-sso": "3.405.0", + "@aws-sdk/token-providers": "3.405.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.405.0.tgz", + "integrity": "sha512-wKmHZi44NkbaGXXbMwassUm06/wDtSYucPbM4paU2cMbBUOnwFpndHWlrRYCNmj5Ty5A2HjdkGlhgla8nifHzQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.398.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.405.0.tgz", + "integrity": "sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.405.0.tgz", + "integrity": "sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.13.tgz", + "integrity": "sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", + "dependencies": { + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.18.tgz", + "integrity": "sha512-761sJSgNbvsqcsKW6/WZbrZr4H+0Vp/QKKqwyrxCPwD8BsiPEXNHyYnqNgaeK9xRWYswjon0Uxbpe3DWQo0j/g==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.1.tgz", + "integrity": "sha512-gw5G3FjWC6sNz8zpOJgPpH5HGKrpoVFQpToNAwLwJVyI/LJ2jDJRjSKEsM6XI25aRpYjMSE/Qptxx305gN1vHw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.13.tgz", + "integrity": "sha512-CExbelIYp+DxAHG8RIs0l9QL7ElqhG4ym9BNoSpkPa4ptBQfzJdep3LbOSVJIE2VUdBAeObdeL6EDB3Jo85n3g==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.13.tgz", + "integrity": "sha512-OJ/2g/VxkzA+mYZxV102oX3CsiE+igTSmqq/ir3oEVG2kSIdRC00ryttj/lmL14W06ExNi0ysmfLxQkL8XrAZQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.13.tgz", + "integrity": "sha512-2BI1CbnYuEvAYoWSeWJtPNygbIKiWeSLxCmDLnyM6wQV32Of7VptiQlaFXPxXp4zqn/rs3ocZ/T29rxE4s4Gsg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.13.tgz", + "integrity": "sha512-7NbFwPafb924elFxCBDvm48jy/DeSrpFbFQN0uN2ThuY5HrEeubikS0t7WMva4Z4EnRoivpbuT0scb9vUIJKoA==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.13.tgz", + "integrity": "sha512-j0yFd5UfftM+ia9dxLRbheJDCkCZBHpcEzCsPO8BxVOTbdcX/auVJCv6ov/yvpCKsf4Hv3mOqi0Is1YogM2g3Q==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.6.tgz", + "integrity": "sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.14.tgz", + "integrity": "sha512-yWdghyPJIEqLYsaE7YVgd3YhM7jN4Pv6eJQvTomnMsz5K2qRBlpjUx3T9fKlElp1qdeQ7DNc3sAat4i9CUBO7Q==", + "dependencies": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.15.tgz", + "integrity": "sha512-t/qjEJZu/G46A22PAk1k/IiJZT4ncRkG5GOCNWN9HPPy5rCcSZUbh7gwp7CGKgJJ7ATMMg+0Td7i9o1lQTwOfQ==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.15.tgz", + "integrity": "sha512-ZZ6kC/pHt5Dc2goXIIyC8uA7A4GUMSzdCynAabnZ3CSSaV6ctP8mlvVkqjPph0O3XzHlx/80gdLrNqi1GDPUsA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.13.tgz", + "integrity": "sha512-XsGYhVhvEikX1Yz0kyIoLssJf2Rs6E0U2w2YuKdT4jSra5A/g8V2oLROC1s56NldbgnpesTYB2z55KCHHbKyjw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.15.tgz", + "integrity": "sha512-pAZaokib56XvhU0t/R9vAcr3L3bMhIakhF25X7EMSQ7LAURiLfce/tgON8I3x/dIbnZUyeRi8f2cx2azu6ATew==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.15.tgz", + "integrity": "sha512-xH4kRBw01gJgWiU+/mNTrnyFXeozpZHw39gLb3JKGsFDVmSrJZ8/tRqu27tU/ki1gKkxr2wApu+dEYjI3QwV1Q==", + "dependencies": { + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.0.tgz", + "integrity": "sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.13", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-middleware": "^2.0.6", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.20.tgz", + "integrity": "sha512-X2yrF/SHDk2WDd8LflRNS955rlzQ9daz9UWSp15wW8KtzoTXg3bhHM78HbK1cjr48/FWERSJKh9AvRUUGlIawg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.5", + "@smithy/protocol-http": "^3.0.9", + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-retry": "^2.0.6", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.13.tgz", + "integrity": "sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.7.tgz", + "integrity": "sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.5.tgz", + "integrity": "sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/shared-ini-file-loader": "^2.2.4", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.9.tgz", + "integrity": "sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/protocol-http": "^3.0.9", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.9.tgz", + "integrity": "sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.14.tgz", + "integrity": "sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.13.tgz", + "integrity": "sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.13.tgz", + "integrity": "sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.6.tgz", + "integrity": "sha512-fCQ36frtYra2fqY2/DV8+3/z2d0VB/1D1hXbjRcM5wkxTToxq6xHbIY/NGGY6v4carskMyG8FHACxgxturJ9Pg==", + "dependencies": { + "@smithy/types": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.4.tgz", + "integrity": "sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.15.tgz", + "integrity": "sha512-SRTEJSEhQYVlBKIIdZ9SZpqW+KFqxqcNnEcBX+8xkDdWx+DItme9VcCDkdN32yTIrICC+irUufnUdV7mmHPjoA==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.13", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.15.tgz", + "integrity": "sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.7", + "@smithy/types": "^2.5.0", + "@smithy/util-stream": "^2.0.20", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.13.tgz", + "integrity": "sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.19.tgz", + "integrity": "sha512-VHP8xdFR7/orpiABJwgoTB0t8Zhhwpf93gXhNfUBiwAE9O0rvsv7LwpQYjgvbOUDDO8JfIYQB2GYJNkqqGWsXw==", + "dependencies": { + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.25.tgz", + "integrity": "sha512-jkmep6/JyWmn2ADw9VULDeGbugR4N/FJCKOt+gYyVswmN1BJOfzF2umaYxQ1HhQDvna3kzm1Dbo1qIfBW4iuHA==", + "dependencies": { + "@smithy/config-resolver": "^2.0.18", + "@smithy/credential-provider-imds": "^2.1.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/property-provider": "^2.0.14", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.6.tgz", + "integrity": "sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.6.tgz", + "integrity": "sha512-PSO41FofOBmyhPQJwBQJ6mVlaD7Sp9Uff9aBbnfBJ9eqXOE/obrqQjn0PNdkfdvViiPXl49BINfnGcFtSP4kYw==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.6", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.20.tgz", + "integrity": "sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/types": "^2.5.0", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.13.tgz", + "integrity": "sha512-YovIQatiuM7giEsRFotqJa2i3EbU2EE3PgtpXgtLgpx5rXiZMAwPxXYDFVFhuO0lbqvc/Zx4n+ZIisXOHPSqyg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.13", + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.93", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.93.tgz", + "integrity": "sha512-Vsyi9ogDAY3REZDjYnXMRJJa62SDvxHXxJI5nGDQdZW058dDE+av/anynN2rLKbCKXDRNw3D/sQmqxVflZFi4A==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "node_modules/csv-stringify": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.4.tgz", + "integrity": "sha512-NDshLupGa7gp4UG4sSNIqwYJqgSwvds0SvENntxoVoVvTzXcrHvd5gG2MWpbRpSNvk59dlmIe1IwNvSxN4IVmg==" + }, + "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==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + } + } +} diff --git a/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/package.json b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/package.json new file mode 100644 index 0000000..5df6d4a --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/package.json @@ -0,0 +1,10 @@ +{ + "name": "can-write-lambda", + "version": "1.0.0", + "main": "summarise-copy-lambda.ts", + "dependencies": { + "@aws-sdk/client-s3": "3.405.0", + "@types/aws-lambda": "8.10.93", + "csv-stringify": "6.4.4" + } +} diff --git a/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/summarise-copy-lambda.ts b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/summarise-copy-lambda.ts new file mode 100644 index 0000000..444cd31 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/summarise-copy-lambda/summarise-copy-lambda.ts @@ -0,0 +1,203 @@ +import { + GetObjectCommand, + PutObjectCommand, + S3Client, +} from "@aws-sdk/client-s3"; +import { basename } from "path/posix"; +import { stringify } from "csv-stringify/sync"; + +interface InvokeEvent { + rcloneResults: { + manifestAbsoluteKey: string; + }; + destinationBucket: string; + destinationPrefixKey: string; + destinationEndCopyRelativeKey: string; +} + +/** + * A handler that process the Steps CSV result (which should have a bunch + * of rclone stats) - and converts that into a CSV report for the + * copy out destination. + * + * @param event + */ +export async function handler(event: InvokeEvent) { + // debug input event + console.debug(JSON.stringify(event, null, 2)); + + const client = new S3Client({}); + + // the manifest.json is generated by an AWS Steps DISTRIBUTED map and shows the results + // of all the individual map run parts + const getManifestCommand = new GetObjectCommand({ + Bucket: (event as any).sourceFilesCsvBucket, + Key: event.rcloneResults.manifestAbsoluteKey, + }); + + const getManifestResult = await client.send(getManifestCommand); + + const getManifestContent = await getManifestResult.Body.transformToString(); + + // A sample manifest + // {"DestinationBucket":"elsa-data-tmp", + // "MapRunArn":"arn:aws:states:ap-southeast-2:12345678:mapRun:CopyOutStateMachineABCD/4474d22f-4056-30e3-978c-027016edac90:0c17ffd6-e8ad-44c0-a65b-a8b721007241", + // "ResultFiles":{ + // "FAILED":[], + // "PENDING":[], + // "SUCCEEDED":[{"Key":"copy-out-test-working/a6faea86c066cd90/1-objects-to-copy.tsv/0c17ffd6-e8ad-44c0-a65b-a8b721007241/SUCCEEDED_0.json", + // "Size":2887}]}} + + const manifest = JSON.parse(getManifestContent); + + console.debug(JSON.stringify(manifest, null, 2)); + + const rf = manifest["ResultFiles"]; + + if (!rf) + throw new Error( + "AWS Steps Distributed map manifest.json is missing ResultFiles", + ); + + const pending = rf["PENDING"]; + const failed = rf["FAILED"]; + const succeeded = rf["SUCCEEDED"]; + + if ( + !Array.isArray(pending) || + !Array.isArray(failed) || + !Array.isArray(succeeded) + ) + throw new Error( + "AWS Steps Distributed map manifest.json is missing an expected array for PENDING, FAILED or SUCCEEDED", + ); + + if (pending.length > 0) + throw new Error( + "AWS Steps Distributed map manifest.json indicates there are PENDING results which is not a state we are expecting", + ); + + if (failed.length > 0) + throw new Error("Copy is meant to succeed - but it had failed results"); + + const fileResults = {}; + + for (const s of succeeded) { + const getSuccessCommand = new GetObjectCommand({ + Bucket: (event as any).sourceFilesCsvBucket, + Key: s["Key"], + }); + + const getSuccessResult = await client.send(getSuccessCommand); + const getSuccessContent = await getSuccessResult.Body.transformToString(); + + for (const row of JSON.parse(getSuccessContent)) { + if (row["Output"]) { + const rowOutput = JSON.parse(row["Output"]); + + // { "bytes": 0, + // "checks": 0, + // "deletedDirs": 0, + // "deletes": 0, + // "elapsedTime": 0.2928195, + // "errors": 0, + // "eta": null, + // "fatalError": false, + // "renames": 0, + // "retryError": false, + // "serverSideCopies": 1, + // "serverSideCopyBytes": 9, + // "serverSideMoveBytes": 0, + // "serverSideMoves": 0, + // "source": "s3:elsa-data-tmp/copy-out-test-objects/d76848c9ae316e13/1-src/1.bin", + // "speed": 0, + // "totalBytes": 0, + // "totalChecks": 0, + // "totalTransfers": 1, + // "transferTime": 0.046778609, + // "transfers": 1 } + for (const rcloneRow of rowOutput["rcloneResult"]) { + console.log(JSON.stringify(rcloneRow, null, 2)); + + const s = rcloneRow["source"]; + const b = basename(s); + + // NOTE/WARNING: this behaviour is very dependent on rclone and our interpretation + // of rclone stats - so if things start breaking this is where I would start + // looking + const errors: number = rcloneRow["errors"]; + const lastError: number = rcloneRow["lastError"]; + const serverSideCopyBytes: number = rcloneRow["serverSideCopyBytes"]; + const elapsedTime = rcloneRow["elapsedTime"]; + const totalTransfers = rcloneRow["totalTransfers"]; + const retryError = rcloneRow["retryError"]; + + // firstly if we have been signalled an error - we need to report that + if (errors > 0) { + fileResults[b] = { + name: b, + status: "ERROR", + speed: 0, + message: lastError, + }; + } else { + // if we didn't end up transferring anything BUT there was no actual error AND + // we did a retry - then that probably means the source file didn't exist + if (totalTransfers < 1 && retryError) { + fileResults[b] = { + name: b, + status: "ERROR", + speed: 0, + message: "source file did not exist so nothing was transferred", + }; + } + // if we didn't end up transferring anything BUT there was no actual error + // AND we didn't do any retries then changes are we skipped due to it already + // being at the destination + else if (totalTransfers < 1 && !retryError) { + fileResults[b] = { + name: b, + status: "ALREADYCOPIED", + speed: 0, + message: + "destination file already exists with same checksum so nothing was transferred", + }; + } else { + // if we did do a copy then copySeconds will normally be a value and we can compute a speed + if (elapsedTime) + fileResults[b] = { + name: b, + status: "COPIED", + speed: Math.floor( + serverSideCopyBytes / elapsedTime / 1024 / 1024, + ), + message: "", + }; + } + } + } + } + } + + // debug results before we make the CSV + console.debug(JSON.stringify(fileResults, null, 2)); + + const output = stringify(Object.values(fileResults), { + header: true, + columns: { + name: "OBJECTNAME", + status: "TRANSFERSTATUS", + speed: "MBPERSEC", + message: "MESSAGE", + }, + }); + + const putCommand = new PutObjectCommand({ + Bucket: event.destinationBucket, + Key: `${event.destinationPrefixKey}${event.destinationEndCopyRelativeKey}`, + Body: output, + }); + + await client.send(putCommand); + } +} diff --git a/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/.gitignore b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/.gitignore new file mode 100644 index 0000000..dc19133 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/.gitignore @@ -0,0 +1,3 @@ + +# this lambda is a straight JS - no typescript so we need to include the JS +!*.js diff --git a/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/errors.ts b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/errors.ts new file mode 100644 index 0000000..87ed69b --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/errors.ts @@ -0,0 +1,7 @@ +export class IsThawingError extends Error { + constructor(message: string) { + super(); + this.name = "IsThawingError"; + this.message = message; + } +} diff --git a/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/package-lock.json b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/package-lock.json new file mode 100644 index 0000000..e874f44 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/package-lock.json @@ -0,0 +1,1438 @@ +{ + "name": "can-write-lambda", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "can-write-lambda", + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-s3": "3.405.0", + "@types/aws-lambda": "8.10.93" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/crc32c": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", + "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32c/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "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==" + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", + "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.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" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "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==", + "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-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" + } + }, + "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==" + }, + "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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "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==" + }, + "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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "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==" + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.405.0.tgz", + "integrity": "sha512-+LK6OCbKplR51zBZAtK/+RxaPsXcEklsA1+mmUA3M1h4KHl6GMiK5r/D9dlKht5DRntmmjCn3SI99QbfckqKXg==", + "dependencies": { + "@aws-crypto/sha1-browser": "3.0.0", + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.405.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-bucket-endpoint": "3.405.0", + "@aws-sdk/middleware-expect-continue": "3.398.0", + "@aws-sdk/middleware-flexible-checksums": "3.400.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-location-constraint": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-s3": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-ssec": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/signature-v4-multi-region": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@aws-sdk/xml-builder": "3.310.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/eventstream-serde-browser": "^2.0.5", + "@smithy/eventstream-serde-config-resolver": "^2.0.5", + "@smithy/eventstream-serde-node": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-blob-browser": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/hash-stream-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/md5-js": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-stream": "^2.0.5", + "@smithy/util-utf8": "^2.0.0", + "@smithy/util-waiter": "^2.0.5", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.405.0.tgz", + "integrity": "sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.405.0.tgz", + "integrity": "sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.405.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-sdk-sts": "3.398.0", + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/protocol-http": "^2.0.5", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz", + "integrity": "sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.405.0.tgz", + "integrity": "sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.405.0.tgz", + "integrity": "sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.398.0", + "@aws-sdk/credential-provider-ini": "3.405.0", + "@aws-sdk/credential-provider-process": "3.405.0", + "@aws-sdk/credential-provider-sso": "3.405.0", + "@aws-sdk/credential-provider-web-identity": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.405.0.tgz", + "integrity": "sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.405.0.tgz", + "integrity": "sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==", + "dependencies": { + "@aws-sdk/client-sso": "3.405.0", + "@aws-sdk/token-providers": "3.405.0", + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz", + "integrity": "sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.405.0.tgz", + "integrity": "sha512-wKmHZi44NkbaGXXbMwassUm06/wDtSYucPbM4paU2cMbBUOnwFpndHWlrRYCNmj5Ty5A2HjdkGlhgla8nifHzQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-config-provider": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.398.0.tgz", + "integrity": "sha512-d6he+Qqwh1yqml9duXSv5iKJ2lS0PVrF2UEsVew2GFxfUif0E/davTZJjvWtnelbuIGcTP+wDKVVjLwBN2sN/g==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.400.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.400.0.tgz", + "integrity": "sha512-lpsumd5/G+eAMTr61h/cJQZ8+i+xzC6OG3bvUcbRHqcjN49XgeNLcPfYcr6Rzf0QHxmuCN4te/4XGU3Fif2YVA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@aws-crypto/crc32c": "3.0.0", + "@aws-sdk/types": "3.398.0", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz", + "integrity": "sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.398.0.tgz", + "integrity": "sha512-it+olJf1Lf2bmH8OL/N1jMOFB0zEVYs4rIzgFrluTRCuPatRuDi4LsXS8zqYxkBa05JE8JmqwW5gCzAmWyLLqw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz", + "integrity": "sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz", + "integrity": "sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.398.0.tgz", + "integrity": "sha512-yweSMc/TyiFtqc52hFMKQJvTm3i1KCoW5mB3o/Sla6zsHBh+nS6TTaBmo+2kcDIR7AKODwW+FLCTHWiazb7J3Q==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-arn-parser": "3.310.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz", + "integrity": "sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==", + "dependencies": { + "@aws-sdk/middleware-signing": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz", + "integrity": "sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.398.0.tgz", + "integrity": "sha512-QtKr/hPcRugKSIZAH4+7hbUfdW7Lg+OQvD25nJn7ic1JHRZ+eDctEFxdsmnt68lE6aZxOcHCWHAW6/umcA93Dw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz", + "integrity": "sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.398.0.tgz", + "integrity": "sha512-8fTqTxRDWE03T7ClaWlCfbwuSae//01XMNVy2a9g5QgaelQh7ZZyU3ZIJiV8gIj8v6ZM0NGn9Bz1liI/vmNmcw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/signature-v4-crt": "^3.118.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/signature-v4-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.405.0.tgz", + "integrity": "sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.398.0", + "@aws-sdk/middleware-logger": "3.398.0", + "@aws-sdk/middleware-recursion-detection": "3.398.0", + "@aws-sdk/middleware-user-agent": "3.398.0", + "@aws-sdk/types": "3.398.0", + "@aws-sdk/util-endpoints": "3.398.0", + "@aws-sdk/util-user-agent-browser": "3.398.0", + "@aws-sdk/util-user-agent-node": "3.405.0", + "@smithy/config-resolver": "^2.0.5", + "@smithy/fetch-http-handler": "^2.0.5", + "@smithy/hash-node": "^2.0.5", + "@smithy/invalid-dependency": "^2.0.5", + "@smithy/middleware-content-length": "^2.0.5", + "@smithy/middleware-endpoint": "^2.0.5", + "@smithy/middleware-retry": "^2.0.5", + "@smithy/middleware-serde": "^2.0.5", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/node-http-handler": "^2.0.5", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^2.0.5", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.0.5", + "@smithy/types": "^2.2.2", + "@smithy/url-parser": "^2.0.5", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.6", + "@smithy/util-defaults-mode-node": "^2.0.6", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.398.0.tgz", + "integrity": "sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.310.0.tgz", + "integrity": "sha512-jL8509owp/xB9+Or0pvn3Fe+b94qfklc2yPowZZIFAkFcCSIdkIglz18cPDWnYAcy9JGewpMS1COXKIUhZkJsA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz", + "integrity": "sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.398.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz", + "integrity": "sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/types": "^2.2.2", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.405.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.405.0.tgz", + "integrity": "sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==", + "dependencies": { + "@aws-sdk/types": "3.398.0", + "@smithy/node-config-provider": "^2.0.6", + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.310.0.tgz", + "integrity": "sha512-TqELu4mOuSIKQCqj63fGVs86Yh+vBx5nHRpWKNUNhB2nPTpfbziTs5c1X358be3peVWA4wPxW7Nt53KIg1tnNw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.14.tgz", + "integrity": "sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", + "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", + "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", + "dependencies": { + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.19.tgz", + "integrity": "sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.6", + "@smithy/types": "^2.6.0", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.7", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.2.tgz", + "integrity": "sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.6", + "@smithy/property-provider": "^2.0.15", + "@smithy/types": "^2.6.0", + "@smithy/url-parser": "^2.0.14", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.14.tgz", + "integrity": "sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA==", + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.6.0", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.14.tgz", + "integrity": "sha512-41wmYE9smDGJi1ZXp+LogH6BR7MkSsQD91wneIFISF/mupKULvoOJUkv/Nf0NMRxWlM3Bf1Vvi9FlR2oV4KU8Q==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.14", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.14.tgz", + "integrity": "sha512-43IyRIzQ82s+5X+t/3Ood00CcWtAXQdmUIUKMed2Qg9REPk8SVIHhpm3rwewLwg+3G2Nh8NOxXlEQu6DsPUcMw==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.14.tgz", + "integrity": "sha512-jVh9E2qAr6DxH5tWfCAl9HV6tI0pEQ3JVmu85JknDvYTC66djcjDdhctPV2EHuKWf2kjRiFJcMIn0eercW4THA==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^2.0.14", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.14.tgz", + "integrity": "sha512-Ie35+AISNn1NmEjn5b2SchIE49pvKp4Q74bE9ME5RULWI1MgXyGkQUajWd5E6OBSr/sqGcs+rD3IjPErXnCm9g==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.14", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.7.tgz", + "integrity": "sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.10", + "@smithy/querystring-builder": "^2.0.14", + "@smithy/types": "^2.6.0", + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz", + "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.15.tgz", + "integrity": "sha512-HX/7GIyPUT/HDWVYe2HYQu0iRnSYpF4uZVNhAhZsObPRawk5Mv0PbyluBgIFI2DDCCKgL/tloCYYwycff1GtQg==", + "dependencies": { + "@smithy/chunked-blob-reader": "^2.0.0", + "@smithy/chunked-blob-reader-native": "^2.0.1", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.16.tgz", + "integrity": "sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg==", + "dependencies": { + "@smithy/types": "^2.6.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.16.tgz", + "integrity": "sha512-4x24GFdeWos1Z49MC5sYdM1j+z32zcUr6oWM9Ggm3WudFAcRIcbG9uDQ1XgJ0Kl+ZTjpqLKniG0iuWvQb2Ud1A==", + "dependencies": { + "@smithy/types": "^2.6.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.14.tgz", + "integrity": "sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.16.tgz", + "integrity": "sha512-YhWt9aKl+EMSNXyUTUo7I01WHf3HcCkPu/Hl2QmTNwrHT49eWaY7hptAMaERZuHFH0V5xHgPKgKZo2I93DFtgQ==", + "dependencies": { + "@smithy/types": "^2.6.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.16.tgz", + "integrity": "sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng==", + "dependencies": { + "@smithy/protocol-http": "^3.0.10", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz", + "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.1.tgz", + "integrity": "sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.14", + "@smithy/node-config-provider": "^2.1.6", + "@smithy/shared-ini-file-loader": "^2.2.5", + "@smithy/types": "^2.6.0", + "@smithy/url-parser": "^2.0.14", + "@smithy/util-middleware": "^2.0.7", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.21.tgz", + "integrity": "sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.6", + "@smithy/protocol-http": "^3.0.10", + "@smithy/service-error-classification": "^2.0.7", + "@smithy/types": "^2.6.0", + "@smithy/util-middleware": "^2.0.7", + "@smithy/util-retry": "^2.0.7", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz", + "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.14.tgz", + "integrity": "sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.8.tgz", + "integrity": "sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.6.tgz", + "integrity": "sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==", + "dependencies": { + "@smithy/property-provider": "^2.0.15", + "@smithy/shared-ini-file-loader": "^2.2.5", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.10.tgz", + "integrity": "sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==", + "dependencies": { + "@smithy/abort-controller": "^2.0.14", + "@smithy/protocol-http": "^3.0.10", + "@smithy/querystring-builder": "^2.0.14", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz", + "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.15.tgz", + "integrity": "sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.5.tgz", + "integrity": "sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==", + "dependencies": { + "@smithy/types": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.14.tgz", + "integrity": "sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==", + "dependencies": { + "@smithy/types": "^2.6.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.14.tgz", + "integrity": "sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.7.tgz", + "integrity": "sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==", + "dependencies": { + "@smithy/types": "^2.6.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.5.tgz", + "integrity": "sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.16.tgz", + "integrity": "sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==", + "dependencies": { + "@smithy/eventstream-codec": "^2.0.14", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.6.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.7", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.16.tgz", + "integrity": "sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==", + "dependencies": { + "@smithy/middleware-stack": "^2.0.8", + "@smithy/types": "^2.6.0", + "@smithy/util-stream": "^2.0.21", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.6.0.tgz", + "integrity": "sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.14.tgz", + "integrity": "sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.14", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.20.tgz", + "integrity": "sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw==", + "dependencies": { + "@smithy/property-provider": "^2.0.15", + "@smithy/smithy-client": "^2.1.16", + "@smithy/types": "^2.6.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.26.tgz", + "integrity": "sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==", + "dependencies": { + "@smithy/config-resolver": "^2.0.19", + "@smithy/credential-provider-imds": "^2.1.2", + "@smithy/node-config-provider": "^2.1.6", + "@smithy/property-provider": "^2.0.15", + "@smithy/smithy-client": "^2.1.16", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.7.tgz", + "integrity": "sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==", + "dependencies": { + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.7.tgz", + "integrity": "sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==", + "dependencies": { + "@smithy/service-error-classification": "^2.0.7", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.21.tgz", + "integrity": "sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.7", + "@smithy/node-http-handler": "^2.1.10", + "@smithy/types": "^2.6.0", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.14.tgz", + "integrity": "sha512-Q6gSz4GUNjNGhrfNg+2Mjy+7K4pEI3r82x1b/+3dSc03MQqobMiUrRVN/YK/4nHVagvBELCoXsiHAFQJNQ5BeA==", + "dependencies": { + "@smithy/abort-controller": "^2.0.14", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.93", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.93.tgz", + "integrity": "sha512-Vsyi9ogDAY3REZDjYnXMRJJa62SDvxHXxJI5nGDQdZW058dDE+av/anynN2rLKbCKXDRNw3D/sQmqxVflZFi4A==" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + }, + "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==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + } + } +} diff --git a/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/package.json b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/package.json new file mode 100644 index 0000000..3e82df7 --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/package.json @@ -0,0 +1,9 @@ +{ + "name": "thaw-objects-lambda", + "version": "1.0.0", + "main": "thaw-objects-lambda.ts", + "dependencies": { + "@aws-sdk/client-s3": "3.405.0", + "@types/aws-lambda": "8.10.93" + } +} diff --git a/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/thaw-objects-lambda.ts b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/thaw-objects-lambda.ts new file mode 100644 index 0000000..a24254b --- /dev/null +++ b/packages/aws-copy-out-sharer/lambda/thaw-objects-lambda/thaw-objects-lambda.ts @@ -0,0 +1,148 @@ +import { + HeadObjectCommand, + RestoreObjectCommand, + S3Client, +} from "@aws-sdk/client-s3"; +import { IsThawingError } from "./errors"; + +interface ThawObjectsEvent { + Items: { + bucket: string; + key: string; + }[]; + + BatchInput: { + glacierFlexibleRetrievalThawDays: number; + glacierFlexibleRetrievalThawSpeed: string; + + glacierDeepArchiveThawDays: number; + glacierDeepArchiveThawSpeed: string; + + intelligentTieringArchiveThawDays: number; + intelligentTieringArchiveThawSpeed: string; + + intelligentTieringDeepArchiveThawDays: number; + intelligentTieringDeepArchiveThawSpeed: string; + }; +} + +/** + * A function to initiate restore/monitor any S3 objects that are in storage + * classes that do not allow immediate access. + * + * Note that restoring objects is the *sole* purpose of this lambda - so even + * though it could detect invalid objects / permissions errors etc - that is + * not what it is going to do. + * + * It attempts to find any objects that need thawing and initiates a restore. + * And it detects if any of in the process of thawing. In those cases it + * throws an Error. In *all other cases* it passes on data for the Fargate + * rclone step (even if there were exceptions it gobbled up). + * + * We do this because rclone has better mechanism for detecting errors and + * we don't want to redo the work here. Also this means error reporting + * out of the overall Steps orchestration will be consistent for "missing files" + * etc. + * + * @param event + */ +export async function handler(event: ThawObjectsEvent) { + console.log("thawObjects()"); + console.log(JSON.stringify(event, null, 2)); + + const client = new S3Client({}); + + // count of how many of the passed in objects we are thawing + let isThawing = 0; + + for (const o of event.Items || []) { + try { + // need to find out if the object is in a "needs restore" or "currently restoring" or "restored" category + const headCommand = new HeadObjectCommand({ + Bucket: o.bucket, + Key: o.key, + }); + + const headResult = await client.send(headCommand); + + if (headResult.Restore) { + // the object is still being thawed + if (headResult.Restore.includes('ongoing-request="true"')) isThawing++; + + // otherwise it may successfully have been restored - in which case we can just continue + // as if the file was in S3 active + // TODO are there other states we should check here? + // the only one I've found is ongoing-request=\"false\", expiry-date=\"Sat, 02 Dec 2023 00:00:00 GMT\" + continue; + } + + // now deal with the objects we have detected that are in storage classes needing restoring but where it + // hasn't started yet + if ( + headResult.StorageClass == "GLACIER" || + headResult.StorageClass == "DEEP_ARCHIVE" || + headResult.StorageClass == "INTELLIGENT_TIERING" + ) { + // some sensible defaults - that we retain if any of the expected parameter values is not present + let days: number = 1; + let tier: string = "Bulk"; + + if (headResult.StorageClass == "GLACIER") { + days = event.BatchInput.glacierFlexibleRetrievalThawDays ?? days; + tier = event.BatchInput.glacierFlexibleRetrievalThawSpeed ?? tier; + } + if (headResult.StorageClass == "DEEP_ARCHIVE") { + days = event.BatchInput.glacierDeepArchiveThawDays ?? days; + tier = event.BatchInput.glacierDeepArchiveThawSpeed ?? tier; + } + if (headResult.StorageClass == "INTELLIGENT_TIERING") { + if (headResult.ArchiveStatus == "ARCHIVE_ACCESS") { + days = event.BatchInput.intelligentTieringArchiveThawDays ?? days; + tier = event.BatchInput.intelligentTieringArchiveThawSpeed ?? tier; + } + if (headResult.ArchiveStatus == "DEEP_ARCHIVE_ACCESS") { + days = + event.BatchInput.intelligentTieringDeepArchiveThawDays ?? days; + tier = + event.BatchInput.intelligentTieringDeepArchiveThawSpeed ?? tier; + } + } + + const restoreObjectCommand = new RestoreObjectCommand({ + Bucket: o.bucket, + Key: o.key, + RestoreRequest: { + Days: days, + GlacierJobParameters: { + Tier: tier, + }, + }, + }); + + const restoreObjectResult = await client.send(restoreObjectCommand); + + // note: if the restore operation itself fails - then above line will throw an exception + // which means this will not count for "isThawing" + // which I think is the correct logic - if there is a permanent reason we can't unthaw an object - it will + // fall through out of this and the rclone will fail (at which point we will get an error and + // we can investigate) + + isThawing++; + } + } catch (e: any) { + // we actually gobble up any errors here (with just a print) + // see the top of this method for details + console.error(e); + } + } + + // the *only* way this method can fail via error is this path + // where we tell the Steps we are in the process of thawing + // *all* other paths should continue on (where they can fail in the rclone) + if (isThawing > 0) + throw new IsThawingError( + `${isThawing}/${event.Items.length} are in the process of thawing`, + ); + + return {}; +} diff --git a/packages/aws-copy-out-sharer/package.json b/packages/aws-copy-out-sharer/package.json index ae2cb29..7799759 100644 --- a/packages/aws-copy-out-sharer/package.json +++ b/packages/aws-copy-out-sharer/package.json @@ -1,7 +1,7 @@ { "name": "@elsa-data/aws-copy-out-sharer", "version": "0.0.0", - "description": "CDK project for deploying a Copy Out service into Elsa Data", + "description": "CDK constructs for a AWS Steps machine that copies objects", "homepage": "https://github.com/elsa-data/aws-copy-out-sharer", "license": "MIT", "author": { @@ -12,34 +12,37 @@ "type": "git", "url": "git+https://github.com/elsa-data/aws-copy-out-sharer.git" }, - "main": "copy-out-stack.js", - "types": "copy-out-stack.d.ts", + "main": "out/copy-out-state-machine-construct.js", + "types": "out/copy-out-state-machine-construct.d.ts", "scripts": { - "build": "jsii -vvv", + "build": "jsii", "build:watch": "jsii -w", - "package": "jsii-pacmak -vvv" + "package": "jsii-pacmak" }, "keywords": [ "jsii", - "cdk" + "cdk", + "s3", + "steps", + "copy" ], "jsii": { "outdir": "dist", - "targets": {} - }, - "dependencies": { - "@elsa-data/aws-infrastructure-client": "1.3.4" + "targets": {}, + "tsc": { + "outDir": "out", + "rootDir": "src" + } }, "peerDependencies": { - "aws-cdk-lib": "^2.93.0", - "constructs": "^10.2.70", - "@elsa-data/aws-infrastructure-client": "^1.3.4" + "aws-cdk-lib": "^2.141.0", + "constructs": "^10.3.0" }, "devDependencies": { - "aws-cdk-lib": "2.93.0", - "constructs": "10.2.70", - "jsii": "5.2.2", - "jsii-pacmak": "1.88.0", - "publib": "0.2.737" + "aws-cdk-lib": "2.141.0", + "constructs": "10.3.0", + "jsii": "5.4.15", + "jsii-pacmak": "1.98.0", + "publib": "0.2.834" } } diff --git a/packages/aws-copy-out-sharer/construct/can-write-lambda-step-construct.ts b/packages/aws-copy-out-sharer/src/can-write-lambda-step-construct.ts similarity index 54% rename from packages/aws-copy-out-sharer/construct/can-write-lambda-step-construct.ts rename to packages/aws-copy-out-sharer/src/can-write-lambda-step-construct.ts index a8fd2be..e684ae2 100644 --- a/packages/aws-copy-out-sharer/construct/can-write-lambda-step-construct.ts +++ b/packages/aws-copy-out-sharer/src/can-write-lambda-step-construct.ts @@ -3,16 +3,22 @@ import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam"; import { Duration, Stack } from "aws-cdk-lib"; import { LambdaInvoke } from "aws-cdk-lib/aws-stepfunctions-tasks"; import { Runtime } from "aws-cdk-lib/aws-lambda"; -import { IVpc, SubnetType } from "aws-cdk-lib/aws-ec2"; import { JsonPath } from "aws-cdk-lib/aws-stepfunctions"; import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; import { join } from "path"; type CanWriteLambdaStepProps = { - vpc: IVpc; - vpcSubnetSelection: SubnetType; - requiredRegion: string; + + /** + * If true, will allow this CanWrite lambda to test a bucket that is + * in the same account. Otherwise, and by default, the CanWrite lambda + * is set up to not be able to test a bucket in the same account as it + * is installed. This is a security mechanism as writes to buckets in the + * same account is allowed implicitly but is dangerous. This should only + * be set to true for development/testing. + */ + allowWriteToThisAccount?: boolean; }; /** @@ -27,15 +33,17 @@ export class CanWriteLambdaStepConstruct extends Construct { super(scope, id); const canWriteLambda = new NodejsFunction(this, "CanWriteFunction", { - vpc: props.vpc, - entry: join(__dirname, "can-write-lambda", "can-write-lambda.js"), - // by specifying the precise runtime - the bundler knows exactly what packages are already in - // the base image - and for us can skip bundling @aws-sdk - // if we need to move this forward to node 18+ - then we may need to revisit this - runtime: Runtime.NODEJS_18_X, + entry: join( + __dirname, + "..", + "lambda", + "can-write-lambda", + "can-write-lambda.ts", + ), + runtime: Runtime.NODEJS_20_X, handler: "handler", - vpcSubnets: { - subnetType: props.vpcSubnetSelection, + bundling: { + minify: false, }, // this seems like plenty of seconds to do a few API calls to S3 timeout: Duration.seconds(30), @@ -46,15 +54,17 @@ export class CanWriteLambdaStepConstruct extends Construct { effect: Effect.ALLOW, actions: ["s3:PutObject"], resources: ["*"], - conditions: { - // yes - that's right - we want to give this lambda the ability to attempt the writes anywhere - // EXCEPT where we are deployed - // (under the assumption that buckets outside our account must be giving us explicit write permission, - // whilst within our account we get implicit access - in this case we don't want that ability) - StringNotEquals: { - "s3:ResourceAccount": [Stack.of(this).account], - }, - }, + // yes - that's right - we want to give this lambda the ability to attempt the writes anywhere + // EXCEPT where we are deployed + // (under the assumption that buckets outside our account must be giving us explicit write permission, + // whilst within our account we get implicit access - in this case we don't want that ability) + conditions: props.allowWriteToThisAccount + ? undefined + : { + StringNotEquals: { + "s3:ResourceAccount": [Stack.of(this).account], + }, + }, }), ); diff --git a/packages/aws-copy-out-sharer/src/copy-out-state-machine-construct.ts b/packages/aws-copy-out-sharer/src/copy-out-state-machine-construct.ts new file mode 100644 index 0000000..78aff02 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/copy-out-state-machine-construct.ts @@ -0,0 +1,180 @@ +import { Construct } from "constructs"; +import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam"; +import { + ChainDefinitionBody, + Fail, + Pass, + StateMachine, + Succeed, + Wait, + WaitTime, +} from "aws-cdk-lib/aws-stepfunctions"; +import { Duration, Stack } from "aws-cdk-lib"; +import { CanWriteLambdaStepConstruct } from "./can-write-lambda-step-construct"; +import { ThawObjectsMapConstruct } from "./thaw-objects-map-construct"; +import { CopyOutStateMachineInput } from "./copy-out-state-machine-input"; +import { RcloneMapConstruct } from "./rclone-map-construct"; +import { CopyOutStateMachineProps } from "./copy-out-state-machine-props"; +import { SummariseCopyLambdaStepConstruct } from "./summarise-copy-lambda-step-construct"; + +export { CopyOutStateMachineProps } from "./copy-out-state-machine-props"; +export { SubnetType } from "aws-cdk-lib/aws-ec2"; + +/** + * A construct that makes a state machine for bulk copying (large) + * objects from one bucket to another. + */ +export class CopyOutStateMachineConstruct extends Construct { + private readonly _stateMachine: StateMachine; + constructor(scope: Construct, id: string, props: CopyOutStateMachineProps) { + super(scope, id); + + if (props.workingBucketPrefixKey) + if (!props.workingBucketPrefixKey.endsWith("/")) + throw new Error( + "If specified, the working bucket prefix key must end with a slash", + ); + + // these are the default values that are applied to the *steps* input + const defaults: Partial = { + maxItemsPerBatch: 8, + copyConcurrency: 80, + requiredRegion: Stack.of(this).region, + // by default, we just copy into the top level of the destination bucket + destinationPrefixKey: "", + + // these are the default objects that will be created in the destination prefix area + destinationStartCopyRelativeKey: "STARTED_COPY.txt", + destinationEndCopyRelativeKey: "ENDED_COPY.csv", + }; + + const canWriteLambdaStep = new CanWriteLambdaStepConstruct( + this, + "CanWrite", + { + requiredRegion: Stack.of(this).region, + allowWriteToThisAccount: props.allowWriteToInstalledAccount, + }, + ); + + const canWriteStep = canWriteLambdaStep.invocableLambda; + + // when choosing times remember + // AWS Step Functions has a hard quota of 25,000 entries in the execution event history + // so if a copy takes 1 month say (very worst case)... that's 30x24x60 minutes = 43,000 + // so waiting every 10 minutes would end up with 4,300 execution events - which is well + // inside the limit + + const waitCanWriteStep = new Wait( + this, + "Wait X Minutes For Writeable Bucket", + { + time: WaitTime.duration( + props.aggressiveTimes ? Duration.seconds(30) : Duration.minutes(10), + ), + }, + ); + + //const waitIsThawedStep = new Wait(this, "Wait X Minutes For Thawed Objects", { + // time: WaitTime.duration( + // props.aggressiveTimes ? Duration.seconds(30) : Duration.minutes(10), + // ), + //}); + + const defineDefaults = new Pass(this, "Define Defaults", { + parameters: defaults, + resultPath: "$.inputDefaults", + }); + + const success = new Succeed(this, "Succeed"); + + const fail = new Fail(this, "Fail Wrong Bucket Region"); + + const applyDefaults = new Pass(this, "Apply Defaults", { + // merge default parameters into whatever the user has sent us + resultPath: "$.withDefaults", + outputPath: "$.withDefaults.args", + parameters: { + "args.$": + "States.JsonMerge($.inputDefaults, $$.Execution.Input, false)", + }, + }); + + canWriteStep.addCatch(waitCanWriteStep.next(canWriteStep), { + errors: ["AccessDeniedError"], + }); + + canWriteStep.addCatch(fail, { errors: ["WrongRegionError"] }); + + const rcloneMap = new RcloneMapConstruct(this, "RcloneMap", { + vpc: props.vpc, + vpcSubnetSelection: props.vpcSubnetSelection, + workingBucket: props.workingBucket, + workingBucketPrefixKey: props.workingBucketPrefixKey ?? "", + }); + + const thawObjectsMap = new ThawObjectsMapConstruct(this, "ThawObjects", { + workingBucket: props.workingBucket, + workingBucketPrefixKey: props.workingBucketPrefixKey ?? "", + }); + + const summariseCopyLambdaStep = new SummariseCopyLambdaStepConstruct( + this, + "SummariseCopy", + { + workingBucket: props.workingBucket, + workingBucketPrefixKey: props.workingBucketPrefixKey ?? "", + allowWriteToThisAccount: props.allowWriteToInstalledAccount, + }, + ); + + const definition = ChainDefinitionBody.fromChainable( + defineDefaults + .next(applyDefaults) + .next(canWriteStep) + .next(thawObjectsMap.distributedMap) + .next(rcloneMap.distributedMap) + .next(summariseCopyLambdaStep.invocableLambda) + .next(success), + ); + + // NOTE: we use a technique here to allow optional input parameters to the state machine + // by defining defaults and then JsonMerging them with the actual input params + this._stateMachine = new StateMachine(this, "StateMachine", { + // we might be thawing objects from S3 deep glacier (24-48 hrs) + // we also give people a window of time in which to create the destination bucket - so this + // could run a long time + timeout: props.aggressiveTimes ? Duration.days(7) : Duration.days(30), + definitionBody: definition, + }); + + thawObjectsMap.distributedMap.grantNestedPermissions(this._stateMachine); + rcloneMap.distributedMap.grantNestedPermissions(this._stateMachine); + + // first policy is we need to let the state machine access our CSV list + // of objects to copy, and write back to record the status of the copies + // i.e. perms needed for result writing from distributed map (from AWS docs) + // https://docs.aws.amazon.com/step-functions/latest/dg/input-output-resultwriter.html#resultwriter-iam-policies + this._stateMachine.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [ + "s3:GetObject", + "s3:PutObject", + "s3:ListMultipartUploadParts", + "s3:AbortMultipartUpload", + ], + resources: [ + "*", + //`arn:aws:s3:::${props.workingBucket}/${ + // props.workingBucketPrefixKey ?? "" + //}*`, + ], + }), + ); + } + + public get stateMachine() { + return this._stateMachine; + } +} diff --git a/packages/aws-copy-out-sharer/src/copy-out-state-machine-input.ts b/packages/aws-copy-out-sharer/src/copy-out-state-machine-input.ts new file mode 100644 index 0000000..81331c3 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/copy-out-state-machine-input.ts @@ -0,0 +1,40 @@ +/** + * The type that matches our expected input to the state machine. + * This is more for internal consistency - it is not directly + * used to define the "schema" of the state machine. + */ +export type CopyOutStateMachineInput = { + sourceFilesCsvKey: string; + + requiredRegion: string; + + copyConcurrency: number; + maxItemsPerBatch: number; + + destinationBucket: string; + destinationPrefixKey: string; + + destinationStartCopyRelativeKey: string; + destinationEndCopyRelativeKey: string; +}; + +export type CopyOutStateMachineInputKeys = keyof CopyOutStateMachineInput; + +// this odd construct just makes sure that the JSON paths we specify +// here correspond with fields in the master "input" schema for the +// overall Steps function +export const SOURCE_FILES_CSV_KEY_FIELD_NAME: CopyOutStateMachineInputKeys = + "sourceFilesCsvKey"; + +export const MAX_ITEMS_PER_BATCH_FIELD_NAME: CopyOutStateMachineInputKeys = + "maxItemsPerBatch"; + +export const DESTINATION_BUCKET_FIELD_NAME: CopyOutStateMachineInputKeys = + "destinationBucket"; +export const DESTINATION_PREFIX_KEY_FIELD_NAME: CopyOutStateMachineInputKeys = + "destinationPrefixKey"; + +export const DESTINATION_START_COPY_RELATIVE_KEY_FIELD_NAME: CopyOutStateMachineInputKeys = + "destinationStartCopyRelativeKey"; +export const DESTINATION_END_COPY_RELATIVE_KEY_FIELD_NAME: CopyOutStateMachineInputKeys = + "destinationEndCopyRelativeKey"; diff --git a/packages/aws-copy-out-sharer/src/copy-out-state-machine-props.ts b/packages/aws-copy-out-sharer/src/copy-out-state-machine-props.ts new file mode 100644 index 0000000..f3ef343 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/copy-out-state-machine-props.ts @@ -0,0 +1,47 @@ +import { IVpc, SubnetType } from "aws-cdk-lib/aws-ec2"; + +export interface CopyOutStateMachineProps { + /** + * The VPC that our compute cluster will be run in + */ + readonly vpc: IVpc; + + /** + * The VPC subnet that will be used for compute units (would generally + * be "private with egress" - but should work with others if properly + * configured. + */ + readonly vpcSubnetSelection: SubnetType; + + /** + * A bucket in the installation account that can be used for working + * artifacts such as temporary files, distributed maps outputs etc. + * These objects will be small, but the bucket can be set with a + * lifecycle to delete the objects after 30 days (or however long the + * maximum copy operation may be set to) + */ + readonly workingBucket: string; + + /** + * A prefix in the workingBucket that will be used for all artifacts + * created. Note that the prefix can be something simple such as "temp". + * The copy out stack will handle making sure there is enough + * uniqueness in artifacts that they don't clash. + */ + readonly workingBucketPrefixKey?: string; + + /** + * Whether the stack should use duration/timeouts that are more suited + * to demonstration/development. i.e. minutes rather than hours for wait times, + * hours rather than days for copy time-outs. + */ + readonly aggressiveTimes?: boolean; + + /** + * Whether the stack should be given any permissions to copy data into + * the same account it is installed into. For demonstration/development + * this might be useful - but in general this should be not set - as the + * primary use case is to copy objects "out" of the account/buckets. + */ + readonly allowWriteToInstalledAccount?: boolean; +} diff --git a/packages/aws-copy-out-sharer/src/rclone-map-construct.ts b/packages/aws-copy-out-sharer/src/rclone-map-construct.ts new file mode 100644 index 0000000..8180e13 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/rclone-map-construct.ts @@ -0,0 +1,109 @@ +import { Construct } from "constructs"; +import { JsonPath } from "aws-cdk-lib/aws-stepfunctions"; +import { S3CsvDistributedMap } from "./s3-csv-distributed-map"; +import { RcloneRunTaskConstruct } from "./rclone-run-task-construct"; +import { IVpc, SubnetType } from "aws-cdk-lib/aws-ec2"; +import { Cluster } from "aws-cdk-lib/aws-ecs"; +import { + DESTINATION_BUCKET_FIELD_NAME, + DESTINATION_PREFIX_KEY_FIELD_NAME, + MAX_ITEMS_PER_BATCH_FIELD_NAME, + SOURCE_FILES_CSV_KEY_FIELD_NAME, +} from "./copy-out-state-machine-input"; + +type Props = { + vpc: IVpc; + vpcSubnetSelection: SubnetType; + + workingBucket: string; + workingBucketPrefixKey: string; +}; + +export class RcloneMapConstruct extends Construct { + public readonly distributedMap: S3CsvDistributedMap; + + constructor(scope: Construct, id: string, props: Props) { + super(scope, id); + + const cluster = new Cluster(this, "FargateCluster", { + vpc: props.vpc, + enableFargateCapacityProviders: true, + }); + + const rcloneRunTask = new RcloneRunTaskConstruct( + this, + "RcloneFargateTask", + { + fargateCluster: cluster, + vpcSubnetSelection: props.vpcSubnetSelection, + }, + ).ecsRunTask; + + // our task is an idempotent copy operation so we can retry if we happen to get killed + // (possible given we are using Spot fargate) + rcloneRunTask.addRetry({ + errors: ["States.TaskFailed"], + maxAttempts: 3, + }); + + // these names are internal only - but we pull out as a const to make sure + // they are consistent + const bucketColumnName = "b"; + const keyColumnName = "k"; + + // { + // "BatchInput": { + // "rcloneDestination": "s3:cpg-cardiac-flagship-transfer/optionalpath" + // }, + // "Items": [ + // { + // "rcloneSource": "s3:bucket/1.fastq.gz" + // }, + // { + // "rcloneSource": "s3:bucket/2.fastq.gz" + // }, + // } + + this.distributedMap = new S3CsvDistributedMap(this, "RcloneMap", { + toleratedFailurePercentage: 25, + batchMaxItemsPath: `$.${MAX_ITEMS_PER_BATCH_FIELD_NAME}`, + itemReaderCsvHeaders: [bucketColumnName, keyColumnName], + itemReader: { + Bucket: props.workingBucket, + "Key.$": JsonPath.format( + "{}{}", + props.workingBucketPrefixKey, + JsonPath.stringAt(`$.${SOURCE_FILES_CSV_KEY_FIELD_NAME}`), + ), + }, + itemSelector: { + "rcloneSource.$": JsonPath.format( + // note: this is not an s3:// URL, it is the peculiar syntax used by rclone + "s3:{}/{}", + JsonPath.stringAt(`$$.Map.Item.Value.${bucketColumnName}`), + JsonPath.stringAt(`$$.Map.Item.Value.${keyColumnName}`), + ), + }, + batchInput: { + "rcloneDestination.$": JsonPath.format( + "s3:{}/{}", + JsonPath.stringAt(`$.${DESTINATION_BUCKET_FIELD_NAME}`), + JsonPath.stringAt(`$.${DESTINATION_PREFIX_KEY_FIELD_NAME}`), + ), + }, + iterator: rcloneRunTask, + resultWriter: { + Bucket: props.workingBucket, + "Prefix.$": JsonPath.format( + "{}{}", + props.workingBucketPrefixKey, + JsonPath.stringAt(`$.${SOURCE_FILES_CSV_KEY_FIELD_NAME}`), + ), + }, + resultSelector: { + "manifestAbsoluteKey.$": "$.ResultWriterDetails.Key", + }, + resultPath: `$.rcloneResults`, + }); + } +} diff --git a/packages/aws-copy-out-sharer/construct/fargate-run-task-construct.ts b/packages/aws-copy-out-sharer/src/rclone-run-task-construct.ts similarity index 69% rename from packages/aws-copy-out-sharer/construct/fargate-run-task-construct.ts rename to packages/aws-copy-out-sharer/src/rclone-run-task-construct.ts index 98628b7..7cb4764 100644 --- a/packages/aws-copy-out-sharer/construct/fargate-run-task-construct.ts +++ b/packages/aws-copy-out-sharer/src/rclone-run-task-construct.ts @@ -1,7 +1,7 @@ import { Construct } from "constructs"; -import { ManagedPolicy } from "aws-cdk-lib/aws-iam"; +import { ManagedPolicy, PolicyStatement } from "aws-cdk-lib/aws-iam"; import { IntegrationPattern, JsonPath } from "aws-cdk-lib/aws-stepfunctions"; -import { Duration, Stack, Tags } from "aws-cdk-lib"; +import { Duration, Stack } from "aws-cdk-lib"; import { AssetImage, CpuArchitecture, @@ -25,9 +25,19 @@ import { SubnetType } from "aws-cdk-lib/aws-ec2"; type Props = { fargateCluster: ICluster; vpcSubnetSelection: SubnetType; + + /** + * If true, will allow the run task to copy to a bucket that is + * in the same account. Otherwise, and by default, the copy task + * is set up to not be able to copy to a bucket in the same account as it + * is installed. This is a security mechanism as writes to buckets in the + * same account is allowed implicitly but is dangerous. This should only + * be set to true for development/testing. + */ + //allowWriteToThisAccount?: boolean; WIP NEED TO IMPLEMENT }; -export class FargateRunTaskConstruct extends Construct { +export class RcloneRunTaskConstruct extends Construct { public readonly ecsRunTask: EcsRunTask; constructor(scope: Construct, id: string, props: Props) { @@ -40,11 +50,11 @@ export class FargateRunTaskConstruct extends Construct { }, cpu: 256, // there is a warning in the rclone documentation about problems with mem < 1GB - but I think that - // is mainly for large syncs.. we do individual file copies so 512 should be fine + // is mainly for large syncs... we do individual/small file copies so 512 should be fine memoryLimitMiB: 512, }); - Tags.of(taskDefinition).add("test", "tag"); + // Tags.of(taskDefinition).add("test", "tag"); // we need to give the rclone task the ability to do the copy out in S3 // TODO can we limit this to reading from our designated buckets and writing out @@ -52,18 +62,57 @@ export class FargateRunTaskConstruct extends Construct { ManagedPolicy.fromAwsManagedPolicyName("AmazonS3FullAccess"), ); + taskDefinition.taskRole.addToPrincipalPolicy( + new PolicyStatement({ + resources: ["*"], + actions: [ + "states:SendTaskSuccess", + "states:SendTaskFailure", + "states:SendTaskHeartbeat", + ], + }), + ); + + /* + import { LinuxParameters } from "aws-cdk-lib/aws-ecs"; + const linux = new LinuxParameters(this, "Linux", { + + }); + + linux.addTmpfs( + { + "mountOptions": [ TmpfsMountOption.RW ], + "containerPath": "/run", + "size": 10 + }, + { + "mountOptions": [ TmpfsMountOption.RW], + "containerPath": "/tmp", + "size": 10 + } + ); */ + const containerDefinition = taskDefinition.addContainer("RcloneContainer", { - // set the stop timeout to the maximum allowed under Fargate - as potentially this will let us finish - // our rclone operation + // set the stop timeout to the maximum allowed under Fargate Spot + // potentially this will let us finish our rclone operation (!!! - we don't actually try to let rclone finish - see Docker image - we should) stopTimeout: Duration.seconds(120), - image: new AssetImage(join(__dirname, "rclone-batch-copy-docker-image"), { - // note we are forcing the X86 platform because we want to use Fargate spot which is only available intel/x86 - platform: Platform.LINUX_AMD64, - }), + image: new AssetImage( + join(__dirname, "..", "docker", "rclone-batch-docker-image"), + { + // note we are forcing the X86 platform because we want to use Fargate spot which is only available intel/x86 + platform: Platform.LINUX_AMD64, + }, + ), + readonlyRootFilesystem: true, + // https://stackoverflow.com/questions/68933848/how-to-allow-container-with-read-only-root-filesystem-writing-to-tmpfs-volume + // DOESN'T WORK FOR FARGATE SO NEED TO THINK ABOUT THIS OTHER WAY + // linuxParameters: linux, logging: LogDriver.awsLogs({ streamPrefix: "elsa-data-copy-out", logRetention: RetentionDays.ONE_WEEK, }), + // eg the equivalent of + // RCLONE_CONFIG_S3_TYPE=s3 RCLONE_CONFIG_S3_PROVIDER=AWS RCLONE_CONFIG_S3_ENV_AUTH=true RCLONE_CONFIG_S3_REGION=ap-southeast-2 rclone copy src dest environment: { RCLONE_CONFIG_S3_TYPE: "s3", RCLONE_CONFIG_S3_PROVIDER: "AWS", @@ -74,11 +123,10 @@ export class FargateRunTaskConstruct extends Construct { }, }); - // RCLONE_CONFIG_S3_TYPE=s3 RCLONE_CONFIG_S3_PROVIDER=AWS RCLONE_CONFIG_S3_ENV_AUTH=true RCLONE_CONFIG_S3_REGION=ap-southeast-2 rclone copy src dest - // https://github.com/aws/aws-cdk/issues/20013 this.ecsRunTask = new EcsRunTask(this, "Copy File with Rclone", { - integrationPattern: IntegrationPattern.RUN_JOB, + // we use task tokens as we want to return rclone stats/results + integrationPattern: IntegrationPattern.WAIT_FOR_TASK_TOKEN, cluster: props.fargateCluster, taskDefinition: taskDefinition, launchTarget: new EcsFargateSpotOnlyLaunchTarget({ @@ -87,24 +135,28 @@ export class FargateRunTaskConstruct extends Construct { subnets: { subnetType: props.vpcSubnetSelection, }, - resultSelector: { - // NOTE almost any amount of output can cause the joint result to overflow.. - // best to look up all this data at the ECS Task level - // have left these here to show how you can export ECS output if you want - // "capacityProviderName.$": JsonPath.stringAt("$.CapacityProviderName"), - // "stoppedAt.$": JsonPath.numberAt("$.StoppedAt"), - // "stoppedReason.$": JsonPath.stringAt("$.StoppedReason"), - }, + //resultSelector: { + // "rclone.$": JsonPath.objectAt("$"), + // "capacityProviderName.$": JsonPath.stringAt("$.CapacityProviderName"), + //"stoppedAt.$": JsonPath.numberAt("$.StoppedAt"), + //"stoppedReason.$": JsonPath.stringAt("$.StoppedReason"), + // }, + resultPath: "$.rcloneResult", containerOverrides: [ { containerDefinition: containerDefinition, - command: JsonPath.listAt("$.Items[*].source"), + command: JsonPath.listAt("$.Items[*].rcloneSource"), environment: [ { - name: "destination", - value: JsonPath.stringAt( - "$.BatchInput.destinationBucketForRclone", - ), + name: "RB_DESTINATION", + // note this might be just a bucket name, or a bucket name with path + // (that decision is made higher in the stack) + // as far as rclone binary itself is concerned, it does not matter + value: JsonPath.stringAt("$.BatchInput.rcloneDestination"), + }, + { + name: "RB_TASK_TOKEN", + value: JsonPath.stringAt("$$.Task.Token"), }, ], }, diff --git a/packages/aws-copy-out-sharer/src/s3-csv-distributed-map.ts b/packages/aws-copy-out-sharer/src/s3-csv-distributed-map.ts new file mode 100644 index 0000000..e561365 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/s3-csv-distributed-map.ts @@ -0,0 +1,168 @@ +import { + Chain, + IChainable, + INextable, + JsonPath, + State, + StateGraph, + StateMachine, +} from "aws-cdk-lib/aws-stepfunctions"; +import { + Effect, + ManagedPolicy, + Policy, + PolicyStatement, +} from "aws-cdk-lib/aws-iam"; +import { Construct } from "constructs"; + +export interface S3CsvDistributedMapProps { + readonly iterator: State; + readonly toleratedFailurePercentage: number; + readonly itemReaderCsvHeaders: string[]; + readonly itemReader: { + readonly Bucket?: JsonPath | string; + readonly "Bucket.$"?: string; + readonly Key?: JsonPath | string; + readonly "Key.$"?: string; + }; + readonly resultWriter?: { + readonly Bucket?: JsonPath | string; + readonly "Bucket.$"?: string; + readonly Prefix?: JsonPath | string; + readonly "Prefix.$"?: string; + }; + readonly itemSelector?: Readonly>; + + readonly batchMaxItems?: number; + readonly batchMaxItemsPath?: JsonPath | string; + readonly batchInput?: Readonly>; + + readonly maxConcurrency?: number; + readonly maxConcurrencyPath?: JsonPath | string; + + readonly resultPath?: JsonPath | string; + readonly resultSelector?: Readonly>; + + readonly label?: string; +} + +export class S3CsvDistributedMap + extends State + implements IChainable, INextable +{ + public readonly endStates: INextable[]; + private readonly props: S3CsvDistributedMapProps; + + private readonly graph: StateGraph; + private readonly policy: Policy; + + constructor(scope: Construct, id: string, props: S3CsvDistributedMapProps) { + super(scope, id, {}); + this.props = props; + + if (props.batchMaxItems && props.batchMaxItemsPath) + throw Error("Only one of batchMaxItems or batchMaxItemsPath can be set"); + + if (props.maxConcurrency && props.maxConcurrencyPath) + throw Error( + "Only one of maxConcurrency or maxConcurrencyPath can be set", + ); + + this.graph = new StateGraph(props.iterator, `Map ${this.stateId} Iterator`); + this.policy = new Policy(this, "IamRole"); + + this.endStates = [this]; + } + + grantNestedPermissions(stateMachine: StateMachine) { + // this grants the autogenerated permissions in the distributed maps substates to the state machine + // (e.g) dynamodb, lambda invoke, etc + this.graph.policyStatements.forEach((s) => stateMachine.addToRolePolicy(s)); + + // this grants the permissions to the state machine to start, stop, and describe the map + // NB: we can't add the statement directly to the state machine or it creates a circular + // reference which the CDK objects too. By using a policy we get around this limitation. + + this.policy.addStatements( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: [ + "states:StartExecution", + "states:DescribeExecution", + "states:StopExecution", + ], + resources: [stateMachine.stateMachineArn], + }), + ); + + this.policy.attachToRole(stateMachine.role); + + stateMachine.role.addManagedPolicy( + ManagedPolicy.fromAwsManagedPolicyName("AmazonS3FullAccess"), + ); + } + + protected makeNext(next: State) { + super.makeNext(next); + next.bindToGraph(this.graph); + } + + public next(next: IChainable): Chain { + super.makeNext(next.startState); + return Chain.sequence(this, next); + } + + override toStateJson(): object { + // if any of these are specified we want to put in an ItemBatcher + // block which will tell the DISTRIBUTED map to switch on batching + const useBatching = + !!this.props.batchMaxItemsPath || + !!this.props.batchMaxItems || + !!this.props.batchInput; + + const stateJson = { + Type: "Map", + ToleratedFailurePercentage: this.props.toleratedFailurePercentage, + ItemProcessor: { + ProcessorConfig: { + Mode: "DISTRIBUTED", + ExecutionType: "STANDARD", + }, + ...this.graph.toGraphJson(), + }, + ItemReader: { + Resource: "arn:aws:states:::s3:getObject", + ReaderConfig: { + InputType: "CSV", + CSVHeaderLocation: "GIVEN", + CSVHeaders: this.props.itemReaderCsvHeaders, + }, + Parameters: this.props.itemReader, + }, + ItemSelector: this.props.itemSelector, + ItemBatcher: useBatching + ? { + MaxItemsPerBatch: this.props.batchMaxItems, + MaxItemsPerBatchPath: this.props.batchMaxItemsPath, + BatchInput: this.props.batchInput, + } + : undefined, + MaxConcurrency: this.props.maxConcurrency, + MaxConcurrencyPath: this.props.maxConcurrencyPath, + Label: this.props.label, + ResultWriter: this.props.resultWriter + ? { + Resource: "arn:aws:states:::s3:putObject", + Parameters: this.props.resultWriter, + } + : undefined, + ResultPath: this.props.resultPath, + ResultSelector: this.props.resultSelector, + }; + + return { + ...this.renderNextEnd(), + ...stateJson, + }; + } +} diff --git a/packages/aws-copy-out-sharer/src/summarise-copy-lambda-step-construct.ts b/packages/aws-copy-out-sharer/src/summarise-copy-lambda-step-construct.ts new file mode 100644 index 0000000..db52a58 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/summarise-copy-lambda-step-construct.ts @@ -0,0 +1,101 @@ +import { Construct } from "constructs"; +import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam"; +import { Duration, Stack } from "aws-cdk-lib"; +import { LambdaInvoke } from "aws-cdk-lib/aws-stepfunctions-tasks"; +import { Runtime } from "aws-cdk-lib/aws-lambda"; +import { JsonPath } from "aws-cdk-lib/aws-stepfunctions"; +import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; +import { join } from "path"; + +type SummariseCopyLambdaStepProps = { + workingBucket: string; + workingBucketPrefixKey: string; + + /** + * If true, will allow this SummariseCopy lambda to write to a bucket that is + * in the same account. Otherwise, and by default, the SummariseCopy lambda + * is set up to not be able to write to a bucket in the same account as it + * is installed. This is a security mechanism as writes to buckets in the + * same account is allowed implicitly but is dangerous. This should only + * be set to true for development/testing. + */ + allowWriteToThisAccount?: boolean; +}; + +/** + * A construct for a Steps function that collates + * Steps results (SUCCEEDED_0.json etc) into a text file + * that is then written to the destination bucket to show what + * was copied. + */ +export class SummariseCopyLambdaStepConstruct extends Construct { + public readonly invocableLambda; + + constructor( + scope: Construct, + id: string, + props: SummariseCopyLambdaStepProps, + ) { + super(scope, id); + + const summariseCopyLambda = new NodejsFunction( + this, + "SummariseCopyFunction", + { + entry: join( + __dirname, + "..", + "lambda", + "summarise-copy-lambda", + "summarise-copy-lambda.ts", + ), + runtime: Runtime.NODEJS_20_X, + handler: "handler", + bundling: { + minify: false, + }, + // this seems like plenty of seconds to do a few API calls to S3 + timeout: Duration.seconds(30), + }, + ); + + summariseCopyLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: ["s3:PutObject"], + resources: ["*"], + // yes - that's right - we want to give this lambda the ability to attempt the writes anywhere + // EXCEPT where we are deployed + // (under the assumption that buckets outside our account must be giving us explicit write permission, + // whilst within our account we get implicit access - in this case we don't want that ability) + conditions: props.allowWriteToThisAccount + ? undefined + : { + StringNotEquals: { + "s3:ResourceAccount": [Stack.of(this).account], + }, + }, + }), + ); + + // we need to be able to read the results created by Steps that it placed + // in the working folder + summariseCopyLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: ["s3:*"], + resources: ["*"], + //[ + //`arn:aws:s3:::${props.workingBucket}/${ + // props.workingBucketPrefixKey ?? "" + //}*`, + //], + }), + ); + + this.invocableLambda = new LambdaInvoke(this, `Summarise Copy Results`, { + lambdaFunction: summariseCopyLambda, + resultPath: JsonPath.DISCARD, + }); + } +} diff --git a/packages/aws-copy-out-sharer/src/thaw-objects-lambda-step-construct.ts b/packages/aws-copy-out-sharer/src/thaw-objects-lambda-step-construct.ts new file mode 100644 index 0000000..4b08464 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/thaw-objects-lambda-step-construct.ts @@ -0,0 +1,65 @@ +import { Construct } from "constructs"; +import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam"; +import { Duration } from "aws-cdk-lib"; +import { LambdaInvoke } from "aws-cdk-lib/aws-stepfunctions-tasks"; +import { Runtime } from "aws-cdk-lib/aws-lambda"; +import { JsonPath } from "aws-cdk-lib/aws-stepfunctions"; +import { NodejsFunction } from "aws-cdk-lib/aws-lambda-nodejs"; +import { join } from "path"; + +type Props = {}; + +/** + * A construct for a Steps function that tests if a set + * of input files are available for copying (i.e. in active + * storage) and if not, triggers a restore on them. Whenever + * any input file is not available - this lambda throws a + * IsThawingError (at the end of processing all of them). + * + * It can then be used in a loop waiting + * for thawing to finish - by Retry/Catching this error. + */ +export class ThawObjectsLambdaStepConstruct extends Construct { + public readonly invocableLambda; + + constructor(scope: Construct, id: string, _props: Props) { + super(scope, id); + + const thawObjectsLambda = new NodejsFunction(this, "ThawObjectsFunction", { + entry: join( + __dirname, + "..", + "lambda", + "thaw-objects-lambda", + "thaw-objects-lambda.ts", + ), + runtime: Runtime.NODEJS_20_X, + handler: "handler", + bundling: { + // for a small method it is sometimes easier if it can be viewed + // in the AWS console un-minified + minify: false, + }, + // we can theoretically need to loop through 1000s of objects + // so we give ourselves plenty of time + timeout: Duration.seconds(60 * 5), + }); + + thawObjectsLambda.addToRolePolicy( + new PolicyStatement({ + effect: Effect.ALLOW, + actions: ["s3:GetObject", "s3:RestoreObject"], + resources: ["*"], + }), + ); + + this.invocableLambda = new LambdaInvoke( + this, + `Are The Objects Available To Copy?`, + { + lambdaFunction: thawObjectsLambda, + resultPath: JsonPath.DISCARD, + }, + ); + } +} diff --git a/packages/aws-copy-out-sharer/src/thaw-objects-map-construct.ts b/packages/aws-copy-out-sharer/src/thaw-objects-map-construct.ts new file mode 100644 index 0000000..946a3d5 --- /dev/null +++ b/packages/aws-copy-out-sharer/src/thaw-objects-map-construct.ts @@ -0,0 +1,83 @@ +import { Construct } from "constructs"; +import { JsonPath } from "aws-cdk-lib/aws-stepfunctions"; +import { S3CsvDistributedMap } from "./s3-csv-distributed-map"; +import { ThawObjectsLambdaStepConstruct } from "./thaw-objects-lambda-step-construct"; +import { Duration } from "aws-cdk-lib"; +import { SOURCE_FILES_CSV_KEY_FIELD_NAME } from "./copy-out-state-machine-input"; + +type Props = { + workingBucket: string; + workingBucketPrefixKey: string; +}; + +export class ThawObjectsMapConstruct extends Construct { + public readonly distributedMap: S3CsvDistributedMap; + + constructor(scope: Construct, id: string, props: Props) { + super(scope, id); + + const thawObjectsLambdaStep = new ThawObjectsLambdaStepConstruct( + this, + "LambdaStep", + {}, + ); + + thawObjectsLambdaStep.invocableLambda.addRetry({ + errors: ["IsThawingError"], + interval: Duration.minutes(1), + backoffRate: 1, + maxAttempts: 15, + }); + + // these names are internal only - but we pull out as a const to make sure + // they are consistent + const bucketColumnName = "b"; + const keyColumnName = "k"; + + this.distributedMap = new S3CsvDistributedMap(this, "ThawObjectsMap", { + // we do not expect any failures of these functions and if we + // do get one - we are fully prepared for us to move onto the rclone + // steps where we will get proper error messages if the copies fail + toleratedFailurePercentage: 100, + itemReaderCsvHeaders: [bucketColumnName, keyColumnName], + itemReader: { + Bucket: props.workingBucket, + "Key.$": JsonPath.format( + "{}{}", + props.workingBucketPrefixKey, + JsonPath.stringAt(`$.${SOURCE_FILES_CSV_KEY_FIELD_NAME}`), + ), + }, + itemSelector: { + "bucket.$": JsonPath.stringAt(`$$.Map.Item.Value.${bucketColumnName}`), + "key.$": JsonPath.stringAt(`$$.Map.Item.Value.${keyColumnName}`), + }, + batchInput: { + glacierFlexibleRetrievalThawDays: 1, + glacierFlexibleRetrievalThawSpeed: "Expedited", + glacierDeepArchiveThawDays: 1, + glacierDeepArchiveThawSpeed: "Standard", + intelligentTieringArchiveThawDays: 1, + intelligentTieringArchiveThawSpeed: "Standard", + intelligentTieringDeepArchiveThawDays: 1, + intelligentTieringDeepArchiveThawSpeed: "Standard", + }, + iterator: thawObjectsLambdaStep.invocableLambda, + resultPath: JsonPath.DISCARD, + }); + } +} + +/* +{\"BatchInput\":{\"rcloneDestination\":" + +"\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-dest\"}," + +"\"Items\":[" + +"{\"rcloneSource\":\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-src/1.bin\"}," + +"{\"rcloneSource\":\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-src/2.bin\"}," + +"{\"rcloneSource\":\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-src/3.bin\"}]," + +"\"rcloneResult\":[" + +"{\"bytes\":0,\"checks\":0,\"deletedDirs\":0,\"deletes\":0,\"elapsedTime\":0.355840879,\"errors\":0,\"eta\":null,\"fatalError\":false,\"renames\":0,\"retryError\":false,\"serverSideCopies\":1,\"serverSideCopyBytes\":9,\"serverSideMoveBytes\":0,\"serverSideMoves\":0,\"source\":\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-src/1.bin\",\"speed\":0,\"totalBytes\":0,\"totalChecks\":0,\"totalTransfers\":1,\"transferTime\":0.057049542,\"transfers\":1}," + +"{\"bytes\":0,\"checks\":0,\"deletedDirs\":0,\"deletes\":0,\"elapsedTime\":0.368602993,\"errors\":0,\"eta\":null,\"fatalError\":false,\"renames\":0,\"retryError\":false,\"serverSideCopies\":1,\"serverSideCopyBytes\":9,\"serverSideMoveBytes\":0,\"serverSideMoves\":0,\"source\":\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-src/2.bin\",\"speed\":0,\"totalBytes\":0,\"totalChecks\":0,\"totalTransfers\":1,\"transferTime\":0.044628996,\"transfers\":1}," + +"{\"bytes\":0,\"checks\":0,\"deletedDirs\":0,\"deletes\":0,\"elapsedTime\":0.385300283,\"errors\":0,\"eta\":null,\"fatalError\":false,\"renames\":0,\"retryError\":false,\"serverSideCopies\":1,\"serverSideCopyBytes\":9,\"serverSideMoveBytes\":0,\"serverSideMoves\":0,\"source\":\"s3:elsa-data-tmp/8e467a3e27e1e0b73fcd15b5c419e53c-src/3.bin\",\"speed\":0,\"totalBytes\":0,\"totalChecks\":0,\"totalTransfers\":1,\"transferTime\":0.05217003,\"transfers\":1}]} + + */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14a5e34..2cb9a19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,43 +28,57 @@ importers: dev: dependencies: + "@aws-sdk/client-s3": + specifier: 3.576.0 + version: 3.576.0 + "@aws-sdk/client-servicediscovery": + specifier: 3.576.0 + version: 3.576.0 + "@aws-sdk/client-sfn": + specifier: 3.576.0 + version: 3.576.0 + "@aws-sdk/client-sso-oidc": + specifier: 3.574.0 + version: 3.574.0 + "@elsa-data/aws-infrastructure": + specifier: 1.5.1 + version: 1.5.1(aws-cdk-lib@2.141.0)(constructs@10.3.0) aws-cdk: - specifier: 2.93.0 - version: 2.93.0 + specifier: 2.141.0 + version: 2.141.0 aws-cdk-lib: - specifier: 2.93.0 - version: 2.93.0(constructs@10.2.70) + specifier: 2.141.0 + version: 2.141.0(constructs@10.3.0) aws-copy-out-sharer: specifier: link:../packages/aws-copy-out-sharer version: link:../packages/aws-copy-out-sharer + constructs: + specifier: 10.3.0 + version: 10.3.0 packages/aws-copy-out-sharer: - dependencies: - "@elsa-data/aws-infrastructure-client": - specifier: 1.3.4 - version: 1.3.4(aws-cdk-lib@2.93.0)(constructs@10.2.70) devDependencies: aws-cdk-lib: - specifier: 2.93.0 - version: 2.93.0(constructs@10.2.70) + specifier: 2.141.0 + version: 2.141.0(constructs@10.3.0) constructs: - specifier: 10.2.70 - version: 10.2.70 + specifier: 10.3.0 + version: 10.3.0 jsii: - specifier: 5.2.2 - version: 5.2.2 + specifier: 5.4.15 + version: 5.4.15 jsii-pacmak: - specifier: 1.88.0 - version: 1.88.0 + specifier: 1.98.0 + version: 1.98.0(jsii-rosetta@5.4.17) publib: - specifier: 0.2.737 - version: 0.2.737 + specifier: 0.2.834 + version: 0.2.834(@aws-sdk/client-sso-oidc@3.575.0) packages: - /@aws-cdk/asset-awscli-v1@2.2.200: + /@aws-cdk/asset-awscli-v1@2.2.202: resolution: { - integrity: sha512-Kf5J8DfJK4wZFWT2Myca0lhwke7LwHcHBo+4TvWOGJrFVVKVuuiLCkzPPRBQQVDj0Vtn2NBokZAz8pfMpAqAKg==, + integrity: sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==, } /@aws-cdk/asset-kubectl-v20@2.1.2: @@ -73,10 +87,10 @@ packages: integrity: sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==, } - /@aws-cdk/asset-node-proxy-agent-v6@2.0.1: + /@aws-cdk/asset-node-proxy-agent-v6@2.0.3: resolution: { - integrity: sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg==, + integrity: sha512-twhuEG+JPOYCYPx/xy5uH2+VUsIEhPTzDY0F1KuB+ocjWWB/KEDiOVL19nHvbPCB6fhWnkykXEMJ4HHcKvjtvg==, } /@aws-crypto/crc32@3.0.0: @@ -86,9 +100,20 @@ packages: } dependencies: "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.398.0 + "@aws-sdk/types": 3.575.0 tslib: 1.14.1 - dev: true + dev: false + + /@aws-crypto/crc32c@3.0.0: + resolution: + { + integrity: sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==, + } + dependencies: + "@aws-crypto/util": 3.0.0 + "@aws-sdk/types": 3.575.0 + tslib: 1.14.1 + dev: false /@aws-crypto/ie11-detection@3.0.0: resolution: @@ -97,7 +122,21 @@ packages: } dependencies: tslib: 1.14.1 - dev: true + + /@aws-crypto/sha1-browser@3.0.0: + resolution: + { + integrity: sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==, + } + dependencies: + "@aws-crypto/ie11-detection": 3.0.0 + "@aws-crypto/supports-web-crypto": 3.0.0 + "@aws-crypto/util": 3.0.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-locate-window": 3.310.0 + "@aws-sdk/util-utf8-browser": 3.259.0 + tslib: 1.14.1 + dev: false /@aws-crypto/sha256-browser@3.0.0: resolution: @@ -109,11 +148,10 @@ packages: "@aws-crypto/sha256-js": 3.0.0 "@aws-crypto/supports-web-crypto": 3.0.0 "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.398.0 + "@aws-sdk/types": 3.575.0 "@aws-sdk/util-locate-window": 3.310.0 "@aws-sdk/util-utf8-browser": 3.259.0 tslib: 1.14.1 - dev: true /@aws-crypto/sha256-js@3.0.0: resolution: @@ -122,9 +160,8 @@ packages: } dependencies: "@aws-crypto/util": 3.0.0 - "@aws-sdk/types": 3.398.0 + "@aws-sdk/types": 3.575.0 tslib: 1.14.1 - dev: true /@aws-crypto/supports-web-crypto@3.0.0: resolution: @@ -133,7 +170,6 @@ packages: } dependencies: tslib: 1.14.1 - dev: true /@aws-crypto/util@3.0.0: resolution: @@ -141,1358 +177,3089 @@ packages: integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==, } dependencies: - "@aws-sdk/types": 3.398.0 + "@aws-sdk/types": 3.575.0 "@aws-sdk/util-utf8-browser": 3.259.0 tslib: 1.14.1 - dev: true - /@aws-sdk/client-codeartifact@3.405.0: + /@aws-sdk/client-codeartifact@3.576.0: resolution: { - integrity: sha512-eucE3/7+L11MrBNmp5kDz9YcwIwYA0aoDQlmE0Nte1QuEW0nOykfyA/UnWnoCHjScZfMXpY1mgH7MbqYvQ0o6A==, + integrity: sha512-vCca4/Q8OLLJCqEwZAs+GXetiu+EN/P1W59aQSuVoL6g+dPnJy0Vo4syFV9oXrIMJjAjobbu8CVzQDgX2Wok/g==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.405.0 - "@aws-sdk/credential-provider-node": 3.405.0 - "@aws-sdk/middleware-host-header": 3.398.0 - "@aws-sdk/middleware-logger": 3.398.0 - "@aws-sdk/middleware-recursion-detection": 3.398.0 - "@aws-sdk/middleware-signing": 3.398.0 - "@aws-sdk/middleware-user-agent": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@aws-sdk/util-endpoints": 3.398.0 - "@aws-sdk/util-user-agent-browser": 3.398.0 - "@aws-sdk/util-user-agent-node": 3.405.0 - "@smithy/config-resolver": 2.0.5 - "@smithy/fetch-http-handler": 2.0.5 - "@smithy/hash-node": 2.0.5 - "@smithy/invalid-dependency": 2.0.5 - "@smithy/middleware-content-length": 2.0.5 - "@smithy/middleware-endpoint": 2.0.5 - "@smithy/middleware-retry": 2.0.5 - "@smithy/middleware-serde": 2.0.5 - "@smithy/middleware-stack": 2.0.0 - "@smithy/node-config-provider": 2.0.7 - "@smithy/node-http-handler": 2.0.5 - "@smithy/protocol-http": 2.0.5 - "@smithy/smithy-client": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 - "@smithy/util-base64": 2.0.0 - "@smithy/util-body-length-browser": 2.0.0 - "@smithy/util-body-length-node": 2.1.0 - "@smithy/util-defaults-mode-browser": 2.0.6 - "@smithy/util-defaults-mode-node": 2.0.7 - "@smithy/util-retry": 2.0.0 - "@smithy/util-stream": 2.0.5 - "@smithy/util-utf8": 2.0.0 + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-stream": 3.0.1 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: true - /@aws-sdk/client-cognito-identity@3.405.0: + /@aws-sdk/client-cognito-identity@3.576.0: resolution: { - integrity: sha512-kvmNAREFQbhaZoEMQzBOYTaN7cFIOLgk2DZYYlHh2ErUYXSbvbVOBUriMRW9hRDtKLooe3ZFBLO3sWKvQE/AfA==, + integrity: sha512-SgfR1LLZWT1NrNOB968OKC8RAbaQUFG4V1eDjAeNjtuqC7iAlY9Ogrl824XJY4muz4ErVAga7A+Xn9QTOSSTBQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.405.0 - "@aws-sdk/credential-provider-node": 3.405.0 - "@aws-sdk/middleware-host-header": 3.398.0 - "@aws-sdk/middleware-logger": 3.398.0 - "@aws-sdk/middleware-recursion-detection": 3.398.0 - "@aws-sdk/middleware-signing": 3.398.0 - "@aws-sdk/middleware-user-agent": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@aws-sdk/util-endpoints": 3.398.0 - "@aws-sdk/util-user-agent-browser": 3.398.0 - "@aws-sdk/util-user-agent-node": 3.405.0 - "@smithy/config-resolver": 2.0.5 - "@smithy/fetch-http-handler": 2.0.5 - "@smithy/hash-node": 2.0.5 - "@smithy/invalid-dependency": 2.0.5 - "@smithy/middleware-content-length": 2.0.5 - "@smithy/middleware-endpoint": 2.0.5 - "@smithy/middleware-retry": 2.0.5 - "@smithy/middleware-serde": 2.0.5 - "@smithy/middleware-stack": 2.0.0 - "@smithy/node-config-provider": 2.0.7 - "@smithy/node-http-handler": 2.0.5 - "@smithy/protocol-http": 2.0.5 - "@smithy/smithy-client": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 - "@smithy/util-base64": 2.0.0 - "@smithy/util-body-length-browser": 2.0.0 - "@smithy/util-body-length-node": 2.1.0 - "@smithy/util-defaults-mode-browser": 2.0.6 - "@smithy/util-defaults-mode-node": 2.0.7 - "@smithy/util-retry": 2.0.0 - "@smithy/util-utf8": 2.0.0 + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: true - /@aws-sdk/client-sso@3.405.0: + /@aws-sdk/client-s3@3.576.0: resolution: { - integrity: sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw==, + integrity: sha512-6Xhj8x7ijLqoLYncKMUn433QKWzEezDLR3TipKv/qHThTa8oYXkymMat/MfJ/lx3jsc8wS72i+1kTwO+AFUg6w==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: + "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/middleware-host-header": 3.398.0 - "@aws-sdk/middleware-logger": 3.398.0 - "@aws-sdk/middleware-recursion-detection": 3.398.0 - "@aws-sdk/middleware-user-agent": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@aws-sdk/util-endpoints": 3.398.0 - "@aws-sdk/util-user-agent-browser": 3.398.0 - "@aws-sdk/util-user-agent-node": 3.405.0 - "@smithy/config-resolver": 2.0.5 - "@smithy/fetch-http-handler": 2.0.5 - "@smithy/hash-node": 2.0.5 - "@smithy/invalid-dependency": 2.0.5 - "@smithy/middleware-content-length": 2.0.5 - "@smithy/middleware-endpoint": 2.0.5 - "@smithy/middleware-retry": 2.0.5 - "@smithy/middleware-serde": 2.0.5 - "@smithy/middleware-stack": 2.0.0 - "@smithy/node-config-provider": 2.0.7 - "@smithy/node-http-handler": 2.0.5 - "@smithy/protocol-http": 2.0.5 - "@smithy/smithy-client": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 - "@smithy/util-base64": 2.0.0 - "@smithy/util-body-length-browser": 2.0.0 - "@smithy/util-body-length-node": 2.1.0 - "@smithy/util-defaults-mode-browser": 2.0.6 - "@smithy/util-defaults-mode-node": 2.0.7 - "@smithy/util-retry": 2.0.0 - "@smithy/util-utf8": 2.0.0 + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-bucket-endpoint": 3.575.0 + "@aws-sdk/middleware-expect-continue": 3.575.0 + "@aws-sdk/middleware-flexible-checksums": 3.575.0 + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-location-constraint": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-sdk-s3": 3.575.0 + "@aws-sdk/middleware-signing": 3.575.0 + "@aws-sdk/middleware-ssec": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/signature-v4-multi-region": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@aws-sdk/xml-builder": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@smithy/eventstream-serde-browser": 3.0.0 + "@smithy/eventstream-serde-config-resolver": 3.0.0 + "@smithy/eventstream-serde-node": 3.0.0 + "@smithy/fetch-http-handler": 3.0.1 + "@smithy/hash-blob-browser": 3.0.0 + "@smithy/hash-node": 3.0.0 + "@smithy/hash-stream-node": 3.0.0 + "@smithy/invalid-dependency": 3.0.0 + "@smithy/md5-js": 3.0.0 + "@smithy/middleware-content-length": 3.0.0 + "@smithy/middleware-endpoint": 3.0.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-stream": 3.0.1 + "@smithy/util-utf8": 3.0.0 + "@smithy/util-waiter": 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt - dev: true + dev: false - /@aws-sdk/client-sts@3.405.0: + /@aws-sdk/client-servicediscovery@3.576.0: resolution: { - integrity: sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw==, + integrity: sha512-Nb8FhNlVWakv1mbHqT2WENl6yzveIzN/WPj9dXw70gKGfrr9MSV8IB3/eoNKwDx7fyZwPpg+4265dVl1XaUFJA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/credential-provider-node": 3.405.0 - "@aws-sdk/middleware-host-header": 3.398.0 - "@aws-sdk/middleware-logger": 3.398.0 - "@aws-sdk/middleware-recursion-detection": 3.398.0 - "@aws-sdk/middleware-sdk-sts": 3.398.0 - "@aws-sdk/middleware-signing": 3.398.0 - "@aws-sdk/middleware-user-agent": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@aws-sdk/util-endpoints": 3.398.0 - "@aws-sdk/util-user-agent-browser": 3.398.0 - "@aws-sdk/util-user-agent-node": 3.405.0 - "@smithy/config-resolver": 2.0.5 - "@smithy/fetch-http-handler": 2.0.5 - "@smithy/hash-node": 2.0.5 - "@smithy/invalid-dependency": 2.0.5 - "@smithy/middleware-content-length": 2.0.5 - "@smithy/middleware-endpoint": 2.0.5 - "@smithy/middleware-retry": 2.0.5 - "@smithy/middleware-serde": 2.0.5 - "@smithy/middleware-stack": 2.0.0 - "@smithy/node-config-provider": 2.0.7 - "@smithy/node-http-handler": 2.0.5 - "@smithy/protocol-http": 2.0.5 - "@smithy/smithy-client": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 - "@smithy/util-base64": 2.0.0 - "@smithy/util-body-length-browser": 2.0.0 - "@smithy/util-body-length-node": 2.1.0 - "@smithy/util-defaults-mode-browser": 2.0.6 - "@smithy/util-defaults-mode-node": 2.0.7 - "@smithy/util-retry": 2.0.0 - "@smithy/util-utf8": 2.0.0 - fast-xml-parser: 4.2.5 + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 + uuid: 9.0.1 transitivePeerDependencies: - aws-crt - dev: true + dev: false - /@aws-sdk/credential-provider-cognito-identity@3.405.0: + /@aws-sdk/client-sfn@3.576.0: resolution: { - integrity: sha512-tmu8r0kB3qHHIitQAwiziWzxoaGCv/vCh00EcabuW3x3UsKQUF71ZLuNcMOv5wqTsQw0Fmv3dKy2tzVmRm3Z5g==, + integrity: sha512-M1Hz5W1NWZ3+Ixe59nG3wY1ReZx+o3msgRe9fY7JCluw9xOtce5QF3I5sbu/KvOL1cipLfBymuqWC7eV3Jb6KQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/client-cognito-identity": 3.405.0 - "@aws-sdk/types": 3.398.0 - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 + uuid: 9.0.1 transitivePeerDependencies: - aws-crt - dev: true + dev: false - /@aws-sdk/credential-provider-env@3.398.0: + /@aws-sdk/client-sso-oidc@3.574.0: resolution: { - integrity: sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ==, + integrity: sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sts": 3.574.0(@aws-sdk/client-sso-oidc@3.574.0) + "@aws-sdk/core": 3.572.0 + "@aws-sdk/credential-provider-node": 3.572.0(@aws-sdk/client-sso-oidc@3.574.0)(@aws-sdk/client-sts@3.574.0) + "@aws-sdk/middleware-host-header": 3.567.0 + "@aws-sdk/middleware-logger": 3.568.0 + "@aws-sdk/middleware-recursion-detection": 3.567.0 + "@aws-sdk/middleware-user-agent": 3.572.0 + "@aws-sdk/region-config-resolver": 3.572.0 + "@aws-sdk/types": 3.567.0 + "@aws-sdk/util-endpoints": 3.572.0 + "@aws-sdk/util-user-agent-browser": 3.567.0 + "@aws-sdk/util-user-agent-node": 3.568.0 + "@smithy/config-resolver": 2.2.0 + "@smithy/core": 1.4.2 + "@smithy/fetch-http-handler": 2.5.0 + "@smithy/hash-node": 2.2.0 + "@smithy/invalid-dependency": 2.2.0 + "@smithy/middleware-content-length": 2.2.0 + "@smithy/middleware-endpoint": 2.5.1 + "@smithy/middleware-retry": 2.3.1 + "@smithy/middleware-serde": 2.3.0 + "@smithy/middleware-stack": 2.2.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/node-http-handler": 2.5.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + "@smithy/url-parser": 2.2.0 + "@smithy/util-base64": 2.3.0 + "@smithy/util-body-length-browser": 2.2.0 + "@smithy/util-body-length-node": 2.3.0 + "@smithy/util-defaults-mode-browser": 2.2.1 + "@smithy/util-defaults-mode-node": 2.3.1 + "@smithy/util-endpoints": 1.2.0 + "@smithy/util-middleware": 2.2.0 + "@smithy/util-retry": 2.2.0 + "@smithy/util-utf8": 2.3.0 tslib: 2.6.2 - dev: true + transitivePeerDependencies: + - aws-crt + dev: false - /@aws-sdk/credential-provider-ini@3.405.0: + /@aws-sdk/client-sso-oidc@3.575.0: resolution: { - integrity: sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg==, + integrity: sha512-YCstVaW5tAvXs+v4LR9gNAO+VRhIObjk1/knCdVQ5QQRTevtVQtdJWeNrDZYo4ATo0OHGyqGCj5Z09TWMv+e1Q==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/credential-provider-env": 3.398.0 - "@aws-sdk/credential-provider-process": 3.405.0 - "@aws-sdk/credential-provider-sso": 3.405.0 - "@aws-sdk/credential-provider-web-identity": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@smithy/credential-provider-imds": 2.0.7 - "@smithy/property-provider": 2.0.6 - "@smithy/shared-ini-file-loader": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sts": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/core": 3.575.0 + "@aws-sdk/credential-provider-node": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: true - /@aws-sdk/credential-provider-node@3.405.0: + /@aws-sdk/client-sso-oidc@3.576.0(@aws-sdk/client-sts@3.576.0): resolution: { - integrity: sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q==, + integrity: sha512-6U8933O9h6iMnQDpH3OtFhS3G3FVttYZUqTpC2T0FnSSX7zgG0GnlxdQiyZh1j1aFrEB8bFw/RSmxPcMJJuSlQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/credential-provider-env": 3.398.0 - "@aws-sdk/credential-provider-ini": 3.405.0 - "@aws-sdk/credential-provider-process": 3.405.0 - "@aws-sdk/credential-provider-sso": 3.405.0 - "@aws-sdk/credential-provider-web-identity": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@smithy/credential-provider-imds": 2.0.7 - "@smithy/property-provider": 2.0.6 - "@smithy/shared-ini-file-loader": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 transitivePeerDependencies: + - "@aws-sdk/client-sts" - aws-crt - dev: true - /@aws-sdk/credential-provider-process@3.405.0: + /@aws-sdk/client-sso@3.572.0: resolution: { - integrity: sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ==, + integrity: sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/property-provider": 2.0.6 - "@smithy/shared-ini-file-loader": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/core": 3.572.0 + "@aws-sdk/middleware-host-header": 3.567.0 + "@aws-sdk/middleware-logger": 3.568.0 + "@aws-sdk/middleware-recursion-detection": 3.567.0 + "@aws-sdk/middleware-user-agent": 3.572.0 + "@aws-sdk/region-config-resolver": 3.572.0 + "@aws-sdk/types": 3.567.0 + "@aws-sdk/util-endpoints": 3.572.0 + "@aws-sdk/util-user-agent-browser": 3.567.0 + "@aws-sdk/util-user-agent-node": 3.568.0 + "@smithy/config-resolver": 2.2.0 + "@smithy/core": 1.4.2 + "@smithy/fetch-http-handler": 2.5.0 + "@smithy/hash-node": 2.2.0 + "@smithy/invalid-dependency": 2.2.0 + "@smithy/middleware-content-length": 2.2.0 + "@smithy/middleware-endpoint": 2.5.1 + "@smithy/middleware-retry": 2.3.1 + "@smithy/middleware-serde": 2.3.0 + "@smithy/middleware-stack": 2.2.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/node-http-handler": 2.5.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + "@smithy/url-parser": 2.2.0 + "@smithy/util-base64": 2.3.0 + "@smithy/util-body-length-browser": 2.2.0 + "@smithy/util-body-length-node": 2.3.0 + "@smithy/util-defaults-mode-browser": 2.2.1 + "@smithy/util-defaults-mode-node": 2.3.1 + "@smithy/util-endpoints": 1.2.0 + "@smithy/util-middleware": 2.2.0 + "@smithy/util-retry": 2.2.0 + "@smithy/util-utf8": 2.3.0 tslib: 2.6.2 - dev: true + transitivePeerDependencies: + - aws-crt + dev: false - /@aws-sdk/credential-provider-sso@3.405.0: + /@aws-sdk/client-sso@3.575.0: resolution: { - integrity: sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA==, + integrity: sha512-elFWpAtktD3XBy47etG80GKXK9Lh3sNCMXLjcSs0NS0fdRIQJS2zKxC8qK22UQmdFKpXxthND5FKk7fNEqrR+g==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/client-sso": 3.405.0 - "@aws-sdk/token-providers": 3.405.0 - "@aws-sdk/types": 3.398.0 - "@smithy/property-provider": 2.0.6 - "@smithy/shared-ini-file-loader": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/core": 3.575.0 + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 transitivePeerDependencies: - aws-crt dev: true - /@aws-sdk/credential-provider-web-identity@3.398.0: + /@aws-sdk/client-sso@3.576.0: resolution: { - integrity: sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg==, + integrity: sha512-xbKE4bf3HYvkdrvn5kkpUdcoi3mg7uDLLkSbGaj0tzW3vNSdx9qLrCMuwfV7KrhVKWwx+lnw/2LGuCR2B5y0IA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/core": 3.576.0 + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 - dev: true + transitivePeerDependencies: + - aws-crt - /@aws-sdk/credential-providers@3.405.0: + /@aws-sdk/client-sts@3.574.0(@aws-sdk/client-sso-oidc@3.574.0): resolution: { - integrity: sha512-332QZ2Wrr5gfFUGPLwITcjhxnBD4y94fxKg7qerSBq7fjjIkl/OjnchZf5ReePrjpglxs6hgLdGrPYIYPC4Hhw==, + integrity: sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/client-cognito-identity": 3.405.0 - "@aws-sdk/client-sso": 3.405.0 - "@aws-sdk/client-sts": 3.405.0 - "@aws-sdk/credential-provider-cognito-identity": 3.405.0 - "@aws-sdk/credential-provider-env": 3.398.0 - "@aws-sdk/credential-provider-ini": 3.405.0 - "@aws-sdk/credential-provider-node": 3.405.0 - "@aws-sdk/credential-provider-process": 3.405.0 - "@aws-sdk/credential-provider-sso": 3.405.0 - "@aws-sdk/credential-provider-web-identity": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@smithy/credential-provider-imds": 2.0.7 - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sso-oidc": 3.574.0 + "@aws-sdk/core": 3.572.0 + "@aws-sdk/credential-provider-node": 3.572.0(@aws-sdk/client-sso-oidc@3.574.0)(@aws-sdk/client-sts@3.574.0) + "@aws-sdk/middleware-host-header": 3.567.0 + "@aws-sdk/middleware-logger": 3.568.0 + "@aws-sdk/middleware-recursion-detection": 3.567.0 + "@aws-sdk/middleware-user-agent": 3.572.0 + "@aws-sdk/region-config-resolver": 3.572.0 + "@aws-sdk/types": 3.567.0 + "@aws-sdk/util-endpoints": 3.572.0 + "@aws-sdk/util-user-agent-browser": 3.567.0 + "@aws-sdk/util-user-agent-node": 3.568.0 + "@smithy/config-resolver": 2.2.0 + "@smithy/core": 1.4.2 + "@smithy/fetch-http-handler": 2.5.0 + "@smithy/hash-node": 2.2.0 + "@smithy/invalid-dependency": 2.2.0 + "@smithy/middleware-content-length": 2.2.0 + "@smithy/middleware-endpoint": 2.5.1 + "@smithy/middleware-retry": 2.3.1 + "@smithy/middleware-serde": 2.3.0 + "@smithy/middleware-stack": 2.2.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/node-http-handler": 2.5.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + "@smithy/url-parser": 2.2.0 + "@smithy/util-base64": 2.3.0 + "@smithy/util-body-length-browser": 2.2.0 + "@smithy/util-body-length-node": 2.3.0 + "@smithy/util-defaults-mode-browser": 2.2.1 + "@smithy/util-defaults-mode-node": 2.3.1 + "@smithy/util-endpoints": 1.2.0 + "@smithy/util-middleware": 2.2.0 + "@smithy/util-retry": 2.2.0 + "@smithy/util-utf8": 2.3.0 tslib: 2.6.2 transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" - aws-crt - dev: true + dev: false - /@aws-sdk/middleware-host-header@3.398.0: + /@aws-sdk/client-sts@3.575.0(@aws-sdk/client-sso-oidc@3.575.0): resolution: { - integrity: sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA==, + integrity: sha512-8MrT4J2dRiskf0JFMGL5VNBqPvc6igNa218LGBJzHXmLsm1WfGCGnce84R7U2USr8oPOenu0XzSCLvMQyZbGWQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/protocol-http": 2.0.5 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sso-oidc": 3.575.0 + "@aws-sdk/core": 3.575.0 + "@aws-sdk/credential-provider-node": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt dev: true - /@aws-sdk/middleware-logger@3.398.0: + /@aws-sdk/client-sts@3.576.0: resolution: { - integrity: sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg==, + integrity: sha512-GHqqfRcUW/nGE4lpRafNKRxi4K7+SaQjYLjQnTEioUhr+w1IT/fFb3rGZYHHnN9ZCzbnrBULRC+1XOPIQWyLsw==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/types": 2.2.2 + "@aws-crypto/sha256-browser": 3.0.0 + "@aws-crypto/sha256-js": 3.0.0 + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/core": 3.576.0 + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/middleware-host-header": 3.575.0 + "@aws-sdk/middleware-logger": 3.575.0 + "@aws-sdk/middleware-recursion-detection": 3.575.0 + "@aws-sdk/middleware-user-agent": 3.575.0 + "@aws-sdk/region-config-resolver": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@aws-sdk/util-user-agent-browser": 3.575.0 + "@aws-sdk/util-user-agent-node": 3.575.0 + "@smithy/config-resolver": 3.0.0 + "@smithy/core": 2.0.1 + "@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.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/node-http-handler": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@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.1 + "@smithy/util-defaults-mode-node": 3.0.1 + "@smithy/util-endpoints": 2.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 - dev: true + transitivePeerDependencies: + - aws-crt - /@aws-sdk/middleware-recursion-detection@3.398.0: + /@aws-sdk/core@3.572.0: resolution: { - integrity: sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ==, + integrity: sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/protocol-http": 2.0.5 - "@smithy/types": 2.2.2 + "@smithy/core": 1.4.2 + "@smithy/protocol-http": 3.3.0 + "@smithy/signature-v4": 2.3.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + fast-xml-parser: 4.2.5 tslib: 2.6.2 - dev: true + dev: false - /@aws-sdk/middleware-sdk-sts@3.398.0: + /@aws-sdk/core@3.575.0: resolution: { - integrity: sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ==, + integrity: sha512-117U+kQki2XoKcYQfepmlRcNxn6rELGlOFOBQ8Z2JTBXEYHblW2ke067a0CLmxFwp/zCWuc7IGjd3in3x4Q3rg==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/middleware-signing": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@smithy/types": 2.2.2 + "@smithy/core": 2.0.1 + "@smithy/protocol-http": 4.0.0 + "@smithy/signature-v4": 3.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + fast-xml-parser: 4.2.5 tslib: 2.6.2 dev: true - /@aws-sdk/middleware-signing@3.398.0: + /@aws-sdk/core@3.576.0: resolution: { - integrity: sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w==, + integrity: sha512-KDvDlbeipSTIf+ffKtTg1m419TK7s9mZSWC8bvuZ9qx6/sjQFOXIKOVqyuli6DnfxGbvRcwoRuY99OcCH1N/0w==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/property-provider": 2.0.6 - "@smithy/protocol-http": 2.0.5 - "@smithy/signature-v4": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/util-middleware": 2.0.0 + "@smithy/core": 2.0.1 + "@smithy/protocol-http": 4.0.0 + "@smithy/signature-v4": 3.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + fast-xml-parser: 4.2.5 tslib: 2.6.2 - dev: true - /@aws-sdk/middleware-user-agent@3.398.0: + /@aws-sdk/credential-provider-cognito-identity@3.576.0: resolution: { - integrity: sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ==, + integrity: sha512-pi5gY+VhuQk8PUskxSonRS7IZk82jbhpfLBFnbFdNDUpBPSrHAfi1AukqAgbbiB/MfJTKaI/rNg3VfwyOzPmJw==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 - "@aws-sdk/util-endpoints": 3.398.0 - "@smithy/protocol-http": 2.0.5 - "@smithy/types": 2.2.2 + "@aws-sdk/client-cognito-identity": 3.576.0 + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt dev: true - /@aws-sdk/token-providers@3.405.0: + /@aws-sdk/credential-provider-env@3.568.0: resolution: { - integrity: sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg==, + integrity: sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-crypto/sha256-browser": 3.0.0 - "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/middleware-host-header": 3.398.0 - "@aws-sdk/middleware-logger": 3.398.0 - "@aws-sdk/middleware-recursion-detection": 3.398.0 - "@aws-sdk/middleware-user-agent": 3.398.0 - "@aws-sdk/types": 3.398.0 - "@aws-sdk/util-endpoints": 3.398.0 - "@aws-sdk/util-user-agent-browser": 3.398.0 - "@aws-sdk/util-user-agent-node": 3.405.0 - "@smithy/config-resolver": 2.0.5 - "@smithy/fetch-http-handler": 2.0.5 - "@smithy/hash-node": 2.0.5 - "@smithy/invalid-dependency": 2.0.5 - "@smithy/middleware-content-length": 2.0.5 - "@smithy/middleware-endpoint": 2.0.5 - "@smithy/middleware-retry": 2.0.5 - "@smithy/middleware-serde": 2.0.5 - "@smithy/middleware-stack": 2.0.0 - "@smithy/node-config-provider": 2.0.7 - "@smithy/node-http-handler": 2.0.5 - "@smithy/property-provider": 2.0.6 - "@smithy/protocol-http": 2.0.5 - "@smithy/shared-ini-file-loader": 2.0.6 - "@smithy/smithy-client": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 - "@smithy/util-base64": 2.0.0 - "@smithy/util-body-length-browser": 2.0.0 - "@smithy/util-body-length-node": 2.1.0 - "@smithy/util-defaults-mode-browser": 2.0.6 - "@smithy/util-defaults-mode-node": 2.0.7 - "@smithy/util-retry": 2.0.0 - "@smithy/util-utf8": 2.0.0 + "@aws-sdk/types": 3.567.0 + "@smithy/property-provider": 2.2.0 + "@smithy/types": 2.12.0 tslib: 2.6.2 - transitivePeerDependencies: - - aws-crt - dev: true + dev: false - /@aws-sdk/types@3.398.0: + /@aws-sdk/credential-provider-env@3.575.0: resolution: { - integrity: sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ==, + integrity: sha512-YTgpq3rvYBXzW6OTDB00cE79evQtss/lz2GlJXgqqVXD0m7i77hGA8zb44VevP/WxtDaiSW7SSjuu8VCBGsg4g==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/types": 2.2.2 + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@aws-sdk/util-endpoints@3.398.0: + /@aws-sdk/credential-provider-http@3.568.0: resolution: { - integrity: sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw==, + integrity: sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@aws-sdk/types": 3.398.0 + "@aws-sdk/types": 3.567.0 + "@smithy/fetch-http-handler": 2.5.0 + "@smithy/node-http-handler": 2.5.0 + "@smithy/property-provider": 2.2.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + "@smithy/util-stream": 2.2.0 tslib: 2.6.2 - dev: true + dev: false - /@aws-sdk/util-locate-window@3.310.0: + /@aws-sdk/credential-provider-http@3.575.0: resolution: { - integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==, + integrity: sha512-xQfVmYI+9KqRvhWY8fyElnpcVUBBUgi/Hoji3oU6WLrUjrX98k93He7gKDQSyHf7ykMLUAJYWwsV4AjQ2j6njA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/fetch-http-handler": 3.0.1 + "@smithy/node-http-handler": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/util-stream": 3.0.1 tslib: 2.6.2 - dev: true - /@aws-sdk/util-user-agent-browser@3.398.0: + /@aws-sdk/credential-provider-ini@3.572.0(@aws-sdk/client-sso-oidc@3.574.0)(@aws-sdk/client-sts@3.574.0): resolution: { - integrity: sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA==, + integrity: sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA==, } - dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/types": 2.2.2 - bowser: 2.11.0 + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": 3.572.0 + dependencies: + "@aws-sdk/client-sts": 3.574.0(@aws-sdk/client-sso-oidc@3.574.0) + "@aws-sdk/credential-provider-env": 3.568.0 + "@aws-sdk/credential-provider-process": 3.572.0 + "@aws-sdk/credential-provider-sso": 3.572.0(@aws-sdk/client-sso-oidc@3.574.0) + "@aws-sdk/credential-provider-web-identity": 3.568.0(@aws-sdk/client-sts@3.574.0) + "@aws-sdk/types": 3.567.0 + "@smithy/credential-provider-imds": 2.3.0 + "@smithy/property-provider": 2.2.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 tslib: 2.6.2 - dev: true + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt + dev: false - /@aws-sdk/util-user-agent-node@3.405.0: + /@aws-sdk/credential-provider-ini@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0): resolution: { - integrity: sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ==, + integrity: sha512-BdM6a/5VUuNge3c6yRuxvO+4srLoSfqHfkQGfUDfhTdTJpljlpfnc9h3z2Ni1+aueOHPZMNFWIktHDcX5wUGBg==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } peerDependencies: - aws-crt: ">=1.0.0" - peerDependenciesMeta: - aws-crt: - optional: true - dependencies: - "@aws-sdk/types": 3.398.0 - "@smithy/node-config-provider": 2.0.7 - "@smithy/types": 2.2.2 + "@aws-sdk/client-sts": 3.575.0 + dependencies: + "@aws-sdk/client-sts": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.575.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt dev: true - /@aws-sdk/util-utf8-browser@3.259.0: + /@aws-sdk/credential-provider-ini@3.576.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.576.0): resolution: { - integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==, + integrity: sha512-AwH/+29SbjhxGJVYhFn6+7r0MZ7TjJClySTJzuOoyjJGPWAifTdEuFkyOw8Bs9fEvbJ0ExgFxSaa445fO56kmg==, } - dependencies: + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": 3.576.0 + dependencies: + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt dev: true - /@balena/dockerignore@1.0.2: + /@aws-sdk/credential-provider-ini@3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0): resolution: { - integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==, + integrity: sha512-AwH/+29SbjhxGJVYhFn6+7r0MZ7TjJClySTJzuOoyjJGPWAifTdEuFkyOw8Bs9fEvbJ0ExgFxSaa445fO56kmg==, } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": 3.576.0 + dependencies: + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt - /@cspotcode/source-map-support@0.8.1: + /@aws-sdk/credential-provider-node@3.572.0(@aws-sdk/client-sso-oidc@3.574.0)(@aws-sdk/client-sts@3.574.0): resolution: { - integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + integrity: sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg==, } - engines: { node: ">=12" } + engines: { node: ">=16.0.0" } dependencies: - "@jridgewell/trace-mapping": 0.3.9 - dev: true + "@aws-sdk/credential-provider-env": 3.568.0 + "@aws-sdk/credential-provider-http": 3.568.0 + "@aws-sdk/credential-provider-ini": 3.572.0(@aws-sdk/client-sso-oidc@3.574.0)(@aws-sdk/client-sts@3.574.0) + "@aws-sdk/credential-provider-process": 3.572.0 + "@aws-sdk/credential-provider-sso": 3.572.0(@aws-sdk/client-sso-oidc@3.574.0) + "@aws-sdk/credential-provider-web-identity": 3.568.0(@aws-sdk/client-sts@3.574.0) + "@aws-sdk/types": 3.567.0 + "@smithy/credential-provider-imds": 2.3.0 + "@smithy/property-provider": 2.2.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - "@aws-sdk/client-sts" + - aws-crt + dev: false - /@elsa-data/aws-infrastructure-client@1.3.4(aws-cdk-lib@2.93.0)(constructs@10.2.70): + /@aws-sdk/credential-provider-node@3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0): resolution: { - integrity: sha512-qgqBiwdLd4MFb4yLjBpIv2TbIKXlRsYeECohDARXX06LOLgEEP2OuqAXofGkCANZ5HD2gC0LQh9cu7o3OaffDw==, + integrity: sha512-rEdNpqW2jEc5kwbf/s9XQywMLQlIkMjuCK6mw9sF2OVRGHGVnh+6eh/1JFx8Kj+eU51ctifQ7KaHe8dGco8HYQ==, } - peerDependencies: - aws-cdk-lib: ^2.93.0 - constructs: ^10.2.70 + engines: { node: ">=16.0.0" } dependencies: - aws-cdk-lib: 2.93.0(constructs@10.2.70) - constructs: 10.2.70 - dev: false - bundledDependencies: - - shared + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-http": 3.575.0 + "@aws-sdk/credential-provider-ini": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.575.0) + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.575.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - "@aws-sdk/client-sts" + - aws-crt + dev: true - /@esbuild/android-arm64@0.19.2: + /@aws-sdk/credential-provider-node@3.576.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.576.0): resolution: { - integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==, + integrity: sha512-Ad244g3TJnfY1QFlZ+cywD6kgGD2yj+qg47Ryt50Y42bwmNuuqSpF9n0C71opRR68Rcl7ksOxixCJomWqpcHbA==, } - engines: { node: ">=12" } - cpu: [arm64] - os: [android] - requiresBuild: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-http": 3.575.0 + "@aws-sdk/credential-provider-ini": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - "@aws-sdk/client-sts" + - aws-crt dev: true - optional: true - /@esbuild/android-arm@0.19.2: + /@aws-sdk/credential-provider-node@3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0): resolution: { - integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==, + integrity: sha512-Ad244g3TJnfY1QFlZ+cywD6kgGD2yj+qg47Ryt50Y42bwmNuuqSpF9n0C71opRR68Rcl7ksOxixCJomWqpcHbA==, } - engines: { node: ">=12" } - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-http": 3.575.0 + "@aws-sdk/credential-provider-ini": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.576.0(@aws-sdk/client-sso-oidc@3.576.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - "@aws-sdk/client-sts" + - aws-crt - /@esbuild/android-x64@0.19.2: + /@aws-sdk/credential-provider-process@3.572.0: resolution: { - integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==, + integrity: sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw==, } - engines: { node: ">=12" } - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/property-provider": 2.2.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@esbuild/darwin-arm64@0.19.2: + /@aws-sdk/credential-provider-process@3.575.0: resolution: { - integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==, + integrity: sha512-2/5NJV7MZysKglqJSQ/O8OELNcwLcH3xknabL9NagtzB7RNB2p1AUXR0UlTey9sSDLL4oCmNa/+unYuglW/Ahg==, } - engines: { node: ">=12" } - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 - /@esbuild/darwin-x64@0.19.2: + /@aws-sdk/credential-provider-sso@3.572.0(@aws-sdk/client-sso-oidc@3.574.0): resolution: { - integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==, + integrity: sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow==, } - engines: { node: ">=12" } - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/client-sso": 3.572.0 + "@aws-sdk/token-providers": 3.572.0(@aws-sdk/client-sso-oidc@3.574.0) + "@aws-sdk/types": 3.567.0 + "@smithy/property-provider": 2.2.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt + dev: false - /@esbuild/freebsd-arm64@0.19.2: + /@aws-sdk/credential-provider-sso@3.575.0(@aws-sdk/client-sso-oidc@3.575.0): resolution: { - integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==, + integrity: sha512-NtXA9OPIKsqavs2F7hhLT/t2ZDjwJsvQevj31ov1NpmTNYMc7OWFWDptOG7rppsWMsk5KKmfiL2qViQJnezXNA==, } - engines: { node: ">=12" } - cpu: [arm64] - os: [freebsd] - requiresBuild: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/client-sso": 3.575.0 + "@aws-sdk/token-providers": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt dev: true - optional: true - /@esbuild/freebsd-x64@0.19.2: + /@aws-sdk/credential-provider-sso@3.576.0(@aws-sdk/client-sso-oidc@3.575.0): resolution: { - integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==, + integrity: sha512-1F17issiqf+mSG7KJ+D0SfZRYBZPAmRcA5+VHDUuMLozhh8tyYMe0mwzOt9IKc7ocrJA+2Wp7l7sg3h6aanedQ==, } - engines: { node: ">=12" } - cpu: [x64] - os: [freebsd] - requiresBuild: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/client-sso": 3.576.0 + "@aws-sdk/token-providers": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt dev: true - optional: true - /@esbuild/linux-arm64@0.19.2: + /@aws-sdk/credential-provider-sso@3.576.0(@aws-sdk/client-sso-oidc@3.576.0): resolution: { - integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==, + integrity: sha512-1F17issiqf+mSG7KJ+D0SfZRYBZPAmRcA5+VHDUuMLozhh8tyYMe0mwzOt9IKc7ocrJA+2Wp7l7sg3h6aanedQ==, } - engines: { node: ">=12" } - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/client-sso": 3.576.0 + "@aws-sdk/token-providers": 3.575.0(@aws-sdk/client-sso-oidc@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt - /@esbuild/linux-arm@0.19.2: + /@aws-sdk/credential-provider-web-identity@3.568.0(@aws-sdk/client-sts@3.574.0): resolution: { - integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==, + integrity: sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw==, } - engines: { node: ">=12" } - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": ^3.568.0 + dependencies: + "@aws-sdk/client-sts": 3.574.0(@aws-sdk/client-sso-oidc@3.574.0) + "@aws-sdk/types": 3.567.0 + "@smithy/property-provider": 2.2.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@esbuild/linux-ia32@0.19.2: + /@aws-sdk/credential-provider-web-identity@3.575.0(@aws-sdk/client-sts@3.575.0): resolution: { - integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==, + integrity: sha512-QcvVH7wpvpFRXGAGgCBfQeiF/ptD0NJ+Hrc8dDYfPGhFeZ0EoVQBYNphLi25xe7JZ+XbaqCKrURHZtr4fAEOJw==, } - engines: { node: ">=12" } - cpu: [ia32] - os: [linux] - requiresBuild: true + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": 3.575.0 + dependencies: + "@aws-sdk/client-sts": 3.575.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 dev: true - optional: true - /@esbuild/linux-loong64@0.19.2: + /@aws-sdk/credential-provider-web-identity@3.575.0(@aws-sdk/client-sts@3.576.0): resolution: { - integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==, + integrity: sha512-QcvVH7wpvpFRXGAGgCBfQeiF/ptD0NJ+Hrc8dDYfPGhFeZ0EoVQBYNphLi25xe7JZ+XbaqCKrURHZtr4fAEOJw==, } - engines: { node: ">=12" } - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sts": 3.575.0 + dependencies: + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 - /@esbuild/linux-mips64el@0.19.2: + /@aws-sdk/credential-providers@3.576.0(@aws-sdk/client-sso-oidc@3.575.0): resolution: { - integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==, + integrity: sha512-OoYyhSpxshmijD4aG/wDJIciFTh1DoNKyVyLaMGaJkE9nblArRCO+z0DEg9Yqlo8tLG0HLiTAJbyLxdQryKV5Q==, } - engines: { node: ">=12" } - cpu: [mips64el] - os: [linux] - requiresBuild: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/client-cognito-identity": 3.576.0 + "@aws-sdk/client-sso": 3.576.0 + "@aws-sdk/client-sts": 3.576.0 + "@aws-sdk/credential-provider-cognito-identity": 3.576.0 + "@aws-sdk/credential-provider-env": 3.575.0 + "@aws-sdk/credential-provider-http": 3.575.0 + "@aws-sdk/credential-provider-ini": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/credential-provider-node": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0)(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/credential-provider-process": 3.575.0 + "@aws-sdk/credential-provider-sso": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/credential-provider-web-identity": 3.575.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" + - aws-crt dev: true - optional: true - /@esbuild/linux-ppc64@0.19.2: + /@aws-sdk/middleware-bucket-endpoint@3.575.0: resolution: { - integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==, + integrity: sha512-ytsp7xcmbpkVk4TLoi91YyXQh/vwSIGdJ2Awo/pi6ac5Fqe6OntPijh5GHSVj5ZrxW4haPWb6HdBmKMo4liGEw==, } - engines: { node: ">=12" } - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-arn-parser": 3.568.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-config-provider": 3.0.0 + tslib: 2.6.2 + dev: false - /@esbuild/linux-riscv64@0.19.2: + /@aws-sdk/middleware-expect-continue@3.575.0: resolution: { - integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==, + integrity: sha512-8Nq4UtEi63MJPoYBACW5YoMKQdbrkLNGIdTyrolNRNwVS+6nQqDMvBplakCzQ1nL1rHOEEsKKc8e2BlG9SkR5A==, } - engines: { node: ">=12" } - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false - /@esbuild/linux-s390x@0.19.2: + /@aws-sdk/middleware-flexible-checksums@3.575.0: resolution: { - integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==, + integrity: sha512-UbyqN39v6s+olyuVKwX778w6J2ZuYpxb1j+KdhFtZwpMSLd/UIQ0+A71U2vB6TrC52OEW0jIXEEBv6PcMBz9nw==, } - engines: { node: ">=12" } - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-crypto/crc32": 3.0.0 + "@aws-crypto/crc32c": 3.0.0 + "@aws-sdk/types": 3.575.0 + "@smithy/is-array-buffer": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.6.2 + dev: false - /@esbuild/linux-x64@0.19.2: + /@aws-sdk/middleware-host-header@3.567.0: resolution: { - integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==, + integrity: sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ==, } - engines: { node: ">=12" } - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@esbuild/netbsd-x64@0.19.2: + /@aws-sdk/middleware-host-header@3.575.0: resolution: { - integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==, + integrity: sha512-V2WoLBiXNCc4rIWZt6FUcP4TN0Vk02A9PPCBWkTfyOooiqfq+WZmZjRRBpwl1+5UsvARslrKWF0VzheMRXPJLQ==, } - engines: { node: ">=12" } - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 - /@esbuild/openbsd-x64@0.19.2: + /@aws-sdk/middleware-location-constraint@3.575.0: resolution: { - integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==, + integrity: sha512-MtQsLsEjSSSfm0OlQqg9PEzS1nxJDdApGoeCYLTbCzIp6hChdLZCCsDXwGg9S++24rjQsUglMhXh4WGXQ9FDnw==, } - engines: { node: ">=12" } - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false - /@esbuild/sunos-x64@0.19.2: + /@aws-sdk/middleware-logger@3.568.0: resolution: { - integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==, + integrity: sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA==, } - engines: { node: ">=12" } - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@esbuild/win32-arm64@0.19.2: + /@aws-sdk/middleware-logger@3.575.0: resolution: { - integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==, + integrity: sha512-7DEKx9Z11Maaye7FfhYtC8rjbM/PcFcMO2N4QEAfypcgWCj+w4gseE2OGdfAH9OFDoFc6YvLp53v16vbPjzQSg==, } - engines: { node: ">=12" } - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 - /@esbuild/win32-ia32@0.19.2: + /@aws-sdk/middleware-recursion-detection@3.567.0: resolution: { - integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==, + integrity: sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w==, } - engines: { node: ">=12" } - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@esbuild/win32-x64@0.19.2: + /@aws-sdk/middleware-recursion-detection@3.575.0: resolution: { - integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==, + integrity: sha512-ri89ldRFos6KZDGaknWPS2XPO9qr+gZ7+mPaoU8YkSM1W4uKqtnUSONyc+O3CFGJrqReuGHhRq0l2Sld0bjwOw==, } - engines: { node: ">=12" } - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 - /@jridgewell/resolve-uri@3.1.1: + /@aws-sdk/middleware-sdk-s3@3.575.0: resolution: { - integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, + integrity: sha512-8cBG8/tap4F6+UigTpKu8D2bvsLgqRTmn1K86qo3LqRX0Wc5X8TVjdKA2PmG0onOOr7rqTLcP9Q02LCh3usU6Q==, } - engines: { node: ">=6.0.0" } - dev: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-arn-parser": 3.568.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/signature-v4": 3.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/util-config-provider": 3.0.0 + tslib: 2.6.2 + dev: false - /@jridgewell/sourcemap-codec@1.4.15: + /@aws-sdk/middleware-signing@3.575.0: resolution: { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + integrity: sha512-frpGG7i3YngWwrYIeDq8/nbat3Gfl803qasaS112rmlPU0ezmYS1SPxpXjpIKxUUYofbzaFtRBAOHU1u7GnWew==, } - dev: true + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/signature-v4": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-middleware": 3.0.0 + tslib: 2.6.2 + dev: false - /@jridgewell/trace-mapping@0.3.9: + /@aws-sdk/middleware-ssec@3.575.0: resolution: { - integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + integrity: sha512-rEFt2w3DdlmPsHRvVXOW6rNDIPE7UaEZ5a4LAkn78XilQYuQdhm5wtw5Ao0pJpDSVYNCZDVZaAvdHKQ1dnfwCA==, } + engines: { node: ">=16.0.0" } dependencies: - "@jridgewell/resolve-uri": 3.1.1 - "@jridgewell/sourcemap-codec": 1.4.15 + "@aws-sdk/types": 3.575.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-user-agent@3.572.0: + resolution: + { + integrity: sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@aws-sdk/util-endpoints": 3.572.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/middleware-user-agent@3.575.0: + resolution: + { + integrity: sha512-fWlr4RfrUNS2R3PgP+WsoMYORAgv/47Lp0J0fb3dXO1YvdczNWddRbFSUX2MQxM/y9XFfQPLpLgzluhoL3Cjeg==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@aws-sdk/util-endpoints": 3.575.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@aws-sdk/region-config-resolver@3.572.0: + resolution: + { + integrity: sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/types": 2.12.0 + "@smithy/util-config-provider": 2.3.0 + "@smithy/util-middleware": 2.2.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/region-config-resolver@3.575.0: + resolution: + { + integrity: sha512-sBJKwTWKCWu9y8FzXIijYGwkKr3tDkPXM7BylToe6W+tGkp4OirV4iXrWA9zReNwTTepoxHufofqjGK9BtcI8g==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-config-provider": 3.0.0 + "@smithy/util-middleware": 3.0.0 + tslib: 2.6.2 + + /@aws-sdk/signature-v4-multi-region@3.575.0: + resolution: + { + integrity: sha512-QMwuLuNwnEQ51RCZX8H/lXnOJgBcJJOCgClB9usW/XujNJVq8GnpZ5E7TsQLN88G6fifmcjQWonLKummuh/zVA==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/middleware-sdk-s3": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/signature-v4": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/token-providers@3.572.0(@aws-sdk/client-sso-oidc@3.574.0): + resolution: + { + integrity: sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sso-oidc": 3.572.0 + dependencies: + "@aws-sdk/client-sso-oidc": 3.574.0 + "@aws-sdk/types": 3.567.0 + "@smithy/property-provider": 2.2.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/token-providers@3.575.0(@aws-sdk/client-sso-oidc@3.575.0): + resolution: + { + integrity: sha512-EPNDPQoQkjKqn4D2t70qVzbfdtlaAy9KBdG58qD1yNWVxq8Rh/lXdwmB+aE2PSahtyfVikZdCRoZiFzxDh5IUA==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sso-oidc": 3.575.0 + dependencies: + "@aws-sdk/client-sso-oidc": 3.575.0 + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 dev: true - /@jsii/check-node@1.88.0: + /@aws-sdk/token-providers@3.575.0(@aws-sdk/client-sso-oidc@3.576.0): + resolution: + { + integrity: sha512-EPNDPQoQkjKqn4D2t70qVzbfdtlaAy9KBdG58qD1yNWVxq8Rh/lXdwmB+aE2PSahtyfVikZdCRoZiFzxDh5IUA==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + "@aws-sdk/client-sso-oidc": 3.575.0 + dependencies: + "@aws-sdk/client-sso-oidc": 3.576.0(@aws-sdk/client-sts@3.576.0) + "@aws-sdk/types": 3.575.0 + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@aws-sdk/types@3.567.0: + resolution: + { + integrity: sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/types@3.575.0: + resolution: + { + integrity: sha512-XrnolQGs0wXxdgNudirR14OgNOarH7WUif38+2Pd4onZH+L7XoILem0EgA1tRpgFpw2pFHlZCNaAHDNSBEal7g==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@aws-sdk/util-arn-parser@3.568.0: + resolution: + { + integrity: sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==, + } + engines: { node: ">=16.0.0" } + dependencies: + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-endpoints@3.572.0: + resolution: + { + integrity: sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/types": 2.12.0 + "@smithy/util-endpoints": 1.2.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-endpoints@3.575.0: + resolution: + { + integrity: sha512-wC5x+V6w3kRlR6X6XVINsAPDYG+Tzs3Wthlw+YLtjuPODUNZIQAqsABHahxnekFyAvse+1929Hwo+CaL+BHZGA==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/types": 3.0.0 + "@smithy/util-endpoints": 2.0.0 + tslib: 2.6.2 + + /@aws-sdk/util-locate-window@3.310.0: + resolution: + { + integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==, + } + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 + + /@aws-sdk/util-user-agent-browser@3.567.0: + resolution: + { + integrity: sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA==, + } + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/types": 2.12.0 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-browser@3.575.0: + resolution: + { + integrity: sha512-iADonXyaXgwvC4T0qRuDWCdKInz82GX2cyezq/oqVlL8bPY7HD8jwZZruuJdq5tkaJi1EhbO4+f1ksZqOiZKvQ==, + } + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/types": 3.0.0 + bowser: 2.11.0 + tslib: 2.6.2 + + /@aws-sdk/util-user-agent-node@3.568.0: + resolution: + { + integrity: sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + "@aws-sdk/types": 3.567.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@aws-sdk/util-user-agent-node@3.575.0: + resolution: + { + integrity: sha512-kwzvBfA0LoILDOFS6BV8uOkksBHrYulP6kNXegB5eZnDSNia5DbBsXqxQ/HknNF5a429SWQw2aaQJEgQvZB1VA==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + "@aws-sdk/types": 3.575.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@aws-sdk/util-utf8-browser@3.259.0: + resolution: + { + integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==, + } + dependencies: + tslib: 2.6.2 + + /@aws-sdk/xml-builder@3.575.0: + resolution: + { + integrity: sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@cspotcode/source-map-support@0.8.1: + resolution: + { + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + } + engines: { node: ">=12" } + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + dev: true + + /@elsa-data/aws-infrastructure@1.5.1(aws-cdk-lib@2.141.0)(constructs@10.3.0): + resolution: + { + integrity: sha512-foP1LgYFWP2sR9R4FrpQyE/I+Vwh4NCMIt/8MwliNMwtAYYzCSHZduwyo9EekcHvCotfSC/hYexTL8uer+P37g==, + } + peerDependencies: + aws-cdk-lib: ^2.108.1 + constructs: ^10.3.0 + dependencies: + aws-cdk-lib: 2.141.0(constructs@10.3.0) + constructs: 10.3.0 + dev: false + + /@esbuild/android-arm64@0.19.2: + resolution: + { + integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.2: + resolution: + { + integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.2: + resolution: + { + integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.2: + resolution: + { + integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.2: + resolution: + { + integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.2: + resolution: + { + integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.2: + resolution: + { + integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.2: + resolution: + { + integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.2: + resolution: + { + integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.2: + resolution: + { + integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.2: + resolution: + { + integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==, + } + engines: { node: ">=12" } + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.2: + resolution: + { + integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==, + } + engines: { node: ">=12" } + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.2: + resolution: + { + integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.2: + resolution: + { + integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==, + } + engines: { node: ">=12" } + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.2: + resolution: + { + integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==, + } + engines: { node: ">=12" } + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.2: + resolution: + { + integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.2: + resolution: + { + integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.2: + resolution: + { + integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.2: + resolution: + { + integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.2: + resolution: + { + integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.2: + resolution: + { + integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.2: + resolution: + { + integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: + { + integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, + } + engines: { node: ">=6.0.0" } + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + } + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: + { + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + } + dependencies: + "@jridgewell/resolve-uri": 3.1.1 + "@jridgewell/sourcemap-codec": 1.4.15 + dev: true + + /@jsii/check-node@1.98.0: + resolution: + { + integrity: sha512-hI53TMW/fylHyY3CrJvqWvfSPJvBL82GSAB1m2CKNC0yHb0pZHCdBZnLrrr4rgTCQx8kIJjcUc0rQ/Ba3w+GaA==, + } + engines: { node: ">= 14.17.0" } + dependencies: + chalk: 4.1.2 + semver: 7.6.2 + dev: true + + /@jsii/spec@1.98.0: + resolution: + { + integrity: sha512-5FCJedjFrxKt0wrcSnXetHHTXQV6OQM2NlE/WJNvjwqlk+RYfw+BwZOBYHsoaQx1Qh0pTwN7ZM9WmEusN3GdNw==, + } + engines: { node: ">= 14.17.0" } + dependencies: + ajv: 8.12.0 + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.15.0 + dev: true + + /@smithy/abort-controller@2.2.0: + resolution: + { + integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/abort-controller@3.0.0: + resolution: + { + integrity: sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/chunked-blob-reader-native@3.0.0: + resolution: + { + integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==, + } + dependencies: + "@smithy/util-base64": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/chunked-blob-reader@3.0.0: + resolution: + { + integrity: sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==, + } + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/config-resolver@2.2.0: + resolution: + { + integrity: sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.3.0 + "@smithy/types": 2.12.0 + "@smithy/util-config-provider": 2.3.0 + "@smithy/util-middleware": 2.2.0 + tslib: 2.6.2 + dev: false + + /@smithy/config-resolver@3.0.0: + resolution: + { + integrity: sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/node-config-provider": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-config-provider": 3.0.0 + "@smithy/util-middleware": 3.0.0 + tslib: 2.6.2 + + /@smithy/core@1.4.2: + resolution: + { + integrity: sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/middleware-endpoint": 2.5.1 + "@smithy/middleware-retry": 2.3.1 + "@smithy/middleware-serde": 2.3.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + "@smithy/util-middleware": 2.2.0 + tslib: 2.6.2 + dev: false + + /@smithy/core@2.0.1: + resolution: + { + integrity: sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/middleware-endpoint": 3.0.0 + "@smithy/middleware-retry": 3.0.1 + "@smithy/middleware-serde": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/util-middleware": 3.0.0 + tslib: 2.6.2 + + /@smithy/credential-provider-imds@2.3.0: + resolution: + { + integrity: sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.3.0 + "@smithy/property-provider": 2.2.0 + "@smithy/types": 2.12.0 + "@smithy/url-parser": 2.2.0 + tslib: 2.6.2 + dev: false + + /@smithy/credential-provider-imds@3.0.0: + resolution: + { + integrity: sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/node-config-provider": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + tslib: 2.6.2 + + /@smithy/eventstream-codec@3.0.0: + resolution: + { + integrity: sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==, + } + dependencies: + "@aws-crypto/crc32": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-hex-encoding": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-browser@3.0.0: + resolution: + { + integrity: sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/eventstream-serde-universal": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-config-resolver@3.0.0: + resolution: + { + integrity: sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-node@3.0.0: + resolution: + { + integrity: sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/eventstream-serde-universal": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/eventstream-serde-universal@3.0.0: + resolution: + { + integrity: sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/eventstream-codec": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/fetch-http-handler@2.5.0: + resolution: + { + integrity: sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==, + } + dependencies: + "@smithy/protocol-http": 3.3.0 + "@smithy/querystring-builder": 2.2.0 + "@smithy/types": 2.12.0 + "@smithy/util-base64": 2.3.0 + tslib: 2.6.2 + dev: false + + /@smithy/fetch-http-handler@3.0.1: + resolution: + { + integrity: sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==, + } + dependencies: + "@smithy/protocol-http": 4.0.0 + "@smithy/querystring-builder": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-base64": 3.0.0 + tslib: 2.6.2 + + /@smithy/hash-blob-browser@3.0.0: + resolution: + { + integrity: sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==, + } + dependencies: + "@smithy/chunked-blob-reader": 3.0.0 + "@smithy/chunked-blob-reader-native": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/hash-node@2.2.0: + resolution: + { + integrity: sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + "@smithy/util-buffer-from": 2.2.0 + "@smithy/util-utf8": 2.3.0 + tslib: 2.6.2 + dev: false + + /@smithy/hash-node@3.0.0: + resolution: + { + integrity: sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + "@smithy/util-buffer-from": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.6.2 + + /@smithy/hash-stream-node@3.0.0: + resolution: + { + integrity: sha512-J0i7de+EgXDEGITD4fxzmMX8CyCNETTIRXlxjMiNUvvu76Xn3GJ31wQR85ynlPk2wI1lqoknAFJaD1fiNDlbIA==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/invalid-dependency@2.2.0: + resolution: + { + integrity: sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==, + } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/invalid-dependency@3.0.0: + resolution: + { + integrity: sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==, + } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/is-array-buffer@2.2.0: + resolution: + { + integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==, + } + engines: { node: ">=14.0.0" } + dependencies: + tslib: 2.6.2 + dev: false + + /@smithy/is-array-buffer@3.0.0: + resolution: + { + integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + tslib: 2.6.2 + + /@smithy/md5-js@3.0.0: + resolution: + { + integrity: sha512-Tm0vrrVzjlD+6RCQTx7D3Ls58S3FUH1ZCtU1MIh/qQmaOo1H9lMN2as6CikcEwgattnA9SURSdoJJ27xMcEfMA==, + } + dependencies: + "@smithy/types": 3.0.0 + "@smithy/util-utf8": 3.0.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-content-length@2.2.0: + resolution: + { + integrity: sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/protocol-http": 3.3.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-content-length@3.0.0: + resolution: + { + integrity: sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/middleware-endpoint@2.5.1: + resolution: + { + integrity: sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/middleware-serde": 2.3.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 + "@smithy/url-parser": 2.2.0 + "@smithy/util-middleware": 2.2.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-endpoint@3.0.0: + resolution: + { + integrity: sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/middleware-serde": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/url-parser": 3.0.0 + "@smithy/util-middleware": 3.0.0 + tslib: 2.6.2 + + /@smithy/middleware-retry@2.3.1: + resolution: + { + integrity: sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/node-config-provider": 2.3.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/service-error-classification": 2.1.5 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + "@smithy/util-middleware": 2.2.0 + "@smithy/util-retry": 2.2.0 + tslib: 2.6.2 + uuid: 9.0.1 + dev: false + + /@smithy/middleware-retry@3.0.1: + resolution: + { + integrity: sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/node-config-provider": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/service-error-classification": 3.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-retry": 3.0.0 + tslib: 2.6.2 + uuid: 9.0.1 + + /@smithy/middleware-serde@2.3.0: + resolution: + { + integrity: sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-serde@3.0.0: + resolution: + { + integrity: sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/middleware-stack@2.2.0: + resolution: + { + integrity: sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/middleware-stack@3.0.0: + resolution: + { + integrity: sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/node-config-provider@2.3.0: + resolution: + { + integrity: sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/property-provider": 2.2.0 + "@smithy/shared-ini-file-loader": 2.4.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/node-config-provider@3.0.0: + resolution: + { + integrity: sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/property-provider": 3.0.0 + "@smithy/shared-ini-file-loader": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/node-http-handler@2.5.0: + resolution: + { + integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/abort-controller": 2.2.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/querystring-builder": 2.2.0 + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/node-http-handler@3.0.0: + resolution: + { + integrity: sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/abort-controller": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/querystring-builder": 3.0.0 + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/property-provider@2.2.0: + resolution: + { + integrity: sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/property-provider@3.0.0: + resolution: + { + integrity: sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/protocol-http@3.3.0: + resolution: + { + integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false + + /@smithy/protocol-http@4.0.0: + resolution: + { + integrity: sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + tslib: 2.6.2 + + /@smithy/querystring-builder@2.2.0: + resolution: + { + integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==, + } + engines: { node: ">=14.0.0" } + dependencies: + "@smithy/types": 2.12.0 + "@smithy/util-uri-escape": 2.2.0 + tslib: 2.6.2 + dev: false + + /@smithy/querystring-builder@3.0.0: + resolution: + { + integrity: sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==, + } + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 + "@smithy/util-uri-escape": 3.0.0 + tslib: 2.6.2 + + /@smithy/querystring-parser@2.2.0: resolution: { - integrity: sha512-AveFyqkJIb8qZvGk5nZal/8mEJB6lWhwqvAQLodHmqE3WzpmZD5+h+aspBVt0El5cEFRJ1k1mrQqhAnJCVpvxg==, + integrity: sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==, } - engines: { node: ">= 14.17.0" } + engines: { node: ">=14.0.0" } dependencies: - chalk: 4.1.2 - semver: 7.5.4 - dev: true + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@jsii/spec@1.88.0: + /@smithy/querystring-parser@3.0.0: resolution: { - integrity: sha512-Q6xirxPM06TRW0GcsHa+tzPZLwe9I+mFYx5BaNMimcv21u6bQnxfynZMgNhHqvLYCmP37HWg0SboUYTa5JROzw==, + integrity: sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==, } - engines: { node: ">= 14.17.0" } + engines: { node: ">=16.0.0" } dependencies: - ajv: 8.12.0 - dev: true + "@smithy/types": 3.0.0 + tslib: 2.6.2 - /@nodelib/fs.scandir@2.1.5: + /@smithy/service-error-classification@2.1.5: resolution: { - integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + integrity: sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==, } - engines: { node: ">= 8" } + engines: { node: ">=14.0.0" } dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: 1.2.0 - dev: true + "@smithy/types": 2.12.0 + dev: false - /@nodelib/fs.stat@2.0.5: + /@smithy/service-error-classification@3.0.0: resolution: { - integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + integrity: sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==, } - engines: { node: ">= 8" } - dev: true + engines: { node: ">=16.0.0" } + dependencies: + "@smithy/types": 3.0.0 - /@nodelib/fs.walk@1.2.8: + /@smithy/shared-ini-file-loader@2.4.0: resolution: { - integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + integrity: sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==, } - engines: { node: ">= 8" } + engines: { node: ">=14.0.0" } dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: 1.15.0 - dev: true + "@smithy/types": 2.12.0 + tslib: 2.6.2 + dev: false - /@smithy/abort-controller@2.0.5: + /@smithy/shared-ini-file-loader@3.0.0: resolution: { - integrity: sha512-byVZ2KWLMPYAZGKjRpniAzLcygJO4ruClZKdJTuB0eCB76ONFTdptBHlviHpAZXknRz7skYWPfcgO9v30A1SyA==, + integrity: sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/types": 2.2.2 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/config-resolver@2.0.5: + /@smithy/signature-v4@2.3.0: resolution: { - integrity: sha512-n0c2AXz+kjALY2FQr7Zy9zhYigXzboIh1AuUUVCqFBKFtdEvTwnwPXrTDoEehLiRTUHNL+4yzZ3s+D0kKYSLSg==, + integrity: sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/types": 2.2.2 - "@smithy/util-config-provider": 2.0.0 - "@smithy/util-middleware": 2.0.0 + "@smithy/is-array-buffer": 2.2.0 + "@smithy/types": 2.12.0 + "@smithy/util-hex-encoding": 2.2.0 + "@smithy/util-middleware": 2.2.0 + "@smithy/util-uri-escape": 2.2.0 + "@smithy/util-utf8": 2.3.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/credential-provider-imds@2.0.7: + /@smithy/signature-v4@3.0.0: resolution: { - integrity: sha512-XivkZj/pipzpQPxgleE1odwJQ6oDsVViB4VUO/HRDI4EdEfZjud44USupOUOa/xOjS39/75DYB4zgTbyV+totw==, + integrity: sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/node-config-provider": 2.0.7 - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 + "@smithy/is-array-buffer": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-hex-encoding": 3.0.0 + "@smithy/util-middleware": 3.0.0 + "@smithy/util-uri-escape": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/eventstream-codec@2.0.5: + /@smithy/smithy-client@2.5.1: resolution: { - integrity: sha512-iqR6OuOV3zbQK8uVs9o+9AxhVk8kW9NAxA71nugwUB+kTY9C35pUd0A5/m4PRT0Y0oIW7W4kgnSR3fdYXQjECw==, + integrity: sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==, } + engines: { node: ">=14.0.0" } dependencies: - "@aws-crypto/crc32": 3.0.0 - "@smithy/types": 2.2.2 - "@smithy/util-hex-encoding": 2.0.0 + "@smithy/middleware-endpoint": 2.5.1 + "@smithy/middleware-stack": 2.2.0 + "@smithy/protocol-http": 3.3.0 + "@smithy/types": 2.12.0 + "@smithy/util-stream": 2.2.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/fetch-http-handler@2.0.5: + /@smithy/smithy-client@3.0.1: resolution: { - integrity: sha512-EzFoMowdBNy1VqtvkiXgPFEdosIAt4/4bgZ8uiDiUyfhmNXq/3bV+CagPFFBsgFOR/X2XK4zFZHRsoa7PNHVVg==, + integrity: sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==, } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/protocol-http": 2.0.5 - "@smithy/querystring-builder": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/util-base64": 2.0.0 + "@smithy/middleware-endpoint": 3.0.0 + "@smithy/middleware-stack": 3.0.0 + "@smithy/protocol-http": 4.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-stream": 3.0.1 tslib: 2.6.2 - dev: true - /@smithy/hash-node@2.0.5: + /@smithy/types@2.12.0: resolution: { - integrity: sha512-mk551hIywBITT+kXruRNXk7f8Fy7DTzBjZJSr/V6nolYKmUHIG3w5QU6nO9qPYEQGKc/yEPtkpdS28ndeG93lA==, + integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/types": 2.2.2 - "@smithy/util-buffer-from": 2.0.0 - "@smithy/util-utf8": 2.0.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/invalid-dependency@2.0.5: + /@smithy/types@3.0.0: resolution: { - integrity: sha512-0wEi+JT0hM+UUwrJVYbqjuGFhy5agY/zXyiN7BNAJ1XoCDjU5uaNSj8ekPWsXd/d4yM6NSe8UbPd8cOc1+3oBQ==, + integrity: sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==, } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/types": 2.2.2 tslib: 2.6.2 - dev: true - /@smithy/is-array-buffer@2.0.0: + /@smithy/url-parser@2.2.0: resolution: { - integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==, + integrity: sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==, } - engines: { node: ">=14.0.0" } dependencies: + "@smithy/querystring-parser": 2.2.0 + "@smithy/types": 2.12.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/middleware-content-length@2.0.5: + /@smithy/url-parser@3.0.0: resolution: { - integrity: sha512-E7VwV5H02fgZIUGRli4GevBCAPvkyEI/fgl9SU47nPPi3DAAX3nEtUb8xfGbXjOcJ5BdSUoWWZn42tEd/blOqA==, + integrity: sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==, } - engines: { node: ">=14.0.0" } dependencies: - "@smithy/protocol-http": 2.0.5 - "@smithy/types": 2.2.2 + "@smithy/querystring-parser": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/middleware-endpoint@2.0.5: + /@smithy/util-base64@2.3.0: resolution: { - integrity: sha512-tyzDuoNTbsMQCq5Xkc4QOt6e2GACUllQIV8SQ5fc59FtOIV9/vbf58/GxVjZm2o8+MMbdDBANjTDZe/ijZKfyA==, + integrity: sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/middleware-serde": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/url-parser": 2.0.5 - "@smithy/util-middleware": 2.0.0 + "@smithy/util-buffer-from": 2.2.0 + "@smithy/util-utf8": 2.3.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/middleware-retry@2.0.5: + /@smithy/util-base64@3.0.0: resolution: { - integrity: sha512-ulIfbFyzQTVnJbLjUl1CTSi0etg6tej/ekwaLp0Gn8ybUkDkKYa+uB6CF/m2J5B6meRwyJlsryR+DjaOVyiicg==, + integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/protocol-http": 2.0.5 - "@smithy/service-error-classification": 2.0.0 - "@smithy/types": 2.2.2 - "@smithy/util-middleware": 2.0.0 - "@smithy/util-retry": 2.0.0 + "@smithy/util-buffer-from": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 - uuid: 8.3.2 - dev: true - /@smithy/middleware-serde@2.0.5: + /@smithy/util-body-length-browser@2.2.0: resolution: { - integrity: sha512-in0AA5sous74dOfTGU9rMJBXJ0bDVNxwdXtEt5lh3FVd2sEyjhI+rqpLLRF1E4ixbw3RSEf80hfRpcPdjg4vvQ==, + integrity: sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==, } - engines: { node: ">=14.0.0" } dependencies: - "@smithy/types": 2.2.2 tslib: 2.6.2 - dev: true + dev: false - /@smithy/middleware-stack@2.0.0: + /@smithy/util-body-length-browser@3.0.0: resolution: { - integrity: sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==, + integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==, } - engines: { node: ">=14.0.0" } dependencies: tslib: 2.6.2 - dev: true - /@smithy/node-config-provider@2.0.7: + /@smithy/util-body-length-node@2.3.0: resolution: { - integrity: sha512-GuLxhnf0aVQsfQp4ZWaM1TRCIndpQjAswyFcmDFRNf4yFqpxpLPDeV540+O0Z21Hmu3deoQm/dCPXbVn90PYzg==, + integrity: sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/property-provider": 2.0.6 - "@smithy/shared-ini-file-loader": 2.0.6 - "@smithy/types": 2.2.2 tslib: 2.6.2 - dev: true + dev: false - /@smithy/node-http-handler@2.0.5: + /@smithy/util-body-length-node@3.0.0: resolution: { - integrity: sha512-lZm5DZf4b3V0saUw9WTC4/du887P6cy2fUyQgQQKRRV6OseButyD5yTzeMmXE53CaXJBMBsUvvIQ0hRVxIq56w==, + integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/abort-controller": 2.0.5 - "@smithy/protocol-http": 2.0.5 - "@smithy/querystring-builder": 2.0.5 - "@smithy/types": 2.2.2 tslib: 2.6.2 - dev: true - /@smithy/property-provider@2.0.6: + /@smithy/util-buffer-from@2.2.0: resolution: { - integrity: sha512-CVem6ZkkWxbTnhjDLyLESY0oLA6IUZYtdqrCpGQKUXaFBOuc/izjm7fIFGBxEbjZ1EGcH9hHxrjqX36RWULNRg==, + integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/types": 2.2.2 + "@smithy/is-array-buffer": 2.2.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/protocol-http@2.0.5: + /@smithy/util-buffer-from@3.0.0: resolution: { - integrity: sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==, + integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/types": 2.2.2 + "@smithy/is-array-buffer": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/querystring-builder@2.0.5: + /@smithy/util-config-provider@2.3.0: resolution: { - integrity: sha512-4DCX9krxLzATj+HdFPC3i8pb7XTAWzzKqSw8aTZMjXjtQY+vhe4azMAqIvbb6g7JKwIkmkRAjK6EXO3YWSnJVQ==, + integrity: sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/types": 2.2.2 - "@smithy/util-uri-escape": 2.0.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/querystring-parser@2.0.5: + /@smithy/util-config-provider@3.0.0: resolution: { - integrity: sha512-C2stCULH0r54KBksv3AWcN8CLS3u9+WsEW8nBrvctrJ5rQTNa1waHkffpVaiKvcW2nP0aIMBPCobD/kYf/q9mA==, + integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/types": 2.2.2 tslib: 2.6.2 - dev: true - /@smithy/service-error-classification@2.0.0: + /@smithy/util-defaults-mode-browser@2.2.1: resolution: { - integrity: sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==, + integrity: sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==, } - engines: { node: ">=14.0.0" } - dev: true + engines: { node: ">= 10.0.0" } + dependencies: + "@smithy/property-provider": 2.2.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false - /@smithy/shared-ini-file-loader@2.0.6: + /@smithy/util-defaults-mode-browser@3.0.1: resolution: { - integrity: sha512-NO6dHqho6APbVR0DxPtYoL4KXBqUeSM3Slsd103MOgL50YbzzsQmMLtDMZ87W8MlvvCN0tuiq+OrAO/rM7hTQg==, + integrity: sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==, } - engines: { node: ">=14.0.0" } + engines: { node: ">= 10.0.0" } dependencies: - "@smithy/types": 2.2.2 + "@smithy/property-provider": 3.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 + bowser: 2.11.0 tslib: 2.6.2 - dev: true - /@smithy/signature-v4@2.0.5: + /@smithy/util-defaults-mode-node@2.3.1: resolution: { - integrity: sha512-ABIzXmUDXK4n2c9cXjQLELgH2RdtABpYKT+U131e2I6RbCypFZmxIHmIBufJzU2kdMCQ3+thBGDWorAITFW04A==, + integrity: sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">= 10.0.0" } dependencies: - "@smithy/eventstream-codec": 2.0.5 - "@smithy/is-array-buffer": 2.0.0 - "@smithy/types": 2.2.2 - "@smithy/util-hex-encoding": 2.0.0 - "@smithy/util-middleware": 2.0.0 - "@smithy/util-uri-escape": 2.0.0 - "@smithy/util-utf8": 2.0.0 + "@smithy/config-resolver": 2.2.0 + "@smithy/credential-provider-imds": 2.3.0 + "@smithy/node-config-provider": 2.3.0 + "@smithy/property-provider": 2.2.0 + "@smithy/smithy-client": 2.5.1 + "@smithy/types": 2.12.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/smithy-client@2.0.5: + /@smithy/util-defaults-mode-node@3.0.1: resolution: { - integrity: sha512-kCTFr8wfOAWKDzGvfBElc6shHigWtHNhMQ1IbosjC4jOlayFyZMSs2PysKB+Ox/dhQ41KqOzgVjgiQ+PyWqHMQ==, + integrity: sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==, } - engines: { node: ">=14.0.0" } + engines: { node: ">= 10.0.0" } dependencies: - "@smithy/middleware-stack": 2.0.0 - "@smithy/types": 2.2.2 - "@smithy/util-stream": 2.0.5 + "@smithy/config-resolver": 3.0.0 + "@smithy/credential-provider-imds": 3.0.0 + "@smithy/node-config-provider": 3.0.0 + "@smithy/property-provider": 3.0.0 + "@smithy/smithy-client": 3.0.1 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/types@2.2.2: + /@smithy/util-endpoints@1.2.0: resolution: { - integrity: sha512-4PS0y1VxDnELGHGgBWlDksB2LJK8TG8lcvlWxIsgR+8vROI7Ms8h1P4FQUx+ftAX2QZv5g1CJCdhdRmQKyonyw==, + integrity: sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">= 14.0.0" } dependencies: + "@smithy/node-config-provider": 2.3.0 + "@smithy/types": 2.12.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/url-parser@2.0.5: + /@smithy/util-endpoints@2.0.0: resolution: { - integrity: sha512-OdMBvZhpckQSkugCXNJQCvqJ71wE7Ftxce92UOQLQ9pwF6hoS5PLL7wEfpnuEXtStzBqJYkzu1C1ZfjuFGOXAA==, + integrity: sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==, } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/querystring-parser": 2.0.5 - "@smithy/types": 2.2.2 + "@smithy/node-config-provider": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/util-base64@2.0.0: + /@smithy/util-hex-encoding@2.2.0: resolution: { - integrity: sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==, + integrity: sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/util-buffer-from": 2.0.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/util-body-length-browser@2.0.0: + /@smithy/util-hex-encoding@3.0.0: resolution: { - integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==, + integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==, } + engines: { node: ">=16.0.0" } dependencies: tslib: 2.6.2 - dev: true - /@smithy/util-body-length-node@2.1.0: + /@smithy/util-middleware@2.2.0: resolution: { - integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==, + integrity: sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==, } engines: { node: ">=14.0.0" } dependencies: + "@smithy/types": 2.12.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/util-buffer-from@2.0.0: + /@smithy/util-middleware@3.0.0: resolution: { - integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==, + integrity: sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/is-array-buffer": 2.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/util-config-provider@2.0.0: + /@smithy/util-retry@2.2.0: resolution: { - integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==, + integrity: sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==, } - engines: { node: ">=14.0.0" } + engines: { node: ">= 14.0.0" } dependencies: + "@smithy/service-error-classification": 2.1.5 + "@smithy/types": 2.12.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/util-defaults-mode-browser@2.0.6: + /@smithy/util-retry@3.0.0: resolution: { - integrity: sha512-h8xyKTZIIom62DN4xbPUmL+RL1deZcK1qJGmCr4c2yXjOrs5/iZ1VtQQcl+xP78620ga/565AikZE1sktdg2yA==, + integrity: sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==, } - engines: { node: ">= 10.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 - bowser: 2.11.0 + "@smithy/service-error-classification": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/util-defaults-mode-node@2.0.7: + /@smithy/util-stream@2.2.0: resolution: { - integrity: sha512-2C1YfmYJj9bpM/cRAgQppYNzPd8gDEXZ5XIVDuEQg3TmmIiinZaFf/HsHYo9NK/PMy5oawJVdIuR7SVriIo1AQ==, + integrity: sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==, } - engines: { node: ">= 10.0.0" } + engines: { node: ">=14.0.0" } dependencies: - "@smithy/config-resolver": 2.0.5 - "@smithy/credential-provider-imds": 2.0.7 - "@smithy/node-config-provider": 2.0.7 - "@smithy/property-provider": 2.0.6 - "@smithy/types": 2.2.2 + "@smithy/fetch-http-handler": 2.5.0 + "@smithy/node-http-handler": 2.5.0 + "@smithy/types": 2.12.0 + "@smithy/util-base64": 2.3.0 + "@smithy/util-buffer-from": 2.2.0 + "@smithy/util-hex-encoding": 2.2.0 + "@smithy/util-utf8": 2.3.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/util-hex-encoding@2.0.0: + /@smithy/util-stream@3.0.1: resolution: { - integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==, + integrity: sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: + "@smithy/fetch-http-handler": 3.0.1 + "@smithy/node-http-handler": 3.0.0 + "@smithy/types": 3.0.0 + "@smithy/util-base64": 3.0.0 + "@smithy/util-buffer-from": 3.0.0 + "@smithy/util-hex-encoding": 3.0.0 + "@smithy/util-utf8": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/util-middleware@2.0.0: + /@smithy/util-uri-escape@2.2.0: resolution: { - integrity: sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==, + integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==, } engines: { node: ">=14.0.0" } dependencies: tslib: 2.6.2 - dev: true + dev: false - /@smithy/util-retry@2.0.0: + /@smithy/util-uri-escape@3.0.0: resolution: { - integrity: sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==, + integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==, } - engines: { node: ">= 14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/service-error-classification": 2.0.0 tslib: 2.6.2 - dev: true - /@smithy/util-stream@2.0.5: + /@smithy/util-utf8@2.3.0: resolution: { - integrity: sha512-ylx27GwI05xLpYQ4hDIfS15vm+wYjNN0Sc2P0FxuzgRe8v0BOLHppGIQ+Bezcynk8C9nUzsUue3TmtRhjut43g==, + integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==, } engines: { node: ">=14.0.0" } dependencies: - "@smithy/fetch-http-handler": 2.0.5 - "@smithy/node-http-handler": 2.0.5 - "@smithy/types": 2.2.2 - "@smithy/util-base64": 2.0.0 - "@smithy/util-buffer-from": 2.0.0 - "@smithy/util-hex-encoding": 2.0.0 - "@smithy/util-utf8": 2.0.0 + "@smithy/util-buffer-from": 2.2.0 tslib: 2.6.2 - dev: true + dev: false - /@smithy/util-uri-escape@2.0.0: + /@smithy/util-utf8@3.0.0: resolution: { - integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==, + integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: + "@smithy/util-buffer-from": 3.0.0 tslib: 2.6.2 - dev: true - /@smithy/util-utf8@2.0.0: + /@smithy/util-waiter@3.0.0: resolution: { - integrity: sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==, + integrity: sha512-+fEXJxGDLCoqRKVSmo0auGxaqbiCo+8oph+4auefYjaNxjOLKSY2MxVQfRzo65PaZv4fr+5lWg+au7vSuJJ/zw==, } - engines: { node: ">=14.0.0" } + engines: { node: ">=16.0.0" } dependencies: - "@smithy/util-buffer-from": 2.0.0 + "@smithy/abort-controller": 3.0.0 + "@smithy/types": 3.0.0 tslib: 2.6.2 - dev: true + dev: false /@tsconfig/node10@1.0.9: resolution: @@ -1580,6 +3347,7 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 + dev: true /ansi-regex@5.0.1: resolution: @@ -1587,6 +3355,7 @@ packages: integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, } engines: { node: ">=8" } + dev: true /ansi-styles@4.3.0: resolution: @@ -1596,6 +3365,7 @@ packages: engines: { node: ">=8" } dependencies: color-convert: 2.0.1 + dev: true /arg@4.1.3: resolution: @@ -1604,36 +3374,57 @@ packages: } dev: true - /astral-regex@2.0.0: + /array-buffer-byte-length@1.0.1: resolution: { - integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, + integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==, } - engines: { node: ">=8" } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: + { + integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==, + } + engines: { node: ">= 0.4" } + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: ">= 0.4" } + dependencies: + possible-typed-array-names: 1.0.0 + dev: true - /aws-cdk-lib@2.93.0(constructs@10.2.70): + /aws-cdk-lib@2.141.0(constructs@10.3.0): resolution: { - integrity: sha512-kKbcKkts272Ju5xjGKI3pXTOpiJxW4OQbDF8Vmw/NIkkuJLo8GlRCFfeOfoN/hilvlYQgENA67GCgSWccbvu7w==, + integrity: sha512-xda56Lfwpdqg9MssnFdXrAKTmeeNjfrfFCaWwqGqToG6cfGY2W+6wyyoObX60/MeZGhhs3Lhdb/K94ulLJ4X/A==, } engines: { node: ">= 14.15.0" } peerDependencies: constructs: ^10.0.0 dependencies: - "@aws-cdk/asset-awscli-v1": 2.2.200 + "@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.1 - "@balena/dockerignore": 1.0.2 - case: 1.6.3 - constructs: 10.2.70 - fs-extra: 11.1.1 - ignore: 5.2.4 - jsonschema: 1.4.1 - minimatch: 3.1.2 - punycode: 2.3.0 - semver: 7.5.4 - table: 6.8.1 - yaml: 1.10.2 + "@aws-cdk/asset-node-proxy-agent-v6": 2.0.3 + constructs: 10.3.0 bundledDependencies: - "@balena/dockerignore" - case @@ -1645,11 +3436,12 @@ packages: - semver - table - yaml + - mime-types - /aws-cdk@2.93.0: + /aws-cdk@2.141.0: resolution: { - integrity: sha512-C0o7rzlXbQ3othvQ9uZamRwr741MSX/9eZ74zNJvpkX5Eitx/XoQYwUHeD+cbb4lKHMi7m2SwJfx3yOEkpu9OQ==, + integrity: sha512-RM9uDiETBEKCHemItaRGVjOLwoZ5iqXnejpyXY7+YF75c2c0Ui7HSZI8QD0stDg3S/2UbLcKv2RA9dBsjrWUGA==, } engines: { node: ">= 14.15.0" } hasBin: true @@ -1662,13 +3454,13 @@ packages: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } + dev: true /bowser@2.11.0: resolution: { integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, } - dev: true /brace-expansion@1.1.11: resolution: @@ -1678,6 +3470,7 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true /brace-expansion@2.0.1: resolution: @@ -1698,6 +3491,20 @@ packages: fill-range: 7.0.1 dev: true + /call-bind@1.0.7: + resolution: + { + integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==, + } + engines: { node: ">= 0.4" } + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + /camelcase@6.3.0: resolution: { @@ -1712,6 +3519,7 @@ packages: integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==, } engines: { node: ">= 0.8.0" } + dev: true /chalk@4.1.2: resolution: @@ -1755,10 +3563,10 @@ packages: engines: { node: ">=0.8" } dev: true - /codemaker@1.88.0: + /codemaker@1.98.0: resolution: { - integrity: sha512-/7+1mPQCEFmBm9zhf5blMiqirCcXNwulb8dozu2LVsDLgnafPt1h2eg/OwvyrqSMWUnsIFetAssKVP2gE66MPQ==, + integrity: sha512-UAeICTmY7lJXf4OPnDTwKWg/DU87u67nyxuTjMON+vO8yo8C+EcPWnmmOmWtZm3wWLPsPuxyYIQxIIi/4OZ9TA==, } engines: { node: ">= 14.17.0" } dependencies: @@ -1775,12 +3583,14 @@ packages: engines: { node: ">=7.0.0" } dependencies: color-name: 1.1.4 + dev: true /color-name@1.1.4: resolution: { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, } + dev: true /commonmark@0.30.0: resolution: @@ -1795,16 +3605,30 @@ packages: string.prototype.repeat: 0.2.0 dev: true + /commonmark@0.31.0: + resolution: + { + integrity: sha512-nuDsQ34gjmgAqjyIz6mbRWBW/XPE9wsBempAMBk2V/AA88ekztjTM46oi07J6c6Y/2Y8TdYCZi9L0pIBt/oMZw==, + } + hasBin: true + dependencies: + entities: 3.0.1 + mdurl: 1.0.1 + minimist: 1.2.8 + string.prototype.repeat: 1.0.0 + dev: true + /concat-map@0.0.1: resolution: { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, } + dev: true - /constructs@10.2.70: + /constructs@10.3.0: resolution: { - integrity: sha512-z6zr1E8K/9tzJbCQzY0UGX0/oVKPFKu9C/mzEnghCG6TAJINnvlq0CMKm63XqqeMleadZYm5T3sZGJKcxJS/Pg==, + integrity: sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ==, } engines: { node: ">= 16.14.0" } @@ -1815,6 +3639,42 @@ packages: } dev: true + /data-view-buffer@1.0.1: + resolution: + { + integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: + { + integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: + { + integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /date-format@4.0.14: resolution: { @@ -1838,61 +3698,201 @@ packages: ms: 2.1.2 dev: true - /decamelize@5.0.1: + /decamelize@5.0.1: + resolution: + { + integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==, + } + engines: { node: ">=10" } + dev: true + + /define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: ">= 0.4" } + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /detect-indent@5.0.0: + resolution: + { + integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==, + } + engines: { node: ">=4" } + dev: true + + /detect-newline@2.1.0: + resolution: + { + integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==, + } + engines: { node: ">=0.10.0" } + dev: true + + /diff@4.0.2: + resolution: + { + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, + } + engines: { node: ">=0.3.1" } + dev: true + + /downlevel-dts@0.11.0: + resolution: + { + integrity: sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==, + } + hasBin: true + dependencies: + semver: 7.6.2 + shelljs: 0.8.5 + typescript: 5.5.0-dev.20240514 + dev: true + + /emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + dev: true + + /entities@2.0.3: resolution: { - integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==, + integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==, } - engines: { node: ">=10" } dev: true - /detect-indent@5.0.0: + /entities@3.0.1: resolution: { - integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==, + integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==, } - engines: { node: ">=4" } + engines: { node: ">=0.12" } dev: true - /detect-newline@2.1.0: + /es-abstract@1.23.3: resolution: { - integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==, + integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==, } - engines: { node: ">=0.10.0" } + engines: { node: ">= 0.4" } + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: + { + integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==, + } + engines: { node: ">= 0.4" } + dependencies: + get-intrinsic: 1.2.4 dev: true - /diff@4.0.2: + /es-errors@1.3.0: resolution: { - integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, } - engines: { node: ">=0.3.1" } + engines: { node: ">= 0.4" } dev: true - /downlevel-dts@0.11.0: + /es-object-atoms@1.0.0: resolution: { - integrity: sha512-vo835pntK7kzYStk7xUHDifiYJvXxVhUapt85uk2AI94gUUAQX9HNRtrcMHNSc3YHJUEHGbYIGsM99uIbgAtxw==, + integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==, } - hasBin: true + engines: { node: ">= 0.4" } dependencies: - semver: 7.5.4 - shelljs: 0.8.5 - typescript: 5.3.0-dev.20230907 + es-errors: 1.3.0 dev: true - /emoji-regex@8.0.0: + /es-set-tostringtag@2.0.3: resolution: { - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==, } + engines: { node: ">= 0.4" } + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true - /entities@2.0.3: + /es-to-primitive@1.2.1: resolution: { - integrity: sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==, + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==, } + engines: { node: ">= 0.4" } + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 dev: true /esbuild@0.19.2: @@ -1956,11 +3956,12 @@ packages: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, } + dev: true - /fast-glob@3.3.1: + /fast-glob@3.3.2: resolution: { - integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, + integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, } engines: { node: ">=8.6.0" } dependencies: @@ -1979,7 +3980,6 @@ packages: hasBin: true dependencies: strnum: 1.0.5 - dev: true /fastq@1.15.0: resolution: @@ -2007,28 +4007,26 @@ packages: } dev: true - /fs-extra@10.1.0: + /for-each@0.3.3: resolution: { - integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, } - engines: { node: ">=12" } dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 + is-callable: 1.2.7 dev: true - /fs-extra@11.1.1: + /fs-extra@10.1.0: resolution: { - integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==, + integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, } - engines: { node: ">=14.14" } + engines: { node: ">=12" } dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 + dev: true /fs-extra@8.1.0: resolution: @@ -2067,6 +4065,33 @@ packages: } dev: true + /function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + dev: true + + /function.prototype.name@1.1.6: + resolution: + { + integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } + dev: true + /get-caller-file@2.0.5: resolution: { @@ -2075,6 +4100,32 @@ packages: engines: { node: 6.* || 8.* || >= 10.* } dev: true + /get-intrinsic@1.2.4: + resolution: + { + integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==, + } + engines: { node: ">= 0.4" } + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true + + /get-symbol-description@1.0.2: + resolution: + { + integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + /glob-parent@5.1.2: resolution: { @@ -2112,11 +4163,39 @@ packages: path-is-absolute: 1.0.1 dev: true + /globalthis@1.0.4: + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, + } + engines: { node: ">= 0.4" } + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + dev: true + + /gopd@1.0.1: + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, + } + dependencies: + get-intrinsic: 1.2.4 + dev: true + /graceful-fs@4.2.11: resolution: { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, } + dev: true + + /has-bigints@1.0.2: + resolution: + { + integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, + } + dev: true /has-flag@4.0.0: resolution: @@ -2126,200 +4205,371 @@ packages: engines: { node: ">=8" } dev: true - /has@1.0.3: + /has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: + { + integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==, + } + engines: { node: ">= 0.4" } + dev: true + + /has-symbols@1.0.3: + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, + } + engines: { node: ">= 0.4" } + dev: true + + /has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: ">= 0.4" } + dependencies: + has-symbols: 1.0.3 + dev: true + + /has@1.0.3: + resolution: + { + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, + } + engines: { node: ">= 0.4.0" } + dependencies: + function-bind: 1.1.1 + dev: true + + /hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: ">= 0.4" } + dependencies: + function-bind: 1.1.2 + dev: true + + /inflight@1.0.6: + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } + dev: true + + /internal-slot@1.0.7: + resolution: + { + integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==, + } + engines: { node: ">= 0.4" } + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true + + /interpret@1.4.0: + resolution: + { + integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, + } + engines: { node: ">= 0.10" } + dev: true + + /is-array-buffer@3.0.4: + resolution: + { + integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-bigint@1.0.4: + resolution: + { + integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, + } + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: + { + integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + dev: true + + /is-core-module@2.13.0: + resolution: + { + integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, + } + dependencies: + has: 1.0.3 + dev: true + + /is-data-view@1.0.1: + resolution: + { + integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==, + } + engines: { node: ">= 0.4" } + dependencies: + is-typed-array: 1.1.13 + dev: true + + /is-date-object@1.0.5: + resolution: + { + integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, + } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } + dev: true + + /is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-negative-zero@2.0.3: + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, + } + engines: { node: ">= 0.4" } + dev: true + + /is-number-object@1.0.7: resolution: { - integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, + integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, } - engines: { node: ">= 0.4.0" } + engines: { node: ">= 0.4" } dependencies: - function-bind: 1.1.1 + has-tostringtag: 1.0.2 dev: true - /ignore@5.2.4: + /is-number@7.0.0: resolution: { - integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, } - engines: { node: ">= 4" } + engines: { node: ">=0.12.0" } + dev: true - /inflight@1.0.6: + /is-regex@1.1.4: resolution: { - integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, } + engines: { node: ">= 0.4" } dependencies: - once: 1.4.0 - wrappy: 1.0.2 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true - /inherits@2.0.4: + /is-shared-array-buffer@1.0.3: resolution: { - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==, } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 dev: true - /interpret@1.4.0: + /is-string@1.0.7: resolution: { - integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, + integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, } - engines: { node: ">= 0.10" } + engines: { node: ">= 0.4" } + dependencies: + has-tostringtag: 1.0.2 dev: true - /is-core-module@2.13.0: + /is-symbol@1.0.4: resolution: { - integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, + integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, } + engines: { node: ">= 0.4" } dependencies: - has: 1.0.3 + has-symbols: 1.0.3 dev: true - /is-extglob@2.1.1: + /is-typed-array@1.1.13: resolution: { - integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==, } - engines: { node: ">=0.10.0" } + engines: { node: ">= 0.4" } + dependencies: + which-typed-array: 1.1.15 dev: true - /is-fullwidth-code-point@3.0.0: - resolution: - { - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, - } - engines: { node: ">=8" } - - /is-glob@4.0.3: + /is-weakref@1.0.2: resolution: { - integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, } - engines: { node: ">=0.10.0" } dependencies: - is-extglob: 2.1.1 + call-bind: 1.0.7 dev: true - /is-number@7.0.0: + /isarray@2.0.5: resolution: { - integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, } - engines: { node: ">=0.12.0" } dev: true - /jsii-pacmak@1.88.0: + /jsii-pacmak@1.98.0(jsii-rosetta@5.4.17): resolution: { - integrity: sha512-nanfSaYpe2lgOzvosup4iObQ76tCs47+rERUUGFyrCq7sruQ7VMYgRdAuGWh8PqF9fGNwq6Do1eR+EMC+d4WUg==, + integrity: sha512-p2H8IbiI3RNIUg+oRcJ9Xu1I7CgJUxCMpUl5IPzWAjz1qzhIKOzlkaAMGJfJZJQtib5kWI2OmZ6xBZScWg16+Q==, } engines: { node: ">= 14.17.0" } hasBin: true + peerDependencies: + jsii-rosetta: ^1.98.0 || ~5.2.0 || ~5.3.0 || ~5.4.0 dependencies: - "@jsii/check-node": 1.88.0 - "@jsii/spec": 1.88.0 + "@jsii/check-node": 1.98.0 + "@jsii/spec": 1.98.0 clone: 2.1.2 - codemaker: 1.88.0 + codemaker: 1.98.0 commonmark: 0.30.0 escape-string-regexp: 4.0.0 fs-extra: 10.1.0 - jsii-reflect: 1.88.0 - jsii-rosetta: 1.88.0 + jsii-reflect: 1.98.0 + jsii-rosetta: 5.4.17 semver: 7.5.4 - spdx-license-list: 6.7.0 + spdx-license-list: 6.8.0 xmlbuilder: 15.1.1 yargs: 16.2.0 - transitivePeerDependencies: - - supports-color dev: true - /jsii-reflect@1.88.0: + /jsii-reflect@1.98.0: resolution: { - integrity: sha512-YYZTEQpayvwMDtRMCjgNraTFUqsj4/KEOE8ChvDCkpxv6aH89vpZSsAJM5ymhNLDHj4XZ2OW3XE0sNOz31NbvA==, + integrity: sha512-HulKk6pQOk0zkqJXRaweV5PezvAghZAX4cuB7i0sBA0/kz1ypqB1KFhBiZ1PLeeMzAfb1/WmCF2UTu9xzQit4w==, } engines: { node: ">= 14.17.0" } hasBin: true dependencies: - "@jsii/check-node": 1.88.0 - "@jsii/spec": 1.88.0 + "@jsii/check-node": 1.98.0 + "@jsii/spec": 1.98.0 chalk: 4.1.2 fs-extra: 10.1.0 - oo-ascii-tree: 1.88.0 + oo-ascii-tree: 1.98.0 yargs: 16.2.0 dev: true - /jsii-rosetta@1.88.0: + /jsii-rosetta@5.4.17: resolution: { - integrity: sha512-6xRRkwWUKFqDTnjgCXkB6v9dxA51KUD4Cd7InLB4qirMBDuMtyYhYVNc1yJbHPYs9gkN5/ao0dFk+1CQxt7T7g==, + integrity: sha512-BFkL3y4IgOxBKVPk43OwCFgjiYwR05t41ZP9ZjQP9AZeeiCiP89NQ7Y7qrs8+A5z8RyEw6RuAtkHPke2oPtR2w==, } - engines: { node: ">= 14.17.0" } + engines: { node: ">= 18.12.0" } hasBin: true dependencies: - "@jsii/check-node": 1.88.0 - "@jsii/spec": 1.88.0 + "@jsii/check-node": 1.98.0 + "@jsii/spec": 1.98.0 "@xmldom/xmldom": 0.8.10 - commonmark: 0.30.0 - fast-glob: 3.3.1 - jsii: 1.88.0 - semver: 7.5.4 - semver-intersect: 1.4.0 - stream-json: 1.8.0 - typescript: 3.9.10 - workerpool: 6.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jsii@1.88.0: - resolution: - { - integrity: sha512-WKfwHbcEI/j5OYDPexvkH8KKDcTZR7tIBFNTxu8h1Nh3G8xFT4hh3pObUUSMRCa6rsSF9EHGjS+AKC+TfpFGrQ==, - } - engines: { node: ">= 14.17.0" } - hasBin: true - dependencies: - "@jsii/check-node": 1.88.0 - "@jsii/spec": 1.88.0 - case: 1.6.3 chalk: 4.1.2 - fast-deep-equal: 3.1.3 - fs-extra: 10.1.0 - log4js: 6.9.1 - semver: 7.5.4 - semver-intersect: 1.4.0 - sort-json: 2.0.1 - spdx-license-list: 6.7.0 - typescript: 3.9.10 - yargs: 16.2.0 + commonmark: 0.31.0 + fast-glob: 3.3.2 + jsii: 5.4.15 + semver: 7.6.2 + semver-intersect: 1.5.0 + stream-json: 1.8.0 + typescript: 5.4.5 + workerpool: 6.5.1 + yargs: 17.7.2 transitivePeerDependencies: - supports-color dev: true - /jsii@5.2.2: + /jsii@5.4.15: resolution: { - integrity: sha512-0GufgQqaSSt/cLoMeNSP/Xw7xYIGis5KP8nfGRVP04zVJQ/BUXChxwCfG4LaYN2roxixIPAzdO4fj6W8lv7v3g==, + integrity: sha512-syw2kfZJyb+A6G9ApsmlTBUd/+xMCAQRjml45NSZs6k7+4ifVByOfiIoA05e8zfkn+nOOC+BcTFlHeYubiBHKQ==, } - engines: { node: ">= 16.14.0" } + engines: { node: ">= 18.12.0" } hasBin: true dependencies: - "@jsii/check-node": 1.88.0 - "@jsii/spec": 1.88.0 + "@jsii/check-node": 1.98.0 + "@jsii/spec": 1.98.0 case: 1.6.3 chalk: 4.1.2 downlevel-dts: 0.11.0 fast-deep-equal: 3.1.3 log4js: 6.9.1 - semver: 7.5.4 - semver-intersect: 1.4.0 + semver: 7.6.2 + semver-intersect: 1.5.0 sort-json: 2.0.1 - spdx-license-list: 6.7.0 - typescript: 5.2.2 + spdx-license-list: 6.9.0 + typescript: 5.4.5 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -2330,6 +4580,7 @@ packages: { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, } + dev: true /jsonfile@4.0.0: resolution: @@ -2349,18 +4600,7 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 - - /jsonschema@1.4.1: - resolution: - { - integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==, - } - - /lodash.truncate@4.4.2: - resolution: - { - integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==, - } + dev: true /log4js@6.9.1: resolution: @@ -2394,6 +4634,7 @@ packages: engines: { node: ">=10" } dependencies: yallist: 4.0.0 + dev: true /make-error@1.3.6: resolution: @@ -2435,6 +4676,7 @@ packages: } dependencies: brace-expansion: 1.1.11 + dev: true /minimatch@9.0.3: resolution: @@ -2468,6 +4710,34 @@ packages: } dev: true + /object-inspect@1.13.1: + resolution: + { + integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==, + } + dev: true + + /object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } + dev: true + + /object.assign@4.1.5: + resolution: + { + integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /once@1.4.0: resolution: { @@ -2477,10 +4747,10 @@ packages: wrappy: 1.0.2 dev: true - /oo-ascii-tree@1.88.0: + /oo-ascii-tree@1.98.0: resolution: { - integrity: sha512-A7m3z7XlUD3DnXSYxWmAdKQTIY6+1JzWS0lhaqgPGhj6g7a/odCsV1ctaRnjJljCB3zQBrbp2QHdYTUsD9AXcQ==, + integrity: sha512-+GE7ywhtS6MctbfcO+vZzqIxcFzucZCwmawcwCVo89DxQDakV1JFfFViTXG4A90UzTAsU4tQteGmwDtwOlOXLw==, } engines: { node: ">= 14.17.0" } dev: true @@ -2548,6 +4818,14 @@ packages: engines: { node: ">=8.6" } dev: true + /possible-typed-array-names@1.0.0: + resolution: + { + integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==, + } + engines: { node: ">= 0.4" } + dev: true + /prettier@3.0.3: resolution: { @@ -2557,16 +4835,16 @@ packages: hasBin: true dev: true - /publib@0.2.737: + /publib@0.2.834(@aws-sdk/client-sso-oidc@3.575.0): resolution: { - integrity: sha512-wGNz2o5wZgMqes2qIH6AjnKLG6jEA3O/mqJ6fO3TULSREUY2Xm5jwijUbwEHJuYaNeFK8TEab2y8ybW1oNhqTw==, + integrity: sha512-PEtUqGkkuTquX/Af2ZF61getGFs7o4tkCMEKMNThwDWwsxFkI2JoId2ATZuoLu2p1wGEjHypy6Y+NFeK9cxAJw==, } hasBin: true dependencies: - "@aws-sdk/client-codeartifact": 3.405.0 - "@aws-sdk/credential-providers": 3.405.0 - "@aws-sdk/types": 3.398.0 + "@aws-sdk/client-codeartifact": 3.576.0 + "@aws-sdk/credential-providers": 3.576.0(@aws-sdk/client-sso-oidc@3.575.0) + "@aws-sdk/types": 3.575.0 "@types/fs-extra": 8.1.2 fs-extra: 8.1.0 glob: 10.0.0 @@ -2574,6 +4852,7 @@ packages: shlex: 2.1.2 yargs: 17.7.2 transitivePeerDependencies: + - "@aws-sdk/client-sso-oidc" - aws-crt dev: true @@ -2583,6 +4862,7 @@ packages: integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, } engines: { node: ">=6" } + dev: true /queue-microtask@1.2.3: resolution: @@ -2601,6 +4881,19 @@ packages: resolve: 1.22.4 dev: true + /regexp.prototype.flags@1.5.2: + resolution: + { + integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + /require-directory@2.1.1: resolution: { @@ -2615,6 +4908,7 @@ packages: integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, } engines: { node: ">=0.10.0" } + dev: true /resolve@1.22.4: resolution: @@ -2652,19 +4946,44 @@ packages: queue-microtask: 1.2.3 dev: true - /semver-intersect@1.4.0: + /safe-array-concat@1.1.2: + resolution: + { + integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==, + } + engines: { node: ">=0.4" } + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.0.3: + resolution: + { + integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /semver-intersect@1.5.0: resolution: { - integrity: sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==, + integrity: sha512-BDjWX7yCC0haX4W/zrnV2JaMpVirwaEkGOBmgRQtH++F1N3xl9v7k9H44xfTqwl+yLNNSbMKosoVSTIiJVQ2Pw==, } dependencies: - semver: 5.7.2 + semver: 6.3.1 dev: true - /semver@5.7.2: + /semver@6.3.1: resolution: { - integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, } hasBin: true dev: true @@ -2678,6 +4997,44 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /semver@7.6.2: + resolution: + { + integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==, + } + engines: { node: ">=10" } + hasBin: true + dev: true + + /set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, + } + engines: { node: ">= 0.4" } + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true /shelljs@0.8.5: resolution: @@ -2699,16 +5056,18 @@ packages: } dev: true - /slice-ansi@4.0.0: + /side-channel@1.0.6: resolution: { - integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==, + integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==, } - engines: { node: ">=10" } + engines: { node: ">= 0.4" } dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true /sort-json@2.0.1: resolution: @@ -2722,10 +5081,18 @@ packages: minimist: 1.2.8 dev: true - /spdx-license-list@6.7.0: + /spdx-license-list@6.8.0: resolution: { - integrity: sha512-NFqavuJxNsHdwSy/0PjmUpcc76XwlmHQRPjVVtE62qmSLhKJUnzSvJCkU9nrY6TsChfGU1xqGePriBkNtNRMiA==, + integrity: sha512-5UdM7r9yJ1EvsPQZWfa41AZjLQngl9iMMysm9XBW7Lqhq7aF8cllfqjS+rFCHB8FFMGSM0yFWue2LUV9mR0QzQ==, + } + engines: { node: ">=8" } + dev: true + + /spdx-license-list@6.9.0: + resolution: + { + integrity: sha512-L2jl5vc2j6jxWcNCvcVj/BW9A8yGIG02Dw+IUw0ZxDM70f7Ylf5Hq39appV1BI9yxyWQRpq2TQ1qaXvf+yjkqA==, } engines: { node: ">=8" } dev: true @@ -2770,6 +5137,7 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true /string.prototype.repeat@0.2.0: resolution: @@ -2778,6 +5146,52 @@ packages: } dev: true + /string.prototype.repeat@1.0.0: + resolution: + { + integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, + } + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true + + /string.prototype.trim@1.2.9: + resolution: + { + integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimend@1.0.8: + resolution: + { + integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==, + } + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /strip-ansi@6.0.1: resolution: { @@ -2786,13 +5200,13 @@ packages: engines: { node: ">=8" } dependencies: ansi-regex: 5.0.1 + dev: true /strnum@1.0.5: resolution: { integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, } - dev: true /supports-color@7.2.0: resolution: @@ -2812,19 +5226,6 @@ packages: engines: { node: ">= 0.4" } dev: true - /table@6.8.1: - resolution: - { - integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==, - } - engines: { node: ">=10.0.0" } - dependencies: - ajv: 8.12.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - /to-regex-range@5.0.1: resolution: { @@ -2874,22 +5275,67 @@ packages: { integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, } - dev: true /tslib@2.6.2: resolution: { integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, } + + /typed-array-buffer@1.0.2: + resolution: + { + integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typescript@3.9.10: + /typed-array-byte-length@1.0.1: resolution: { - integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==, + integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==, } - engines: { node: ">=4.2.0" } - hasBin: true + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: + { + integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==, + } + engines: { node: ">= 0.4" } + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.6: + resolution: + { + integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==, + } + engines: { node: ">= 0.4" } + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typescript@5.0.4: @@ -2901,24 +5347,36 @@ packages: hasBin: true dev: true - /typescript@5.2.2: + /typescript@5.4.5: resolution: { - integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==, + integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==, } engines: { node: ">=14.17" } hasBin: true dev: true - /typescript@5.3.0-dev.20230907: + /typescript@5.5.0-dev.20240514: resolution: { - integrity: sha512-8yegC0GyY5ug9184BxLq8fLDt08+g8jRfut0QSraLFoT13c39Z6fVoviDEeqJgbnIGVxzAEiNQLUslpKYCyUsg==, + integrity: sha512-NccALPZlTF/kDNV2Q071Or2T5CcoAHodWjsKseA4LZKfdqufQzebaQlPuZatC8AgHY2cnQJBcKMCHNFWW9ubpA==, } engines: { node: ">=14.17" } hasBin: true dev: true + /unbox-primitive@1.0.2: + resolution: + { + integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==, + } + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + /universalify@0.1.2: resolution: { @@ -2933,6 +5391,7 @@ packages: integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, } engines: { node: ">= 10.0.0" } + dev: true /uri-js@4.4.1: resolution: @@ -2941,14 +5400,14 @@ packages: } dependencies: punycode: 2.3.0 + dev: true - /uuid@8.3.2: + /uuid@9.0.1: resolution: { - integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, + integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, } hasBin: true - dev: true /v8-compile-cache-lib@3.0.1: resolution: @@ -2957,10 +5416,37 @@ packages: } dev: true - /workerpool@6.4.2: + /which-boxed-primitive@1.0.2: + resolution: + { + integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, + } + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.15: + resolution: + { + integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==, + } + engines: { node: ">= 0.4" } + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /workerpool@6.5.1: resolution: { - integrity: sha512-MrDWwemtC4xNV22kbbZDQQQmxNX+yLm790sgYl2wVD3CWnK7LJY1youI/11wHorAjHjK+GEjUxUh74XoPU71uQ==, + integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==, } dev: true @@ -3004,13 +5490,7 @@ packages: { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, } - - /yaml@1.10.2: - resolution: - { - integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, - } - engines: { node: ">= 6" } + dev: true /yargs-parser@20.2.9: resolution: