From 259ac3909b839da05863d8d2eb4c065ea12e8377 Mon Sep 17 00:00:00 2001 From: Henry Lucco Date: Fri, 10 Jan 2025 13:22:13 -0800 Subject: [PATCH] API Storage Provider Support (#539) Abstracted the Azure Blob storage code in `api` into `TypeAgentStorageProvider` to support using s3 or any other storage provider for session storage as well. Note: I do not have the ability to test the Azure Storage Provider, would be prudent to have someone with azure credentials do a test run with blob storage to ensure it is working as expected. --------- Co-authored-by: Steve Lucco --- ts/Dockerfile | 10 +- ts/packages/api/data/config.json | 3 +- ts/packages/api/package.json | 2 + ts/packages/api/src/index.ts | 2 +- ts/packages/api/src/storageProvider.ts | 29 + .../storageProviders/awsStorageProvider.ts | 121 ++ .../storageProviders/azureStorageProvider.ts | 130 ++ ts/packages/api/src/typeAgentServer.ts | 99 +- ts/packages/api/src/webServer.ts | 27 +- ts/pnpm-lock.yaml | 1313 ++++++++++++++++- 10 files changed, 1657 insertions(+), 79 deletions(-) create mode 100644 ts/packages/api/src/storageProvider.ts create mode 100644 ts/packages/api/src/storageProviders/awsStorageProvider.ts create mode 100644 ts/packages/api/src/storageProviders/azureStorageProvider.ts diff --git a/ts/Dockerfile b/ts/Dockerfile index 2115aeaa4..b27726bb0 100644 --- a/ts/Dockerfile +++ b/ts/Dockerfile @@ -52,10 +52,12 @@ COPY --from=build /prod/tools/ /prod/tools/ COPY --from=build /usr/src/app/packages/shell/out/ /prod/shell/out/ WORKDIR /prod/api +COPY .env /prod/api + # dependencies RUN apt-get update RUN apt install -y gnome-keyring -RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash +# RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash ######################################### BLOB STORAGE MOUNT ######################################### ## blobfuse - https://github.com/Azure/azure-storage-fuse/tree/main @@ -77,13 +79,13 @@ EXPOSE 80:3000 # start actions # az login -RUN echo az login --identity >> start.sh +# RUN echo az login --identity >> start.sh ## mount blob storage locally #RUN echo blobfuse2 mount /mnt/blob --config-file=mount-blobfuse.yaml >> start.sh # run getKeys -RUN echo node ../tools/scripts/getKeys.mjs >> start.sh +# RUN echo node ../tools/scripts/getKeys.mjs >> start.sh # start API server RUN echo pnpm start >> start.sh # run start script -CMD bash start.sh \ No newline at end of file +CMD bash start.sh diff --git a/ts/packages/api/data/config.json b/ts/packages/api/data/config.json index 54566b96b..9a9d79321 100644 --- a/ts/packages/api/data/config.json +++ b/ts/packages/api/data/config.json @@ -2,5 +2,6 @@ "wwwroot": "../shell/out/renderer", "port": 3000, "broadcast": true, - "blobBackupEnabled": true + "blobBackupEnabled": true, + "storageProvider": "aws" } diff --git a/ts/packages/api/package.json b/ts/packages/api/package.json index 4763f251a..0b7d1dc98 100644 --- a/ts/packages/api/package.json +++ b/ts/packages/api/package.json @@ -24,6 +24,8 @@ "tsc": "tsc -b" }, "dependencies": { + "@aws-sdk/client-s3": "^3.723.0", + "@aws-sdk/lib-storage": "^3.726.0", "@azure/identity": "^4.2.1", "@azure/storage-blob": "^12.26.0", "@typeagent/agent-sdk": "workspace:*", diff --git a/ts/packages/api/src/index.ts b/ts/packages/api/src/index.ts index d4b09dae7..c5f345abf 100644 --- a/ts/packages/api/src/index.ts +++ b/ts/packages/api/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) Microsoft Corporation and Henry Lucco. // Licensed under the MIT License. import { TypeAgentServer } from "./typeAgentServer.js"; diff --git a/ts/packages/api/src/storageProvider.ts b/ts/packages/api/src/storageProvider.ts new file mode 100644 index 000000000..0306cc4d8 --- /dev/null +++ b/ts/packages/api/src/storageProvider.ts @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation and Henry Lucco. +// Licensed under the MIT License. + +export interface TypeAgentStorageProvider { + /** + * Lists remote files (possibly under a prefix or "folder path" if the + * provider supports a hierarchical structure). + * + * @param prefix Optional prefix to filter the remote file listing. + * @returns An array of file paths/names in the remote store. + */ + listRemoteFiles(prefix?: string): Promise; + + /** + * Downloads a remote file from the storage provider to a local path. + * + * @param remotePath The path or key of the file in the remote store. + * @param localPath The local file path where the file will be saved. + */ + downloadFile(remotePath: string, localPath: string): Promise; + + /** + * Uploads a local file to the storage provider. + * + * @param localPath The path of the local file to upload. + * @param remotePath The path or key of the file in the remote store. + */ + uploadFile(localPath: string, remotePath: string): Promise; +} diff --git a/ts/packages/api/src/storageProviders/awsStorageProvider.ts b/ts/packages/api/src/storageProviders/awsStorageProvider.ts new file mode 100644 index 000000000..fec13999b --- /dev/null +++ b/ts/packages/api/src/storageProviders/awsStorageProvider.ts @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation and Henry Lucco. +// Licensed under the MIT License. + +import { + GetObjectCommand, + ListObjectsV2Command, + S3Client, +} from "@aws-sdk/client-s3"; +import { Upload } from "@aws-sdk/lib-storage"; +import { TypeAgentStorageProvider } from "../storageProvider.js"; +import fs from "node:fs"; +import path from "node:path"; +import { Readable } from "node:stream"; + +export class AWSStorageProvider implements TypeAgentStorageProvider { + private s3Client: S3Client; + private bucketName: string; + + constructor() { + if (!process.env.AWS_S3_BUCKET_NAME) { + throw new Error("AWS_S3_BUCKET_NAME not set"); + } + + if (!process.env.AWS_S3_REGION) { + throw new Error("AWS_S3_REGION not set"); + } + + if (!process.env.AWS_ACCESS_KEY_ID) { + throw new Error("AWS_ACCESS_KEY_ID not set"); + } + + if (!process.env.AWS_SECRET_ACCESS_KEY) { + throw new Error("AWS_SECRET_ACCESS_KEY not set"); + } + + this.bucketName = process.env.AWS_S3_BUCKET_NAME; + this.s3Client = new S3Client({ + region: process.env.AWS_S3_REGION, + }); + + console.log("AWSStorageProvider initialized"); + } + + async listRemoteFiles(prefix?: string): Promise { + const results: string[] = []; + let continueToken: string | undefined = undefined; + + do { + const command = new ListObjectsV2Command({ + Bucket: this.bucketName, + Prefix: prefix, + ContinuationToken: continueToken, + }); + const response = await this.s3Client.send(command); + + if (response.Contents) { + for (const content of response.Contents) { + if (content.Key) { + results.push(content.Key); + } + } + } + } while (continueToken); + + return results; + } + + async downloadFile(remotePath: string, localPath: string): Promise { + const command = new GetObjectCommand({ + Bucket: this.bucketName, + Key: remotePath, + }); + + const commandResponse = await this.s3Client.send(command); + const bodyStream = commandResponse.Body; + + if (bodyStream) { + const dirName = path.dirname(localPath); + if (!fs.existsSync(dirName)) { + fs.mkdirSync(dirName, { recursive: true }); + } + + const writeStream = fs.createWriteStream(localPath); + + await new Promise((resolve, reject) => { + (bodyStream as Readable) + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", (err: Error) => { + console.log("Error downloading file: ", err); + reject(err); + }); + }); + } + } + + async uploadFile(localPath: string, remotePath: string): Promise { + const resolvedPath = path.resolve(localPath); + if (!fs.existsSync(resolvedPath)) { + throw new Error(`File does not actually exist at ${resolvedPath}`); + } + + const fileStream = fs.createReadStream(localPath); + + const upload = new Upload({ + client: this.s3Client, + params: { + Bucket: this.bucketName, + Key: remotePath, + Body: fileStream, + }, + }); + + try { + await upload.done(); + // console.log("upload complete: ", result); + } catch (e) { + console.log("error", e); + } + } +} diff --git a/ts/packages/api/src/storageProviders/azureStorageProvider.ts b/ts/packages/api/src/storageProviders/azureStorageProvider.ts new file mode 100644 index 000000000..0654a1c42 --- /dev/null +++ b/ts/packages/api/src/storageProviders/azureStorageProvider.ts @@ -0,0 +1,130 @@ +// Copyright (c) Microsoft Corporation and Henry Lucco. +// Licensed under the MIT License. + +import { DefaultAzureCredential } from "@azure/identity"; +import { TypeAgentStorageProvider } from "../storageProvider.js"; +import { getEnvSetting, openai } from "aiclient"; +import { env } from "node:process"; +import { + BlobServiceClient, + BlockBlobClient, + ContainerClient, + ContainerListBlobsOptions, +} from "@azure/storage-blob"; +import path from "node:path"; +import fs from "node:fs"; +import { getUserDataDir } from "agent-dispatcher"; + +export class AzureStorageProvider implements TypeAgentStorageProvider { + private containerName: string | undefined; + private storageAccount: string | undefined; + private accountURL: string; + private blobServiceClient: BlobServiceClient | undefined; + + constructor() { + this.storageAccount = getEnvSetting( + env, + openai.EnvVars.AZURE_STORAGE_ACCOUNT, + undefined, + undefined, + ); + + this.containerName = getEnvSetting( + env, + openai.EnvVars.AZURE_STORAGE_CONTAINER, + undefined, + "", + ); + + // blob storage config + this.accountURL = `https://${this.storageAccount}.blob.core.windows.net`; + this.blobServiceClient = new BlobServiceClient( + this.accountURL, + new DefaultAzureCredential(), + ); + } + + async listRemoteFiles(prefix?: string): Promise { + const results: string[] = []; + + if (!this.blobServiceClient) { + return results; + } + + const containerClient: ContainerClient = + this.blobServiceClient.getContainerClient(this.containerName!!); + + // Some options for filtering results + const listOptions: ContainerListBlobsOptions = { + includeMetadata: false, + includeSnapshots: false, + prefix: "", // Filter results by blob name prefix + }; + + const maxPageSize = 100; + + // List blobs with an optional prefix, page by page if needed + for await (const response of containerClient + .listBlobsFlat(listOptions) + .byPage({ maxPageSize })) { + if (response.segment.blobItems) { + for (const blob of response.segment.blobItems) { + /* + const blobClient = containerClient.getBlobClient(blob.name); + const filePath = path.join(getUserDataDir(), blob.name); + let dir = path.dirname(filePath); + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + // only download the file if it doesn't already exist + if (!fs.existsSync(filePath)) { + await blobClient.downloadToFile(filePath, 0); + }*/ + + // may require some tweaking with specifics of + // how blob storage handles paths + results.push(blob.name); + } + } + } + + return results; + } + + async downloadFile(remotePath: string, localPath: string): Promise { + if (!this.blobServiceClient) { + return; + } + + const containerClient: ContainerClient = + this.blobServiceClient.getContainerClient(this.containerName!!); + + const blockBlobClient = containerClient.getBlockBlobClient(remotePath); + + // Ensure local directory structure exists + const dirName = path.dirname(localPath); + if (!fs.existsSync(dirName)) { + fs.mkdirSync(dirName, { recursive: true }); + } + + // Download the blob to the specified local file + await blockBlobClient.downloadToFile(localPath); + } + + async uploadFile(localPath: string, fileName: string): Promise { + if (!this.blobServiceClient) { + return; + } + + const containerClient: ContainerClient = + this.blobServiceClient.getContainerClient(this.containerName!!); + + let blobName = fileName.replace(getUserDataDir(), ""); + const blockBlobClient: BlockBlobClient = + containerClient.getBlockBlobClient(blobName!!); + + await blockBlobClient.uploadFile(localPath); + } +} diff --git a/ts/packages/api/src/typeAgentServer.ts b/ts/packages/api/src/typeAgentServer.ts index f29b92a7d..5e1161ad0 100644 --- a/ts/packages/api/src/typeAgentServer.ts +++ b/ts/packages/api/src/typeAgentServer.ts @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. +// Copyright (c) Microsoft Corporation and Henry Lucco. // Licensed under the MIT License. import dotenv from "dotenv"; @@ -11,58 +11,58 @@ import { import { WebAPIClientIO } from "./webClientIO.js"; import { TypeAgentAPIWebSocketServer } from "./webSocketServer.js"; import { getDefaultAppAgentProviders } from "agent-dispatcher/internal"; -import { env } from "node:process"; import { - BlobServiceClient, - BlockBlobClient, + // BlobServiceClient, + // BlockBlobClient, ContainerClient, ContainerListBlobsOptions, } from "@azure/storage-blob"; -import { DefaultAzureCredential } from "@azure/identity"; -import { getEnvSetting, openai } from "aiclient"; +// import { DefaultAzureCredential } from "@azure/identity"; import { StopWatch } from "telemetry"; import path from "node:path"; import fs from "node:fs"; import { isDirectoryPath } from "typeagent"; +import { TypeAgentStorageProvider } from "./storageProvider.js"; +import { AzureStorageProvider } from "./storageProviders/azureStorageProvider.js"; +import { AWSStorageProvider } from "./storageProviders/awsStorageProvider.js"; export class TypeAgentServer { private dispatcher: Dispatcher | undefined; private webClientIO: WebAPIClientIO | undefined; private webSocketServer: TypeAgentAPIWebSocketServer | undefined; private webServer: TypeAgentAPIWebServer | undefined; - private storageAccount: string | undefined; - private containerName: string | undefined; - private accountURL: string; private fileWriteDebouncer: Map = new Map(); + private storageProvider: TypeAgentStorageProvider | undefined; + private config: TypeAgentAPIServerConfig; constructor(private envPath: string) { // typeAgent config dotenv.config({ path: this.envPath }); - // blob storage config - this.storageAccount = getEnvSetting( - env, - openai.EnvVars.AZURE_STORAGE_ACCOUNT, - undefined, - undefined, - ); - this.containerName = getEnvSetting( - env, - openai.EnvVars.AZURE_STORAGE_CONTAINER, - undefined, - "", - ); - this.accountURL = `https://${this.storageAccount}.blob.core.windows.net`; + // web server config + this.config = JSON.parse(readFileSync("data/config.json").toString()); + + const storageProviderMap = { + azure: AzureStorageProvider, + aws: AWSStorageProvider, + }; + + // setting storage provider if "provided" lol + if (this.config.blobBackupEnabled && this.config.storageProvider) { + this.storageProvider = new storageProviderMap[ + this.config.storageProvider + ](); + } } async start() { - // web server config - const config: TypeAgentAPIServerConfig = JSON.parse( - readFileSync("data/config.json").toString(), - ); - // restore & enable session backup? - if (config.blobBackupEnabled) { + if (this.config.blobBackupEnabled && this.storageProvider) { + const sw = new StopWatch(); + await this.syncFromProvider(); + this.startLocalStorageBackup(); + sw.stop("Downloaded Session Backup"); + /* if ( this.storageAccount !== undefined && this.storageAccount.length > 0 && @@ -82,6 +82,7 @@ export class TypeAgentServer { `Blob backup enabled but NOT configured. Missing env var ${openai.EnvVars.AZURE_STORAGE_ACCOUNT}.`, ); } + */ } // dispatcher @@ -96,7 +97,7 @@ export class TypeAgentServer { }); // web server - this.webServer = new TypeAgentAPIWebServer(config); + this.webServer = new TypeAgentAPIWebServer(this.config); this.webServer.start(); // websocket server @@ -116,6 +117,7 @@ export class TypeAgentServer { /** * Downloads from session data blob storage to the local session store */ + /* async syncBlobStorage() { const blobServiceClient = new BlobServiceClient( this.accountURL, @@ -126,6 +128,29 @@ export class TypeAgentServer { blobServiceClient.getContainerClient(this.containerName!!); await this.findBlobs(containerClient); + }*/ + + async syncFromProvider() { + if (!this.storageProvider) { + console.log("No storage provider found"); + return; + } + const remoteFiles = await this.storageProvider.listRemoteFiles(); + for (const remoteFile of remoteFiles) { + try { + console.log("Syncing file: ", remoteFile); + const localPath = path.join(getUserDataDir(), remoteFile); + if (!fs.existsSync(localPath)) { + await this.storageProvider.downloadFile( + remoteFile, + localPath, + ); + console.log(`Downloaded ${remoteFile} to ${localPath}`); + } + } catch (e) { + console.log("Error syncing file: ", remoteFile, e); + } + } } /** @@ -220,6 +245,8 @@ export class TypeAgentServer { const debounceCount: number = this.fileWriteDebouncer.get(fileName)!!; if (debounceCount == 0) { + // blob storage specific starts here + /* const blobServiceClient = new BlobServiceClient( this.accountURL, new DefaultAzureCredential(), @@ -233,14 +260,22 @@ export class TypeAgentServer { // Create blob client from container client const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName!!); + */ try { const localPath: string = path.join( getUserDataDir(), fileName, ); - await blockBlobClient.uploadFile(localPath); - console.log(`Done uploading ${fileName} to ${blobName}`); + // await blockBlobClient.uploadFile(localPath); + if (!this.storageProvider) { + console.log( + `Failed to upload ${fileName} to provider, no storage provider found`, + ); + return; + } + await this.storageProvider.uploadFile(localPath, fileName); + // console.log(`Done uploading ${fileName} to ${blobName}`); } catch (e) { console.log(e); } diff --git a/ts/packages/api/src/webServer.ts b/ts/packages/api/src/webServer.ts index ccad825ae..ecd85f545 100644 --- a/ts/packages/api/src/webServer.ts +++ b/ts/packages/api/src/webServer.ts @@ -15,6 +15,7 @@ export type TypeAgentAPIServerConfig = { port: number; broadcast: boolean; blobBackupEnabled: boolean; + storageProvider?: "azure" | "aws"; }; export class TypeAgentAPIWebServer { @@ -118,20 +119,20 @@ export class TypeAgentAPIWebServer { }); // Send the HTML page with headers - response.end(` - - - - - - HTTP Headers - - + response.end(` + + + + + + HTTP Headers + +

Client IP: ${request.socket.remoteAddress}

-

HTTP Headers

-
${headersJson}
- - +

HTTP Headers

+
${headersJson}
+ + `); console.warn(`Served HTTP headers for ${request.url}`); diff --git a/ts/pnpm-lock.yaml b/ts/pnpm-lock.yaml index ee8f3ac2d..7a42611d1 100644 --- a/ts/pnpm-lock.yaml +++ b/ts/pnpm-lock.yaml @@ -1226,6 +1226,12 @@ importers: packages/api: dependencies: + '@aws-sdk/client-s3': + specifier: ^3.723.0 + version: 3.723.0 + '@aws-sdk/lib-storage': + specifier: ^3.726.0 + version: 3.726.0(@aws-sdk/client-s3@3.723.0) '@azure/identity': specifier: ^4.2.1 version: 4.2.1 @@ -2129,6 +2135,175 @@ packages: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.723.0': + resolution: {integrity: sha512-uJkSBWeAbEORApCSc8ZlD8nmmJVZnklauSR+GLnG19ZiHQl3ib6IzT4zdnMHrrIXqVttwkyC8eT703ZUDVaacw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso-oidc@3.723.0': + resolution: {integrity: sha512-9IH90m4bnHogBctVna2FnXaIGVORncfdxcqeEIovOxjIJJyHDmEAtA7B91dAM4sruddTbVzOYnqfPVst3odCbA==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.723.0 + + '@aws-sdk/client-sso@3.723.0': + resolution: {integrity: sha512-r1ddZDb8yPmdofX1gQ4m8oqKozgkgVONLlAuSprGObbyMy8bYt1Psxu+GjnwMmgVu3vlF069PHyW1ndrBiL1zA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sts@3.723.0': + resolution: {integrity: sha512-YyN8x4MI/jMb4LpHsLf+VYqvbColMK8aZeGWVk2fTFsmt8lpTYGaGC1yybSwGX42mZ4W8ucu8SAYSbUraJZEjA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.723.0': + resolution: {integrity: sha512-UraXNmvqj3vScSsTkjMwQkhei30BhXlW5WxX6JacMKVtl95c7z0qOXquTWeTalYkFfulfdirUhvSZrl+hcyqTw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.723.0': + resolution: {integrity: sha512-OuH2yULYUHTVDUotBoP/9AEUIJPn81GQ/YBtZLoo2QyezRJ2QiO/1epVtbJlhNZRwXrToLEDmQGA2QfC8c7pbA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.723.0': + resolution: {integrity: sha512-DTsKC6xo/kz/ZSs1IcdbQMTgiYbpGTGEd83kngFc1bzmw7AmK92DBZKNZpumf8R/UfSpTcj9zzUUmrWz1kD0eQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.723.0': + resolution: {integrity: sha512-fWRLksuSG851e7Iu+ltMrQTM7C/5iI9OkxAmCYblcCetAzjTRmMB2arku0Z83D8edIZEQtOJMt5oQ9KNg43pzg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.723.0 + + '@aws-sdk/credential-provider-node@3.723.0': + resolution: {integrity: sha512-OyLHt+aY+rkuRejigcxviS5RLUBcqbxhDTSNfP8dp9I+1SP610qRLpTIROvtKwXZssFcATpPfgikFtVYRrihXQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.723.0': + resolution: {integrity: sha512-fgupvUjz1+jeoCBA7GMv0L6xEk92IN6VdF4YcFhsgRHlHvNgm7ayaoKQg7pz2JAAhG/3jPX6fp0ASNy+xOhmPA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.723.0': + resolution: {integrity: sha512-laCnxrk0pgUegU+ib6rj1/Uv51wei+cH8crvBJddybc8EDn7Qht61tCvBwf3o33qUDC+ZWZZewlpSebf+J+tBw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.723.0': + resolution: {integrity: sha512-tl7pojbFbr3qLcOE6xWaNCf1zEfZrIdSJtOPeSXfV/thFMMAvIjgf3YN6Zo1a6cxGee8zrV/C8PgOH33n+Ev/A==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.723.0 + + '@aws-sdk/lib-storage@3.726.0': + resolution: {integrity: sha512-EWtwnzkQWEDuLKoh3gfcXNO6G8w4RzYAztrVZOBoZxjbv88+Mjdj+hrvhW9gmiG8I4Ph+MXAmzMIQi0VolKsUw==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-s3': ^3.726.0 + + '@aws-sdk/middleware-bucket-endpoint@3.723.0': + resolution: {integrity: sha512-OmKSXwSlXyW+zg+xq4hUf7V4VF5/fa4LHu1JzeBlomrKX3/NnqhnJn7760GXoDr16AT+dP7nvv35Ofp91umEAg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-expect-continue@3.723.0': + resolution: {integrity: sha512-w/O0EkIzkiqvGu7U8Ke7tue0V0HYM5dZQrz6nVU+R8T2LddWJ+njEIHU4Wh8aHPLQXdZA5NQumv0xLPdEutykw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.723.0': + resolution: {integrity: sha512-JY76mrUCLa0FHeMZp8X9+KK6uEuZaRZaQrlgq6zkXX/3udukH0T3YdFC+Y9uw5ddbiwZ5+KwgmlhnPpiXKfP4g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.723.0': + resolution: {integrity: sha512-LLVzLvk299pd7v4jN9yOSaWDZDfH0SnBPb6q+FDPaOCMGBY8kuwQso7e/ozIKSmZHRMGO3IZrflasHM+rI+2YQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-location-constraint@3.723.0': + resolution: {integrity: sha512-inp9tyrdRWjGOMu1rzli8i2gTo0P4X6L7nNRXNTKfyPNZcBimZ4H0H1B671JofSI5isaklVy5r4pvv2VjjLSHw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.723.0': + resolution: {integrity: sha512-chASQfDG5NJ8s5smydOEnNK7N0gDMyuPbx7dYYcm1t/PKtnVfvWF+DHCTrRC2Ej76gLJVCVizlAJKM8v8Kg3cg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.723.0': + resolution: {integrity: sha512-7usZMtoynT9/jxL/rkuDOFQ0C2mhXl4yCm67Rg7GNTstl67u7w5WN1aIRImMeztaKlw8ExjoTyo6WTs1Kceh7A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.723.0': + resolution: {integrity: sha512-wfjOvNJVp8LDWhq4wO5jtSMb8Vgf4tNlR7QTEQfoYc6AGU3WlK5xyUQcpfcpwytEhQTN9u0cJLQpSyXDO+qSCw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-ssec@3.723.0': + resolution: {integrity: sha512-Bs+8RAeSMik6ZYCGSDJzJieGsDDh2fRbh1HQG94T8kpwBXVxMYihm6e9Xp2cyl+w9fyyCnh0IdCKChP/DvrdhA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.723.0': + resolution: {integrity: sha512-AY5H2vD3IRElplBO4DCyRMNnOG/4/cb0tsHyLe1HJy0hdUF6eY5z/VVjKJoKbbDk7ui9euyOBWslXxDyLmyPWg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.723.0': + resolution: {integrity: sha512-tGF/Cvch3uQjZIj34LY2mg8M2Dr4kYG8VU8Yd0dFnB1ybOEOveIK/9ypUo9ycZpB9oO6q01KRe5ijBaxNueUQg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.723.0': + resolution: {integrity: sha512-lJlVAa5Sl589qO8lwMLVUtnlF1Q7I+6k1Iomv2goY9d1bRl4q2N5Pit2qJVr2AMW0sceQXeh23i2a/CKOqVAdg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.723.0': + resolution: {integrity: sha512-hniWi1x4JHVwKElANh9afKIMUhAutHVBRD8zo6usr0PAoj+Waf220+1ULS74GXtLXAPCiNXl5Og+PHA7xT8ElQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.723.0 + + '@aws-sdk/types@3.723.0': + resolution: {integrity: sha512-LmK3kwiMZG1y5g3LGihT9mNkeNOmwEyPk6HGcJqh0wOSV4QpWoKu2epyKE4MLQNUUlz2kOVbVbOrwmI6ZcteuA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-arn-parser@3.723.0': + resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.723.0': + resolution: {integrity: sha512-vR1ZfAUvrTtdA1Q78QxgR8TFgi2gzk+N4EmNjbyR5hHmeOXuaKRdhbNQAzLPYVe1aNUpoiy9cl8mWkg9SrNHBw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.723.0': + resolution: {integrity: sha512-Wh9I6j2jLhNFq6fmXydIpqD1WyQLyTfSxjW9B+PXSnPyk3jtQW8AKQur7p97rO8LAUzVI0bv8kb3ZzDEVbquIg==} + + '@aws-sdk/util-user-agent-node@3.723.0': + resolution: {integrity: sha512-uCtW5sGq8jCwA9w57TvVRIwNnPbSDD1lJaTIgotf7Jit2bTrYR64thgMy/drL5yU5aHOdFIQljqn/5aDXLtTJw==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.723.0': + resolution: {integrity: sha512-5xK2SqGU1mzzsOeemy7cy3fGKxR1sEpUs4pEiIjaT0OIvU+fZaDVUEYWOqsgns6wI90XZEQJlXtI8uAHX/do5Q==} + engines: {node: '>=18.0.0'} + '@azure-rest/core-client@1.4.0': resolution: {integrity: sha512-ozTDPBVUDR5eOnMIwhggbnVmOrka4fXCs8n8mvUo4WLLc38kki6bAOByDoVZZPz/pZy2jMt2kwfpvy/UjALj6w==} engines: {node: '>=18.0.0'} @@ -3379,6 +3554,218 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@smithy/abort-controller@4.0.0': + resolution: {integrity: sha512-xFNL1ZfluscKiVI0qlPEnu7pL1UgNNIzQdjTPkaO7JCJtIkbArPYNtqbxohuNaQdksJ01Tn1wLbDA5oIp62P8w==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader-native@4.0.0': + resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader@5.0.0': + resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.0.0': + resolution: {integrity: sha512-29pIDlUY/a9+ChJPAarPiD9cU8fBtBh0wFnmnhj7j5AhgMzc+uyXdfzmziH6xx2jzw54waSP3HfnFkTANZuPYA==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.0.0': + resolution: {integrity: sha512-pKaas7RWvPljJ8uByCeBa10rtbVJCy4N/Fr7OSPxFezcyG0SQuXWnESZqzXj7m2+A+kPzG6fKyP4wrKidl2Ikg==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.0.0': + resolution: {integrity: sha512-+hTShyZHiq2AVFOxJja3k6O17DKU6TaZbwr2y1OH5HQtUw2a+7O3mMR+10LVmc39ef72SAj+uFX0IW9rJGaLQQ==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@4.0.0': + resolution: {integrity: sha512-YvKUUOo3qehqOxNrkax3YKXF1v0ff475FhDgbBmF8Bo0oOOpsXZyltjQnwBzIeTYo446ZPV85KM3kY4YoxUNOg==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.0.0': + resolution: {integrity: sha512-YRwsVPJU/DN1VshH8tKs4CxY66HLhmDSw6oZDM2LVIgHODsqpJBcRdEfcnb97ULmgyFrWxTjL9UXpyKPuJXQRA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.0.0': + resolution: {integrity: sha512-OZ/aK9LHsZch0VZ6bnf+dPD80kJripnZnkc36QNymnej49VkHJLSNJxsM0pwt53FA6+fUYYMMT0DVDTH1Msq2g==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.0.0': + resolution: {integrity: sha512-10b4F+zXbzxZHKuP+m2st/C+rEGK7FUut1dNSRw6DQCCfaTUecJGCoHPCmk2CRvuMTzunVpS1BKLMk839318VQ==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.0.0': + resolution: {integrity: sha512-HEhZpf731J3oFYJtaKO3dnV6stIjA+lJwXuXGu/WbSgicDWGAOITUwTt9ynldEFsnFkNu9b/C4ebXnJA16xSCA==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.0.0': + resolution: {integrity: sha512-jUEq+4056uqsDLRqQb1fm48rrSMBYcBxVvODfiP37ORcV5n9xWJQsINWcIffyYxWTM5K0Y/GOfhSQGDtWpAPpQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-blob-browser@4.0.0': + resolution: {integrity: sha512-JBXNC2YCDlm9uqP/eQJbK6auahAaq4HndJC2PURxWPRUDjbXDRJS5Npfi+7zSxKOSOWxXCG/3dLE5D8znI9l/w==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.0.0': + resolution: {integrity: sha512-25OxGYGnG3JPEOTk4iFE03bfmoC6GXUQ4L13z4cNdsS3mkncH22AGSDRfKwwEqutNUxXQZWVy9f72Fm59C9qlg==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-stream-node@4.0.0': + resolution: {integrity: sha512-MRgYnr9atik1c02mdgjjJkNK5A8IvRRlpa/zOdA8PxmQtBCwjODKzobyI166uamxrL20wg7vuKoVSAjQU4IXfw==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.0.0': + resolution: {integrity: sha512-0GTyet02HX/sPctEhOExY+3HI7hwkVwOoJg0XnItTJ+Xw7JMuL9FOxALTmKVIV6+wg0kF6veLeg72hVSbD9UCw==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + + '@smithy/md5-js@4.0.0': + resolution: {integrity: sha512-NUjbK+M1RNd0J/mM3eh4Yw5SfUrJBsIAea/H5dvc8tirxWFHFDUHJ/CK40/vtY3niiYnygWjZZ+ISydray6Raw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.0.0': + resolution: {integrity: sha512-nM1RJqLwkSCidumGK8WwNEZ0a0D/4LkwqdPna+QmHrdPoAK6WGLyZFosdMpsAW1OIbDLWGa+r37Mo4Vth4S4kQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.0.0': + resolution: {integrity: sha512-/f6z5SqUurmqemhBZNhM0c+C7QW0AY/zJpic//sbdu26q98HSPAI/xvzStjYq+UhtWeAe/jaX6gamdL/2r3W1g==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.0.0': + resolution: {integrity: sha512-K6tsFp3Ik44H3694a+LWoXLV8mqy8zn6/vTw2feU72MaIzi51EHMVNNxxpL6e2GI6oxw8FFRGWgGn8+wQRrHZQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.0.0': + resolution: {integrity: sha512-aW4Zo8Cm988RCvhysErzqrQ4YPKgZFhajvgPoZnsWIDaZfT419J17Ahr13Lul3kqGad2dCz7YOrXd7r+UAEj/w==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.0.0': + resolution: {integrity: sha512-4NFaX88RmgVrCyJv/3RsSdqMwxzI/EQa8nvhUDVxmLUMRS2JUdHnliD6IwKuqIwIzz+E1aZK3EhSHUM4HXp3ww==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.0.0': + resolution: {integrity: sha512-Crp9rg1ewjqgM2i7pWSpNhfbBa0usyKGDVQLEXTOpu6trFqq3BFLLCgbCE1S18h6mxqKnOqUONq3nWOxUk75XA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.0.0': + resolution: {integrity: sha512-WvumtEaFyxaI95zmj6eYlF/vCFCKNyru3P/UUHCUS9BjvajUtNckH2cY3bBfi+qqMPX5gha4g26lcOlE/wPz/Q==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.0.0': + resolution: {integrity: sha512-AJSvY1k3SdM0stGrIjL8/FIjXO7X9I7KkznXDmr76RGz+yvaDHLsLm2hSHyzAlmwEQnHaafSU2dwaV0JcnR/4w==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.0.0': + resolution: {integrity: sha512-laAcIHWq9GQ5VdAS71DUrCj5HUHZ/89Ee+HRTLhFR5/E3toBlnZfPG+kqBajwfEB5aSdRuKslfzl5Dzrn3pr8A==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.0.0': + resolution: {integrity: sha512-kMqPDRf+/hwm+Dmk8AQCaYTJxNWWpNdJJteeMm0jwDbmRDqSqHQ7oLEVzvOnbWJu1poVtOhv6v7jsbyx9JASsw==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.0': + resolution: {integrity: sha512-SbogL1PNEmm28ya0eK2S0EZEbYwe0qpaqSGrODm+uYS6dQ7pekPLVNXjBRuuLIAT26ZF2wTsp6X7AVRBNZd8qw==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.0': + resolution: {integrity: sha512-hIZreT6aXSG0PK/psT1S+kfeGTnYnRRlf7rU3yDmH/crSVjTbS/5h5w2J7eO2ODrQb3xfhJcYxQBREdwsZk6TA==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.0': + resolution: {integrity: sha512-Ktupe8msp2GPaKKVfiz3NNUNnslJiGGRoVh3BDpm/RChkQ5INQpqmTc2taE0XChNYumNynLfb3keekIPaiaZeg==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.0.0': + resolution: {integrity: sha512-zqcOR1sZTuoA6K3PBNwzu4YgT1pmIwz47tYpgaJjBTfGUIMtcjUaXKtuSKEScdv+0wx45/PbXz0//hk80fky3w==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.0.0': + resolution: {integrity: sha512-AgcZ6B+JuqArYioAbaYrCpTCjYsD3/1hPSXntbN2ipsfc4hE+72RFZevUPYgsKxpy3G+QxuLfqm11i3+oX4oSA==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.0.0': + resolution: {integrity: sha512-aNwIGSOgDOhtTRY/rrn2aeuQeKw/IFrQ998yK5l6Ah853WeWIEmFPs/EO4OpfADEdcK+igWnZytm/oUgkLgUYg==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.0': + resolution: {integrity: sha512-2iPpuLoH0hCKpLtqVgilHtpPKsmHihbkwBm3h3RPuEctdmuiOlFRZ2ZI8IHSwl0o4ff5IdyyJ0yu/2tS9KpUug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.0': + resolution: {integrity: sha512-7wqsXkzaJkpSqV+Ca95pN9yQutXvhaKeCxGGmjWnRGXY1fW/yR7wr1ouNnUYCJuTS8MvmB61xp5Qdj8YMgIA2Q==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.0': + resolution: {integrity: sha512-P8VK885kiRT6TEtvcQvz+L/+xIhrDhCmM664ToUtrshFSBhwGYaJWlQNAH9fXlMhwnNvR+tmh1KngKJIgQP6bw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.0': + resolution: {integrity: sha512-kyOKbkg77lsIVN2jC08uEWm3s16eK1YdVDyi/nKeBDbUnjR30dmTEga79E5tiu5OEgTAdngNswA9V+L6xa65sA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.0.0': + resolution: {integrity: sha512-ncuvK6ekpDqtASHg7jx3d3nrkD2BsTzUmeVgvtepuHGxtySY8qUlb4SiNRdxHYcv3pL2SwdXs70RwKBU0edW5w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.0': + resolution: {integrity: sha512-64WFoC19NVuHh3HQO2QbGw+n6GzQ6VH/drxwXLOU3GDLKxUUzIR9XNm9aTVqh8/7R+y+DgITiv5LpX5XdOy73A==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.0.0': + resolution: {integrity: sha512-ctcLq8Ogi2FQuGy2RxJXGGrozhFEb4p9FawB5SpTNAkNQWbNHcwrGcVSVI3FtdQtkNAINLiEdMnrx+UN/mafvw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.0.1': + resolution: {integrity: sha512-PiLI5OMSDOw0IyA+lB8Ta0CIgaJuIyXE97Khvrk1G1ab71WbMTruzLKP9j3nS6QJScGirkUVN9sTOhZHU8q3OQ==} + engines: {node: '>=18.0.0'} + '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -4114,6 +4501,9 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -4177,6 +4567,9 @@ packages: buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -5261,6 +5654,10 @@ packages: fast-levenshtein@3.0.0: resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + fast-xml-parser@4.5.0: resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==} hasBin: true @@ -8500,6 +8897,524 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.723.0 + tslib: 2.8.1 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.723.0 + tslib: 2.8.1 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.723.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-s3@3.723.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.723.0(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/client-sts': 3.723.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/middleware-bucket-endpoint': 3.723.0 + '@aws-sdk/middleware-expect-continue': 3.723.0 + '@aws-sdk/middleware-flexible-checksums': 3.723.0 + '@aws-sdk/middleware-host-header': 3.723.0 + '@aws-sdk/middleware-location-constraint': 3.723.0 + '@aws-sdk/middleware-logger': 3.723.0 + '@aws-sdk/middleware-recursion-detection': 3.723.0 + '@aws-sdk/middleware-sdk-s3': 3.723.0 + '@aws-sdk/middleware-ssec': 3.723.0 + '@aws-sdk/middleware-user-agent': 3.723.0 + '@aws-sdk/region-config-resolver': 3.723.0 + '@aws-sdk/signature-v4-multi-region': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.723.0 + '@aws-sdk/util-user-agent-browser': 3.723.0 + '@aws-sdk/util-user-agent-node': 3.723.0 + '@aws-sdk/xml-builder': 3.723.0 + '@smithy/config-resolver': 4.0.0 + '@smithy/core': 3.0.0 + '@smithy/eventstream-serde-browser': 4.0.0 + '@smithy/eventstream-serde-config-resolver': 4.0.0 + '@smithy/eventstream-serde-node': 4.0.0 + '@smithy/fetch-http-handler': 5.0.0 + '@smithy/hash-blob-browser': 4.0.0 + '@smithy/hash-node': 4.0.0 + '@smithy/hash-stream-node': 4.0.0 + '@smithy/invalid-dependency': 4.0.0 + '@smithy/md5-js': 4.0.0 + '@smithy/middleware-content-length': 4.0.0 + '@smithy/middleware-endpoint': 4.0.0 + '@smithy/middleware-retry': 4.0.0 + '@smithy/middleware-serde': 4.0.0 + '@smithy/middleware-stack': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/node-http-handler': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/url-parser': 4.0.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.0 + '@smithy/util-defaults-mode-node': 4.0.0 + '@smithy/util-endpoints': 3.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-retry': 4.0.0 + '@smithy/util-stream': 4.0.0 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.723.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/middleware-host-header': 3.723.0 + '@aws-sdk/middleware-logger': 3.723.0 + '@aws-sdk/middleware-recursion-detection': 3.723.0 + '@aws-sdk/middleware-user-agent': 3.723.0 + '@aws-sdk/region-config-resolver': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.723.0 + '@aws-sdk/util-user-agent-browser': 3.723.0 + '@aws-sdk/util-user-agent-node': 3.723.0 + '@smithy/config-resolver': 4.0.0 + '@smithy/core': 3.0.0 + '@smithy/fetch-http-handler': 5.0.0 + '@smithy/hash-node': 4.0.0 + '@smithy/invalid-dependency': 4.0.0 + '@smithy/middleware-content-length': 4.0.0 + '@smithy/middleware-endpoint': 4.0.0 + '@smithy/middleware-retry': 4.0.0 + '@smithy/middleware-serde': 4.0.0 + '@smithy/middleware-stack': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/node-http-handler': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/url-parser': 4.0.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.0 + '@smithy/util-defaults-mode-node': 4.0.0 + '@smithy/util-endpoints': 3.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-retry': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.723.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/middleware-host-header': 3.723.0 + '@aws-sdk/middleware-logger': 3.723.0 + '@aws-sdk/middleware-recursion-detection': 3.723.0 + '@aws-sdk/middleware-user-agent': 3.723.0 + '@aws-sdk/region-config-resolver': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.723.0 + '@aws-sdk/util-user-agent-browser': 3.723.0 + '@aws-sdk/util-user-agent-node': 3.723.0 + '@smithy/config-resolver': 4.0.0 + '@smithy/core': 3.0.0 + '@smithy/fetch-http-handler': 5.0.0 + '@smithy/hash-node': 4.0.0 + '@smithy/invalid-dependency': 4.0.0 + '@smithy/middleware-content-length': 4.0.0 + '@smithy/middleware-endpoint': 4.0.0 + '@smithy/middleware-retry': 4.0.0 + '@smithy/middleware-serde': 4.0.0 + '@smithy/middleware-stack': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/node-http-handler': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/url-parser': 4.0.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.0 + '@smithy/util-defaults-mode-node': 4.0.0 + '@smithy/util-endpoints': 3.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-retry': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.723.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.723.0(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-node': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/middleware-host-header': 3.723.0 + '@aws-sdk/middleware-logger': 3.723.0 + '@aws-sdk/middleware-recursion-detection': 3.723.0 + '@aws-sdk/middleware-user-agent': 3.723.0 + '@aws-sdk/region-config-resolver': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.723.0 + '@aws-sdk/util-user-agent-browser': 3.723.0 + '@aws-sdk/util-user-agent-node': 3.723.0 + '@smithy/config-resolver': 4.0.0 + '@smithy/core': 3.0.0 + '@smithy/fetch-http-handler': 5.0.0 + '@smithy/hash-node': 4.0.0 + '@smithy/invalid-dependency': 4.0.0 + '@smithy/middleware-content-length': 4.0.0 + '@smithy/middleware-endpoint': 4.0.0 + '@smithy/middleware-retry': 4.0.0 + '@smithy/middleware-serde': 4.0.0 + '@smithy/middleware-stack': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/node-http-handler': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/url-parser': 4.0.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.0 + '@smithy/util-defaults-mode-node': 4.0.0 + '@smithy/util-endpoints': 3.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-retry': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/core': 3.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/property-provider': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/signature-v4': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-middleware': 4.0.0 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.723.0': + dependencies: + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/property-provider': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.723.0': + dependencies: + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/fetch-http-handler': 5.0.0 + '@smithy/node-http-handler': 4.0.0 + '@smithy/property-provider': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-stream': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))(@aws-sdk/client-sts@3.723.0)': + dependencies: + '@aws-sdk/client-sts': 3.723.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/credential-provider-env': 3.723.0 + '@aws-sdk/credential-provider-http': 3.723.0 + '@aws-sdk/credential-provider-process': 3.723.0 + '@aws-sdk/credential-provider-sso': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0)) + '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/types': 3.723.0 + '@smithy/credential-provider-imds': 4.0.0 + '@smithy/property-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))(@aws-sdk/client-sts@3.723.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.723.0 + '@aws-sdk/credential-provider-http': 3.723.0 + '@aws-sdk/credential-provider-ini': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/credential-provider-process': 3.723.0 + '@aws-sdk/credential-provider-sso': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0)) + '@aws-sdk/credential-provider-web-identity': 3.723.0(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/types': 3.723.0 + '@smithy/credential-provider-imds': 4.0.0 + '@smithy/property-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-process@3.723.0': + dependencies: + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/property-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))': + dependencies: + '@aws-sdk/client-sso': 3.723.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/token-providers': 3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0)) + '@aws-sdk/types': 3.723.0 + '@smithy/property-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.723.0(@aws-sdk/client-sts@3.723.0)': + dependencies: + '@aws-sdk/client-sts': 3.723.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/property-provider': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/lib-storage@3.726.0(@aws-sdk/client-s3@3.723.0)': + dependencies: + '@aws-sdk/client-s3': 3.723.0 + '@smithy/abort-controller': 4.0.0 + '@smithy/middleware-endpoint': 4.0.0 + '@smithy/smithy-client': 4.0.0 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-bucket-endpoint@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-arn-parser': 3.723.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-config-provider': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-expect-continue@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-flexible-checksums@3.723.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/is-array-buffer': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-stream': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-host-header@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-location-constraint@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.723.0': + dependencies: + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-arn-parser': 3.723.0 + '@smithy/core': 3.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/signature-v4': 5.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-stream': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-ssec@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.723.0': + dependencies: + '@aws-sdk/core': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@aws-sdk/util-endpoints': 3.723.0 + '@smithy/core': 3.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/region-config-resolver@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.723.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/signature-v4': 5.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.723.0(@aws-sdk/client-sso-oidc@3.723.0(@aws-sdk/client-sts@3.723.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.723.0(@aws-sdk/client-sts@3.723.0) + '@aws-sdk/types': 3.723.0 + '@smithy/property-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/types@3.723.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/util-arn-parser@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/types': 4.0.0 + '@smithy/util-endpoints': 3.0.0 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.723.0': + dependencies: + '@aws-sdk/types': 3.723.0 + '@smithy/types': 4.0.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.723.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.723.0 + '@aws-sdk/types': 3.723.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.723.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + '@azure-rest/core-client@1.4.0': dependencies: '@azure/abort-controller': 2.1.1 @@ -8507,7 +9422,7 @@ snapshots: '@azure/core-rest-pipeline': 1.15.1 '@azure/core-tracing': 1.1.1 '@azure/core-util': 1.8.1 - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -8529,7 +9444,7 @@ snapshots: '@azure/abort-controller@2.1.1': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@azure/abort-controller@2.1.2': dependencies: @@ -9589,21 +10504,21 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jsonjoy.com/base64@1.1.2(tslib@2.6.2)': + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 - '@jsonjoy.com/json-pack@1.0.4(tslib@2.6.2)': + '@jsonjoy.com/json-pack@1.0.4(tslib@2.8.1)': dependencies: - '@jsonjoy.com/base64': 1.1.2(tslib@2.6.2) - '@jsonjoy.com/util': 1.2.0(tslib@2.6.2) + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.2.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 1.21.0(tslib@2.6.2) - tslib: 2.6.2 + thingies: 1.21.0(tslib@2.8.1) + tslib: 2.8.1 - '@jsonjoy.com/util@1.2.0(tslib@2.6.2)': + '@jsonjoy.com/util@1.2.0(tslib@2.8.1)': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@leichtgewicht/ip-codec@2.0.4': {} @@ -9691,7 +10606,7 @@ snapshots: supports-color: 8.1.1 supports-hyperlinks: 2.3.0 ts-node: 10.9.1(@types/node@18.18.7)(typescript@5.4.3) - tslib: 2.6.2 + tslib: 2.8.1 widest-line: 3.1.0 wordwrap: 1.0.0 wrap-ansi: 7.0.0 @@ -9727,7 +10642,7 @@ snapshots: supports-color: 8.1.1 supports-hyperlinks: 2.3.0 ts-node: 10.9.1(@types/node@20.8.9)(typescript@5.1.6) - tslib: 2.6.2 + tslib: 2.8.1 widest-line: 3.1.0 wordwrap: 1.0.0 wrap-ansi: 7.0.0 @@ -10125,6 +11040,337 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.0 + '@smithy/abort-controller@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader-native@4.0.0': + dependencies: + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader@5.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/config-resolver@4.0.0': + dependencies: + '@smithy/node-config-provider': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.0 + tslib: 2.8.1 + + '@smithy/core@3.0.0': + dependencies: + '@smithy/middleware-serde': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-stream': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.0.0': + dependencies: + '@smithy/node-config-provider': 4.0.0 + '@smithy/property-provider': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/url-parser': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.0.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.0.0': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.0.0': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.0.0': + dependencies: + '@smithy/eventstream-codec': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.0': + dependencies: + '@smithy/protocol-http': 5.0.0 + '@smithy/querystring-builder': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-blob-browser@4.0.0': + dependencies: + '@smithy/chunked-blob-reader': 5.0.0 + '@smithy/chunked-blob-reader-native': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-stream-node@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/md5-js@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.0.0': + dependencies: + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.0.0': + dependencies: + '@smithy/core': 3.0.0 + '@smithy/middleware-serde': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/url-parser': 4.0.0 + '@smithy/util-middleware': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.0.0': + dependencies: + '@smithy/node-config-provider': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/service-error-classification': 4.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-retry': 4.0.0 + tslib: 2.8.1 + uuid: 9.0.1 + + '@smithy/middleware-serde@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.0.0': + dependencies: + '@smithy/property-provider': 4.0.0 + '@smithy/shared-ini-file-loader': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.0.0': + dependencies: + '@smithy/abort-controller': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/querystring-builder': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + + '@smithy/shared-ini-file-loader@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.0 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.0.0': + dependencies: + '@smithy/core': 3.0.0 + '@smithy/middleware-endpoint': 4.0.0 + '@smithy/middleware-stack': 4.0.0 + '@smithy/protocol-http': 5.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-stream': 4.0.0 + tslib: 2.8.1 + + '@smithy/types@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.0.0': + dependencies: + '@smithy/querystring-parser': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.0.0': + dependencies: + '@smithy/property-provider': 4.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.0.0': + dependencies: + '@smithy/config-resolver': 4.0.0 + '@smithy/credential-provider-imds': 4.0.0 + '@smithy/node-config-provider': 4.0.0 + '@smithy/property-provider': 4.0.0 + '@smithy/smithy-client': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.0.0': + dependencies: + '@smithy/node-config-provider': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.0.0': + dependencies: + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.0.0': + dependencies: + '@smithy/service-error-classification': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.0.0': + dependencies: + '@smithy/fetch-http-handler': 5.0.0 + '@smithy/node-http-handler': 4.0.0 + '@smithy/types': 4.0.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-waiter@4.0.1': + dependencies: + '@smithy/abort-controller': 4.0.0 + '@smithy/types': 4.0.0 + tslib: 2.8.1 + '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -10852,7 +12098,7 @@ snapshots: ast-types@0.13.4: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 astral-regex@2.0.0: {} @@ -11039,6 +12285,8 @@ snapshots: boolean@3.2.0: optional: true + bowser@2.11.0: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -11123,6 +12371,11 @@ snapshots: buffer-xor@1.0.3: {} + buffer@5.6.0: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -11223,7 +12476,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.8.1 camelcase@5.3.1: {} @@ -12077,7 +13330,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 dotenv-expand@5.1.0: {} @@ -12487,6 +13740,10 @@ snapshots: dependencies: fastest-levenshtein: 1.0.16 + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + fast-xml-parser@4.5.0: dependencies: strnum: 1.0.5 @@ -13938,7 +15195,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 lowercase-keys@2.0.0: {} @@ -14031,10 +15288,10 @@ snapshots: memfs@4.9.3: dependencies: - '@jsonjoy.com/json-pack': 1.0.4(tslib@2.6.2) - '@jsonjoy.com/util': 1.2.0(tslib@2.6.2) - tree-dump: 1.0.2(tslib@2.6.2) - tslib: 2.6.2 + '@jsonjoy.com/json-pack': 1.0.4(tslib@2.8.1) + '@jsonjoy.com/util': 1.2.0(tslib@2.8.1) + tree-dump: 1.0.2(tslib@2.8.1) + tslib: 2.8.1 memory-pager@1.5.0: {} @@ -14235,7 +15492,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.8.1 node-abi@3.56.0: dependencies: @@ -14433,7 +15690,7 @@ snapshots: param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 parent-module@1.0.1: dependencies: @@ -14501,7 +15758,7 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 password-prompt@1.1.3: dependencies: @@ -15506,9 +16763,9 @@ snapshots: text-decoder@1.2.1: {} - thingies@1.21.0(tslib@2.6.2): + thingies@1.21.0(tslib@2.8.1): dependencies: - tslib: 2.6.2 + tslib: 2.8.1 through2@2.0.5: dependencies: @@ -15563,9 +16820,9 @@ snapshots: dependencies: punycode: 2.3.1 - tree-dump@1.0.2(tslib@2.6.2): + tree-dump@1.0.2(tslib@2.8.1): dependencies: - tslib: 2.6.2 + tslib: 2.8.1 tree-kill@1.2.2: {}