From c52759181ba04d0286d4dbbc6d67f12953865ded Mon Sep 17 00:00:00 2001 From: Innei Date: Sun, 18 May 2025 23:31:51 +0800 Subject: [PATCH] feat(s3): implement S3Uploader for file uploads - Introduced S3Uploader class to handle file uploads to S3 with support for custom domains and automatic endpoint generation. - Refactored BackupService to utilize S3Uploader for uploading backup files, enhancing code clarity and maintainability. - Added unit tests for S3Uploader to ensure functionality and reliability. Signed-off-by: Innei --- apps/core/package.json | 1 - .../core/src/modules/backup/backup.service.ts | 21 +- apps/core/src/utils/s3.util.spec.ts | 164 +++ apps/core/src/utils/s3.util.ts | 166 +++ pnpm-lock.yaml | 1183 ----------------- 5 files changed, 337 insertions(+), 1198 deletions(-) create mode 100644 apps/core/src/utils/s3.util.spec.ts create mode 100644 apps/core/src/utils/s3.util.ts diff --git a/apps/core/package.json b/apps/core/package.json index 48b52e26..0b915565 100644 --- a/apps/core/package.json +++ b/apps/core/package.json @@ -50,7 +50,6 @@ "dependencies": { "@algolia/client-search": "^4.22.1", "@antfu/install-pkg": "1.1.0", - "@aws-sdk/client-s3": "3.802.0", "@babel/core": "7.27.1", "@babel/plugin-transform-modules-commonjs": "7.27.1", "@babel/plugin-transform-typescript": "7.27.1", diff --git a/apps/core/src/modules/backup/backup.service.ts b/apps/core/src/modules/backup/backup.service.ts index cd940d9a..2ad48f23 100644 --- a/apps/core/src/modules/backup/backup.service.ts +++ b/apps/core/src/modules/backup/backup.service.ts @@ -4,7 +4,6 @@ import path, { join, resolve } from 'node:path' import { flatten } from 'lodash' import { mkdirp } from 'mkdirp' -import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3' import { $, cd } from '@mx-space/compiled' import { BadRequestException, @@ -27,6 +26,7 @@ import { BACKUP_DIR, DATA_DIR } from '~/constants/path.constant' import { migrateDatabase } from '~/migration/migrate' import { EventManagerService } from '~/processors/helper/helper.event.service' import { RedisService } from '~/processors/redis/redis.service' +import { S3Uploader } from '~/utils/s3.util' import { scheduleManager } from '~/utils/schedule.util' import { getFolderSize, installPKG } from '~/utils/system.util' import { getMediumDateTime } from '~/utils/time.util' @@ -302,28 +302,21 @@ export class BackupService { return } - const s3 = new S3Client({ + const s3 = new S3Uploader({ + bucket, region, + accessKey: secretId, + secretKey, endpoint, - credentials: { - accessKeyId: secretId, - secretAccessKey: secretKey, - }, }) const remoteFileKey = backup.path.slice(backup.path.lastIndexOf('/') + 1) - const command = new PutObjectCommand({ - Bucket: bucket, - Key: remoteFileKey, - Body: backup.buffer, - ContentType: 'application/zip', - }) - this.logger.log('--> 开始上传到 S3') - await s3.send(command).catch((error) => { + await s3.uploadFile(backup.buffer, remoteFileKey).catch((error) => { this.logger.error('--> 上传失败了') throw error }) + this.logger.log('--> 上传成功') }) } diff --git a/apps/core/src/utils/s3.util.spec.ts b/apps/core/src/utils/s3.util.spec.ts new file mode 100644 index 00000000..54bdab33 --- /dev/null +++ b/apps/core/src/utils/s3.util.spec.ts @@ -0,0 +1,164 @@ +import * as crypto from 'node:crypto' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import type { S3UploaderOptions } from './s3.util' + +import { S3Uploader } from './s3.util' + +// Mock fetch +global.fetch = vi.fn() + +describe('S3Uploader', () => { + let uploader: S3Uploader + let options: S3UploaderOptions + let mockBuffer: Buffer + + beforeEach(() => { + // Setup test data + options = { + bucket: 'test-bucket', + region: 'us-east-1', + accessKey: 'test-access-key', + secretKey: 'test-secret-key', + endpoint: 'https://test-endpoint.com', + } + uploader = new S3Uploader(options) + mockBuffer = Buffer.from('test-file-content') + + // Reset and setup fetch mock + vi.mocked(fetch).mockReset() + vi.mocked(fetch).mockResolvedValue({ + ok: true, + status: 200, + } as Response) + }) + + describe('constructor and getters', () => { + it('should initialize with provided options', () => { + expect(uploader.bucket).toBe(options.bucket) + expect(uploader.region).toBe(options.region) + expect(uploader.accessKey).toBe(options.accessKey) + expect(uploader.secretKey).toBe(options.secretKey) + expect(uploader.endpoint).toBe(options.endpoint) + }) + + it('should generate endpoint when not provided', () => { + const noEndpointOptions = { ...options, endpoint: undefined } + const noEndpointUploader = new S3Uploader(noEndpointOptions) + expect(noEndpointUploader.endpoint).toBe( + `https://${options.bucket}.s3.${options.region}.amazonaws.com`, + ) + }) + }) + + describe('setters', () => { + it('should update options', () => { + const newOptions: S3UploaderOptions = { + bucket: 'new-bucket', + region: 'eu-west-1', + accessKey: 'new-access-key', + secretKey: 'new-secret-key', + } + uploader.setOptions(newOptions) + expect(uploader.bucket).toBe(newOptions.bucket) + expect(uploader.region).toBe(newOptions.region) + expect(uploader.accessKey).toBe(newOptions.accessKey) + expect(uploader.secretKey).toBe(newOptions.secretKey) + }) + + it('should update custom domain', () => { + const domain = 'https://cdn.example.com' + uploader.setCustomDomain(domain) + vi.spyOn(crypto, 'createHash').mockImplementation(() => { + return { + update: () => ({ + digest: () => 'mock-hash', + }), + } as any + }) + return uploader.uploadImage(mockBuffer, 'images').then((url) => { + expect(url).toBe(`${domain}/images/mock-hash.png`) + }) + }) + }) + + describe('uploadImage', () => { + it('should upload image and return URL', async () => { + // Mock the crypto hash function + vi.spyOn(crypto, 'createHash').mockImplementation(() => { + return { + update: () => ({ + digest: () => 'mock-hash', + }), + } as any + }) + + const result = await uploader.uploadImage(mockBuffer, 'images') + expect(result).toBe('images/images/mock-hash.png') + expect(fetch).toHaveBeenCalledTimes(1) + expect(fetch).toHaveBeenCalledWith( + expect.stringContaining('/test-bucket/images/mock-hash.png'), + expect.objectContaining({ + method: 'PUT', + headers: expect.objectContaining({ + 'Content-Type': 'image/png', + }), + body: mockBuffer, + }), + ) + }) + }) + + describe('uploadFile', () => { + it('should upload a file and return URL', async () => { + // Mock the crypto hash function + vi.spyOn(crypto, 'createHash').mockImplementation(() => { + return { + update: () => ({ + digest: () => 'mock-hash', + }), + } as any + }) + + const result = await uploader.uploadFile(mockBuffer, 'files/document.pdf') + expect(result).toBe('files/document.pdf/files/document.pdf/mock-hash.pdf') + expect(fetch).toHaveBeenCalledTimes(1) + expect(fetch).toHaveBeenCalledWith( + expect.stringContaining( + '/test-bucket/files/document.pdf/mock-hash.pdf', + ), + expect.objectContaining({ + method: 'PUT', + headers: expect.objectContaining({ + 'Content-Type': 'application/octet-stream', + }), + body: mockBuffer, + }), + ) + }) + }) + + describe('uploadToS3', () => { + it('should throw error when upload fails', async () => { + vi.mocked(fetch).mockResolvedValueOnce({ + ok: false, + status: 403, + } as Response) + + await expect( + uploader.uploadToS3('test-object', mockBuffer, 'text/plain'), + ).rejects.toThrow('Upload failed with status code: 403') + }) + + it('should successfully upload to S3', async () => { + await uploader.uploadToS3('test-object', mockBuffer, 'text/plain') + expect(fetch).toHaveBeenCalledTimes(1) + expect(fetch).toHaveBeenCalledWith( + expect.stringContaining('/test-bucket/test-object'), + expect.objectContaining({ + method: 'PUT', + body: mockBuffer, + }), + ) + }) + }) +}) diff --git a/apps/core/src/utils/s3.util.ts b/apps/core/src/utils/s3.util.ts new file mode 100644 index 00000000..e2e35e31 --- /dev/null +++ b/apps/core/src/utils/s3.util.ts @@ -0,0 +1,166 @@ +import * as crypto from 'node:crypto' +import { extname } from 'node:path' + +export interface S3UploaderOptions { + bucket: string + region: string + accessKey: string + secretKey: string + endpoint?: string +} + +export class S3Uploader { + private options: S3UploaderOptions + private customDomain: string = '' + + constructor(options: S3UploaderOptions) { + this.options = options + } + + get endpoint(): string { + return ( + this.options.endpoint || + `https://${this.options.bucket}.s3.${this.options.region}.amazonaws.com` + ) + } + + get bucket(): string { + return this.options.bucket + } + + get region(): string { + return this.options.region + } + + get accessKey(): string { + return this.options.accessKey + } + + get secretKey(): string { + return this.options.secretKey + } + + setOptions(options: S3UploaderOptions): void { + this.options = options + } + + setCustomDomain(domain: string): void { + this.customDomain = domain + } + + // Helper function to calculate HMAC-SHA256 + private hmacSha256(key: Buffer, message: string): Buffer { + return crypto.createHmac('sha256', key).update(message).digest() + } + + async uploadImage(imageData: Buffer, path: string): Promise { + const md5Filename = crypto.createHash('md5').update(imageData).digest('hex') + const objectKey = `${path}/${md5Filename}.png` + + await this.uploadToS3(objectKey, imageData, 'image/png') + + if (this.customDomain && this.customDomain.length > 0) { + return `${this.customDomain}/${objectKey}` + } + return `${path}/${objectKey}` + } + + async uploadFile(fileData: Buffer, path: string): Promise { + const md5Filename = crypto.createHash('md5').update(fileData).digest('hex') + const ext = extname(path) + const objectKey = `${path}/${md5Filename}${ext}` + await this.uploadToS3(objectKey, fileData, 'application/octet-stream') + return `${path}/${objectKey}` + } + + // Generic S3-compatible storage upload function + async uploadToS3( + objectKey: string, + fileData: Buffer, + contentType: string, + ): Promise { + const service = 's3' + const date = new Date() + const xAmzDate = date.toISOString().replaceAll(/[:-]|\.\d{3}/g, '') + const dateStamp = xAmzDate.slice(0, 8) // YYYYMMDD + + // Calculate hashed payload + const hashedPayload = crypto + .createHash('sha256') + .update(fileData) + .digest('hex') + + // Set request headers + const url = new URL(this.endpoint) + const host = url.host + const contentLength = fileData.length.toString() + + const headers: Record = { + Host: host, + 'Content-Type': contentType, + 'Content-Length': contentLength, + 'x-amz-date': xAmzDate, + 'x-amz-content-sha256': hashedPayload, + } + + // Create canonical request + const sortedHeaders = Object.keys(headers).sort() + const canonicalHeaders = sortedHeaders + .map((key) => `${key.toLowerCase()}:${headers[key].trim()}`) + .join('\n') + const signedHeaders = sortedHeaders + .map((key) => key.toLowerCase()) + .join(';') + + const canonicalRequest = [ + 'PUT', + `/${this.bucket}/${objectKey}`, + '', // No query parameters + String(canonicalHeaders), + '', // Extra newline + signedHeaders, + hashedPayload, + ].join('\n') + + // Create string to sign + const algorithm = 'AWS4-HMAC-SHA256' + const credentialScope = `${dateStamp}/${this.region}/${service}/aws4_request` + const hashedCanonicalRequest = crypto + .createHash('sha256') + .update(canonicalRequest) + .digest('hex') + const stringToSign = [ + algorithm, + xAmzDate, + credentialScope, + hashedCanonicalRequest, + ].join('\n') + + // Calculate signature + const kSecret = Buffer.from(`AWS4${this.secretKey}`) + const kDate = this.hmacSha256(kSecret, dateStamp) + const kRegion = this.hmacSha256(kDate, this.region) + const kService = this.hmacSha256(kRegion, service) + const kSigning = this.hmacSha256(kService, 'aws4_request') + const signature = this.hmacSha256(kSigning, stringToSign).toString('hex') + + // Assemble Authorization header + const authorization = `${algorithm} Credential=${this.accessKey}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}` + + // Create and send PUT request + const requestUrl = `${this.endpoint}/${this.bucket}/${objectKey}` + + const response = await fetch(requestUrl, { + method: 'PUT', + headers: { + ...headers, + Authorization: authorization, + }, + body: fileData, + }) + + if (!response.ok) { + throw new Error(`Upload failed with status code: ${response.status}`) + } + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e44f4dc0..1866a3cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,9 +76,6 @@ importers: '@antfu/install-pkg': specifier: 1.1.0 version: 1.1.0 - '@aws-sdk/client-s3': - specifier: 3.802.0 - version: 3.802.0 '@babel/core': specifier: 7.27.1 version: 7.27.1 @@ -580,161 +577,6 @@ packages: '@antfu/utils@8.1.1': resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} - '@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.802.0': - resolution: {integrity: sha512-YIwLLiqRZArEmRI94X8MOpWuXlmxI3NnxYv+3kk6HIc2YWPaOAf0YN7vWlnQFWo6Yi1gBRtP0HM8WzK4Bn5ORQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.799.0': - resolution: {integrity: sha512-/i/LG7AiWPmPxKCA2jnR2zaf7B3HYSTbxaZI21ElIz9wASlNAsKr8CnLY7qb50kOyXiNfQ834S5Q3Gl8dX9o3Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.799.0': - resolution: {integrity: sha512-hkKF3Zpc6+H8GI1rlttYVRh9uEE77cqAzLmLpY3iu7sql8cZgPERRBfaFct8p1SaDyrksLNiboD1vKW58mbsYg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.799.0': - resolution: {integrity: sha512-vT/SSWtbUIOW/U21qgEySmmO44SFWIA7WeQPX1OrI8WJ5n7OEI23JWLHjLvHTkYmuZK6z1rPcv7HzRgmuGRibA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.799.0': - resolution: {integrity: sha512-2CjBpOWmhaPAExOgHnIB5nOkS5ef+mfRlJ1JC4nsnjAx0nrK4tk0XRE0LYz11P3+ue+a86cU8WTmBo+qjnGxPQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.799.0': - resolution: {integrity: sha512-M9ubILFxerqw4QJwk83MnjtZyoA2eNCiea5V+PzZeHlwk2PON/EnawKqy65x9/hMHGoSvvNuby7iMAmPptu7yw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.799.0': - resolution: {integrity: sha512-nd9fSJc0wUlgKUkIr2ldJhcIIrzJFS29AGZoyY22J3xih63nNDv61eTGVMsDZzHlV21XzMlPEljTR7axiimckg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.799.0': - resolution: {integrity: sha512-g8jmNs2k98WNHMYcea1YKA+7ao2Ma4w0P42Dz4YpcI155pQHxHx25RwbOG+rsAKuo3bKwkW53HVE/ZTKhcWFgw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.799.0': - resolution: {integrity: sha512-lQv27QkNU9FJFZqEf5DIEN3uXEN409Iaym9WJzhOouGtxvTIAWiD23OYh1u8PvBdrordJGS2YddfQvhcmq9akw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.799.0': - resolution: {integrity: sha512-8k1i9ut+BEg0QZ+I6UQMxGNR1T8paLmAOAZXU+nLQR0lcxS6lr8v+dqofgzQPuHLBkWNCr1Av1IKeL3bJjgU7g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-bucket-endpoint@3.775.0': - resolution: {integrity: sha512-qogMIpVChDYr4xiUNC19/RDSw/sKoHkAhouS6Skxiy6s27HBhow1L3Z1qVYXuBmOZGSWPU0xiyZCvOyWrv9s+Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-expect-continue@3.775.0': - resolution: {integrity: sha512-Apd3owkIeUW5dnk3au9np2IdW2N0zc9NjTjHiH+Mx3zqwSrc+m+ANgJVgk9mnQjMzU/vb7VuxJ0eqdEbp5gYsg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-flexible-checksums@3.799.0': - resolution: {integrity: sha512-vBIAdDl2neaFiUMxyr7dAtX7m9Iw5c0bz7OirD0JGW0nYn0mBcqKpFZEU75ewA5p2+Cm7RQDdt6099ne3gj0WA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.775.0': - resolution: {integrity: sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-location-constraint@3.775.0': - resolution: {integrity: sha512-8TMXEHZXZTFTckQLyBT5aEI8fX11HZcwZseRifvBKKpj0RZDk4F0EEYGxeNSPpUQ7n+PRWyfAEnnZNRdAj/1NQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.775.0': - resolution: {integrity: sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.775.0': - resolution: {integrity: sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.799.0': - resolution: {integrity: sha512-Zwdge5NArgcJwPuGZwgfXY6XXkWEBmMS9dqu5g3DcfHmZUuSjQUqmOsDdSZlE3RFHrDAEbuGQlrFUE8zuwdKQA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-ssec@3.775.0': - resolution: {integrity: sha512-Iw1RHD8vfAWWPzBBIKaojO4GAvQkHOYIpKdAfis/EUSUmSa79QsnXnRqsdcE0mCB0Ylj23yi+ah4/0wh9FsekA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.799.0': - resolution: {integrity: sha512-TropQZanbOTxa+p+Nl4fWkzlRhgFwDfW+Wb6TR3jZN7IXHNlPpgGFpdrgvBExhW/RBhqr+94OsR8Ou58lp3hhA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/nested-clients@3.799.0': - resolution: {integrity: sha512-zILlWh7asrcQG9JYMYgnvEQBfwmWKfED0yWCf3UNAmQcfS9wkCAWCgicNy/y5KvNvEYnHidsU117STtyuUNG5g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.775.0': - resolution: {integrity: sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.800.0': - resolution: {integrity: sha512-c71wZuiSUHNFCvcuqOv3jbqP+NquB2YKN4qX90OwYXEqUKn8F8fKJPpjjHjz1eK6qWKtECR4V/NTno2P70Yz/Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/token-providers@3.799.0': - resolution: {integrity: sha512-/8iDjnsJs/D8AhGbDAmdF5oSHzE4jsDsM2RIIxmBAKTZXkaaclQBNX9CmAqLKQmO3IUMZsDH2KENHLVAk/N/mw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.775.0': - resolution: {integrity: sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.804.0': - resolution: {integrity: sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg==} - 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.787.0': - resolution: {integrity: sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-locate-window@3.804.0': - resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-user-agent-browser@3.775.0': - resolution: {integrity: sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==} - - '@aws-sdk/util-user-agent-node@3.799.0': - resolution: {integrity: sha512-iXBk38RbIWPF5Nq9O4AnktORAzXovSVqWYClvS1qbE7ILsnTLJbagU9HlU25O2iV5COVh1qZkwuP5NHQ2yTEyw==} - engines: {node: '>=18.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.775.0': - resolution: {integrity: sha512-b9NGO6FKJeLGYnV7Z1yvcP1TNU4dkD5jNsLWOF1/sygZoASaQhNOlaiJ/1OH331YQ1R1oWk38nBb0frsYkDsOQ==} - engines: {node: '>=18.0.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -2581,218 +2423,6 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@smithy/abort-controller@4.0.2': - resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} - 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.1.2': - resolution: {integrity: sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.3.3': - resolution: {integrity: sha512-CiJNc0b/WdnttAfQ6uMkxPQ3Z8hG/ba8wF89x9KtBBLDdZk6CX52K4F8hbe94uNbc8LDUuZFtbqfdhM3T21naw==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.0.4': - resolution: {integrity: sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-codec@4.0.2': - resolution: {integrity: sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-browser@4.0.2': - resolution: {integrity: sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-config-resolver@4.1.0': - resolution: {integrity: sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-node@4.0.2': - resolution: {integrity: sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-universal@4.0.2': - resolution: {integrity: sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.0.2': - resolution: {integrity: sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-blob-browser@4.0.2': - resolution: {integrity: sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.0.2': - resolution: {integrity: sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-stream-node@4.0.2': - resolution: {integrity: sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.0.2': - resolution: {integrity: sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==} - 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.2': - resolution: {integrity: sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.0.2': - resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.1.6': - resolution: {integrity: sha512-Zdieg07c3ua3ap5ungdcyNnY1OsxmsXXtKDTk28+/YbwIPju0Z1ZX9X5AnkjmDE3+AbqgvhtC/ZuCMSr6VSfPw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.1.7': - resolution: {integrity: sha512-lFIFUJ0E/4I0UaIDY5usNUzNKAghhxO0lDH4TZktXMmE+e4ActD9F154Si0Unc01aCPzcwd+NcOwQw6AfXXRRQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.0.5': - resolution: {integrity: sha512-yREC3q/HXqQigq29xX3hiy6tFi+kjPKXoYUQmwQdgPORLbQ0n6V2Z/Iw9Nnlu66da9fM/WhDtGvYvqwecrCljQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.0.2': - resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.1.1': - resolution: {integrity: sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.0.4': - resolution: {integrity: sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.0.2': - resolution: {integrity: sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.1.0': - resolution: {integrity: sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.0.2': - resolution: {integrity: sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.0.2': - resolution: {integrity: sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.0.3': - resolution: {integrity: sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.0.2': - resolution: {integrity: sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.1.0': - resolution: {integrity: sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.2.6': - resolution: {integrity: sha512-WEqP0wQ1N/lVS4pwNK1Vk+0i6QIr66cq/xbu1dVy1tM0A0qYwAYyz0JhbquzM5pMa8s89lyDBtoGKxo7iG74GA==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.2.0': - resolution: {integrity: sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.0.2': - resolution: {integrity: sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==} - 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.14': - resolution: {integrity: sha512-l7QnMX8VcDOH6n/fBRu4zqguSlOBZxFzWqp58dXFSARFBjNlmEDk5G/z4T7BMGr+rI0Pg8MkhmMUfEtHFgpy2g==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.0.14': - resolution: {integrity: sha512-Ujs1gsWDo3m/T63VWBTBmHLTD2UlU6J6FEokLCEp7OZQv45jcjLHoxTwgWsi8ULpsYozvH4MTWkRP+bhwr0vDg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.0.4': - resolution: {integrity: sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg==} - 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.2': - resolution: {integrity: sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.0.3': - resolution: {integrity: sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.2.0': - resolution: {integrity: sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==} - 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.3': - resolution: {integrity: sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==} - engines: {node: '>=18.0.0'} - '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} @@ -3636,9 +3266,6 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -4547,10 +4174,6 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} - hasBin: true - fastify-plugin@5.0.1: resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} @@ -6636,9 +6259,6 @@ packages: strip-literal@2.1.1: resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - strtok3@10.2.2: resolution: {integrity: sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==} engines: {node: '>=18'} @@ -7532,469 +7152,6 @@ snapshots: '@antfu/utils@8.1.1': optional: true - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.804.0 - tslib: 2.8.1 - - '@aws-crypto/crc32c@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.804.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.804.0 - '@aws-sdk/util-locate-window': 3.804.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.804.0 - '@aws-sdk/util-locate-window': 3.804.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.804.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.804.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/client-s3@3.802.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/core': 3.799.0 - '@aws-sdk/credential-provider-node': 3.799.0 - '@aws-sdk/middleware-bucket-endpoint': 3.775.0 - '@aws-sdk/middleware-expect-continue': 3.775.0 - '@aws-sdk/middleware-flexible-checksums': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-location-constraint': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-sdk-s3': 3.799.0 - '@aws-sdk/middleware-ssec': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/signature-v4-multi-region': 3.800.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 - '@aws-sdk/xml-builder': 3.775.0 - '@smithy/config-resolver': 4.1.2 - '@smithy/core': 3.3.3 - '@smithy/eventstream-serde-browser': 4.0.2 - '@smithy/eventstream-serde-config-resolver': 4.1.0 - '@smithy/eventstream-serde-node': 4.0.2 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-blob-browser': 4.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/hash-stream-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/md5-js': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.6 - '@smithy/middleware-retry': 4.1.7 - '@smithy/middleware-serde': 4.0.5 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.1.1 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@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.14 - '@smithy/util-defaults-mode-node': 4.0.14 - '@smithy/util-endpoints': 3.0.4 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.3 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.3 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.799.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 - '@smithy/config-resolver': 4.1.2 - '@smithy/core': 3.3.3 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.6 - '@smithy/middleware-retry': 4.1.7 - '@smithy/middleware-serde': 4.0.5 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.1.1 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@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.14 - '@smithy/util-defaults-mode-node': 4.0.14 - '@smithy/util-endpoints': 3.0.4 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.3 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.799.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/core': 3.3.3 - '@smithy/node-config-provider': 4.1.1 - '@smithy/property-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.1.0 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/util-middleware': 4.0.2 - fast-xml-parser: 4.4.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/property-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/property-provider': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/util-stream': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/credential-provider-env': 3.799.0 - '@aws-sdk/credential-provider-http': 3.799.0 - '@aws-sdk/credential-provider-process': 3.799.0 - '@aws-sdk/credential-provider-sso': 3.799.0 - '@aws-sdk/credential-provider-web-identity': 3.799.0 - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/credential-provider-imds': 4.0.4 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.799.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.799.0 - '@aws-sdk/credential-provider-http': 3.799.0 - '@aws-sdk/credential-provider-ini': 3.799.0 - '@aws-sdk/credential-provider-process': 3.799.0 - '@aws-sdk/credential-provider-sso': 3.799.0 - '@aws-sdk/credential-provider-web-identity': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/credential-provider-imds': 4.0.4 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.799.0': - dependencies: - '@aws-sdk/client-sso': 3.799.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/token-providers': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/property-provider': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/middleware-bucket-endpoint@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-arn-parser': 3.723.0 - '@smithy/node-config-provider': 4.1.1 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-expect-continue@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-flexible-checksums@3.799.0': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/crc32c': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/is-array-buffer': 4.0.0 - '@smithy/node-config-provider': 4.1.1 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-host-header@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-location-constraint@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-arn-parser': 3.723.0 - '@smithy/core': 3.3.3 - '@smithy/node-config-provider': 4.1.1 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.1.0 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-ssec@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.799.0': - dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@smithy/core': 3.3.3 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.799.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 - '@smithy/config-resolver': 4.1.2 - '@smithy/core': 3.3.3 - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/hash-node': 4.0.2 - '@smithy/invalid-dependency': 4.0.2 - '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.6 - '@smithy/middleware-retry': 4.1.7 - '@smithy/middleware-serde': 4.0.5 - '@smithy/middleware-stack': 4.0.2 - '@smithy/node-config-provider': 4.1.1 - '@smithy/node-http-handler': 4.0.4 - '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@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.14 - '@smithy/util-defaults-mode-node': 4.0.14 - '@smithy/util-endpoints': 3.0.4 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.3 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/node-config-provider': 4.1.1 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.800.0': - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/signature-v4': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.799.0': - dependencies: - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.775.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/types@3.804.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.723.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.787.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - '@smithy/util-endpoints': 3.0.4 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.804.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.775.0': - dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/types': 4.2.0 - bowser: 2.11.0 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.799.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@smithy/node-config-provider': 4.1.1 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.775.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -9659,338 +8816,6 @@ snapshots: '@sinclair/typebox@0.27.8': {} - '@smithy/abort-controller@4.0.2': - dependencies: - '@smithy/types': 4.2.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.1.2': - dependencies: - '@smithy/node-config-provider': 4.1.1 - '@smithy/types': 4.2.0 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.2 - tslib: 2.8.1 - - '@smithy/core@3.3.3': - dependencies: - '@smithy/middleware-serde': 4.0.5 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-stream': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.0.4': - dependencies: - '@smithy/node-config-provider': 4.1.1 - '@smithy/property-provider': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.0.2': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.2.0 - '@smithy/util-hex-encoding': 4.0.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.0.2': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.1.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.0.2': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.0.2': - dependencies: - '@smithy/eventstream-codec': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.0.2': - dependencies: - '@smithy/protocol-http': 5.1.0 - '@smithy/querystring-builder': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-blob-browser@4.0.2': - dependencies: - '@smithy/chunked-blob-reader': 5.0.0 - '@smithy/chunked-blob-reader-native': 4.0.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/hash-node@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-stream-node@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.0.2': - dependencies: - '@smithy/types': 4.2.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.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.0.2': - dependencies: - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.1.6': - dependencies: - '@smithy/core': 3.3.3 - '@smithy/middleware-serde': 4.0.5 - '@smithy/node-config-provider': 4.1.1 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - '@smithy/url-parser': 4.0.2 - '@smithy/util-middleware': 4.0.2 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.1.7': - dependencies: - '@smithy/node-config-provider': 4.1.1 - '@smithy/protocol-http': 5.1.0 - '@smithy/service-error-classification': 4.0.3 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-retry': 4.0.3 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/middleware-serde@4.0.5': - dependencies: - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.1.1': - dependencies: - '@smithy/property-provider': 4.0.2 - '@smithy/shared-ini-file-loader': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.0.4': - dependencies: - '@smithy/abort-controller': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/querystring-builder': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/property-provider@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/protocol-http@5.1.0': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - '@smithy/util-uri-escape': 4.0.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.0.3': - dependencies: - '@smithy/types': 4.2.0 - - '@smithy/shared-ini-file-loader@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/signature-v4@5.1.0': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.2 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/smithy-client@4.2.6': - dependencies: - '@smithy/core': 3.3.3 - '@smithy/middleware-endpoint': 4.1.6 - '@smithy/middleware-stack': 4.0.2 - '@smithy/protocol-http': 5.1.0 - '@smithy/types': 4.2.0 - '@smithy/util-stream': 4.2.0 - tslib: 2.8.1 - - '@smithy/types@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/url-parser@4.0.2': - dependencies: - '@smithy/querystring-parser': 4.0.2 - '@smithy/types': 4.2.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.14': - dependencies: - '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - bowser: 2.11.0 - tslib: 2.8.1 - - '@smithy/util-defaults-mode-node@4.0.14': - dependencies: - '@smithy/config-resolver': 4.1.2 - '@smithy/credential-provider-imds': 4.0.4 - '@smithy/node-config-provider': 4.1.1 - '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.6 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-endpoints@3.0.4': - dependencies: - '@smithy/node-config-provider': 4.1.1 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-middleware@4.0.2': - dependencies: - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-retry@4.0.3': - dependencies: - '@smithy/service-error-classification': 4.0.3 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-stream@4.2.0': - dependencies: - '@smithy/fetch-http-handler': 5.0.2 - '@smithy/node-http-handler': 4.0.4 - '@smithy/types': 4.2.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.3': - dependencies: - '@smithy/abort-controller': 4.0.2 - '@smithy/types': 4.2.0 - tslib: 2.8.1 - '@socket.io/component-emitter@3.1.2': {} '@socket.io/redis-adapter@8.3.0(socket.io-adapter@2.5.5)': @@ -10975,8 +9800,6 @@ snapshots: boolbase@1.0.0: {} - bowser@2.11.0: {} - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -12048,10 +10871,6 @@ snapshots: fast-uri@3.0.6: {} - fast-xml-parser@4.4.1: - dependencies: - strnum: 1.1.2 - fastify-plugin@5.0.1: {} fastify@5.3.3: @@ -14333,8 +13152,6 @@ snapshots: dependencies: js-tokens: 9.0.1 - strnum@1.1.2: {} - strtok3@10.2.2: dependencies: '@tokenizer/token': 0.3.0