From bd3241504f1fb3d012d239809e8b1213b6dae530 Mon Sep 17 00:00:00 2001 From: Yaosanqi137 Date: Sun, 5 Apr 2026 00:05:39 +0800 Subject: [PATCH] feat(api-attachment): add minio presigned upload flow --- apps/api/.env.example | 8 + apps/api/package.json | 2 + apps/api/src/app.module.ts | 4 +- .../src/attachment/attachment.controller.ts | 38 + apps/api/src/attachment/attachment.module.ts | 11 + apps/api/src/attachment/attachment.service.ts | 207 +++ .../attachment/dto/complete-attachment.dto.ts | 89 + .../attachment/dto/presign-attachment.dto.ts | 35 + pnpm-lock.yaml | 1512 +++++++++++++++++ 9 files changed, 1905 insertions(+), 1 deletion(-) create mode 100644 apps/api/src/attachment/attachment.controller.ts create mode 100644 apps/api/src/attachment/attachment.module.ts create mode 100644 apps/api/src/attachment/attachment.service.ts create mode 100644 apps/api/src/attachment/dto/complete-attachment.dto.ts create mode 100644 apps/api/src/attachment/dto/presign-attachment.dto.ts diff --git a/apps/api/.env.example b/apps/api/.env.example index 4394718..68af79c 100644 --- a/apps/api/.env.example +++ b/apps/api/.env.example @@ -17,3 +17,11 @@ OAUTH_WECHAT_CLIENT_SECRET="wechat-client-secret" OAUTH_WECHAT_CALLBACK_URL="http://localhost:3000/auth/oauth/wechat/callback" OAUTH_WECHAT_AUTH_URL="https://open.weixin.qq.com/connect/qrconnect" OAUTH_WECHAT_TOKEN_URL="https://api.weixin.qq.com/sns/oauth2/access_token" +S3_ENDPOINT="http://127.0.0.1:9000" +S3_REGION="us-east-1" +S3_BUCKET="todolist" +S3_ACCESS_KEY_ID="minioadmin" +S3_SECRET_ACCESS_KEY="minioadmin" +S3_FORCE_PATH_STYLE="true" +S3_PRESIGN_EXPIRES_SECONDS="900" +S3_PUBLIC_BASE_URL="http://127.0.0.1:9000" diff --git a/apps/api/package.json b/apps/api/package.json index a1327aa..5cda8d9 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -25,6 +25,8 @@ }, "private": true, "dependencies": { + "@aws-sdk/client-s3": "^3.1024.0", + "@aws-sdk/s3-request-presigner": "^3.1024.0", "@nestjs/common": "^11.1.18", "@nestjs/config": "^4.0.3", "@nestjs/core": "^11.1.18", diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index bbf571a..4f6ee3f 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -1,5 +1,6 @@ import { Module } from "@nestjs/common"; import { ConfigModule } from "@nestjs/config"; +import { AttachmentModule } from "./attachment/attachment.module"; import { AuthModule } from "./auth/auth.module"; import { PrismaModule } from "./prisma/prisma.module"; import { TaskModule } from "./task/task.module"; @@ -12,7 +13,8 @@ import { TaskModule } from "./task/task.module"; }), PrismaModule, AuthModule, - TaskModule + TaskModule, + AttachmentModule ] }) export class AppModule {} diff --git a/apps/api/src/attachment/attachment.controller.ts b/apps/api/src/attachment/attachment.controller.ts new file mode 100644 index 0000000..6baec6e --- /dev/null +++ b/apps/api/src/attachment/attachment.controller.ts @@ -0,0 +1,38 @@ +import { Body, Controller, Headers, Post, UnauthorizedException } from "@nestjs/common"; +import { + AttachmentResponse, + AttachmentService, + PresignAttachmentResponse +} from "./attachment.service"; +import { CompleteAttachmentDto } from "./dto/complete-attachment.dto"; +import { PresignAttachmentDto } from "./dto/presign-attachment.dto"; + +@Controller("attachments") +export class AttachmentController { + constructor(private readonly attachmentService: AttachmentService) {} + + @Post("presign") + async presignAttachment( + @Headers("x-user-id") userIdHeader: string | string[] | undefined, + @Body() body: PresignAttachmentDto + ): Promise { + return this.attachmentService.presignAttachment(this.resolveUserId(userIdHeader), body); + } + + @Post("complete") + async completeAttachment( + @Headers("x-user-id") userIdHeader: string | string[] | undefined, + @Body() body: CompleteAttachmentDto + ): Promise { + return this.attachmentService.completeAttachment(this.resolveUserId(userIdHeader), body); + } + + private resolveUserId(userIdHeader: string | string[] | undefined): string { + const userId = Array.isArray(userIdHeader) ? userIdHeader[0] : userIdHeader; + if (!userId) { + throw new UnauthorizedException("缺少用户上下文"); + } + + return userId; + } +} diff --git a/apps/api/src/attachment/attachment.module.ts b/apps/api/src/attachment/attachment.module.ts new file mode 100644 index 0000000..cd8dfe3 --- /dev/null +++ b/apps/api/src/attachment/attachment.module.ts @@ -0,0 +1,11 @@ +import { Module } from "@nestjs/common"; +import { PrismaModule } from "../prisma/prisma.module"; +import { AttachmentController } from "./attachment.controller"; +import { AttachmentService } from "./attachment.service"; + +@Module({ + imports: [PrismaModule], + controllers: [AttachmentController], + providers: [AttachmentService] +}) +export class AttachmentModule {} diff --git a/apps/api/src/attachment/attachment.service.ts b/apps/api/src/attachment/attachment.service.ts new file mode 100644 index 0000000..7ddd5b5 --- /dev/null +++ b/apps/api/src/attachment/attachment.service.ts @@ -0,0 +1,207 @@ +import { randomUUID } from "node:crypto"; +import { Injectable, NotFoundException } from "@nestjs/common"; +import { ConfigService } from "@nestjs/config"; +import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; +import { AttachmentType } from "../../generated/prisma/client"; +import { PrismaService } from "../prisma/prisma.service"; +import { CompleteAttachmentDto } from "./dto/complete-attachment.dto"; +import { PresignAttachmentDto } from "./dto/presign-attachment.dto"; + +export type PresignAttachmentResponse = { + method: "PUT"; + uploadUrl: string; + bucket: string; + objectKey: string; + objectUrl: string; + expiresInSeconds: number; + headers: { + "Content-Type": string; + }; +}; + +export type AttachmentResponse = { + id: string; + taskId: string | null; + type: AttachmentType; + url: string; + mimeType: string | null; + fileName: string | null; + fileSize: number; + width: number | null; + height: number | null; + durationMs: number | null; + checksum: string | null; + createdAt: string; + updatedAt: string; +}; + +@Injectable() +export class AttachmentService { + private s3Client: S3Client | null = null; + + constructor( + private readonly configService: ConfigService, + private readonly prismaService: PrismaService + ) {} + + async presignAttachment( + userId: string, + body: PresignAttachmentDto + ): Promise { + if (body.taskId) { + await this.ensureTaskOwnership(userId, body.taskId); + } + + const bucket = this.getDefaultBucket(); + const objectKey = this.generateObjectKey(userId, body.fileName); + const objectUrl = this.resolveObjectUrl(bucket, objectKey); + const expiresInSeconds = this.getPresignExpiresInSeconds(); + + const command = new PutObjectCommand({ + Bucket: bucket, + Key: objectKey, + ContentType: body.mimeType, + ContentLength: body.fileSize + }); + + const uploadUrl = await getSignedUrl(this.getS3Client(), command, { + expiresIn: expiresInSeconds + }); + + return { + method: "PUT", + uploadUrl, + bucket, + objectKey, + objectUrl, + expiresInSeconds, + headers: { + "Content-Type": body.mimeType + } + }; + } + + async completeAttachment( + userId: string, + body: CompleteAttachmentDto + ): Promise { + if (body.taskId) { + await this.ensureTaskOwnership(userId, body.taskId); + } + + const bucket = body.bucket ?? this.getDefaultBucket(); + const objectUrl = this.resolveObjectUrl(bucket, body.objectKey); + const attachment = await this.prismaService.attachment.create({ + data: { + userId, + taskId: body.taskId ?? null, + type: body.type ?? this.resolveAttachmentType(body.mimeType), + url: objectUrl, + mimeType: body.mimeType, + fileName: body.fileName, + fileSize: body.fileSize, + width: body.width ?? null, + height: body.height ?? null, + durationMs: body.durationMs ?? null, + checksum: body.checksum ?? null + } + }); + + return { + id: attachment.id, + taskId: attachment.taskId, + type: attachment.type, + url: attachment.url, + mimeType: attachment.mimeType, + fileName: attachment.fileName, + fileSize: attachment.fileSize, + width: attachment.width, + height: attachment.height, + durationMs: attachment.durationMs, + checksum: attachment.checksum, + createdAt: attachment.createdAt.toISOString(), + updatedAt: attachment.updatedAt.toISOString() + }; + } + + private getS3Client(): S3Client { + if (this.s3Client) { + return this.s3Client; + } + + const endpoint = this.configService.get("S3_ENDPOINT") ?? "http://127.0.0.1:9000"; + const region = this.configService.get("S3_REGION") ?? "us-east-1"; + const forcePathStyle = + this.configService.get("S3_FORCE_PATH_STYLE")?.toLowerCase() !== "false"; + + this.s3Client = new S3Client({ + endpoint, + region, + forcePathStyle, + credentials: { + accessKeyId: this.configService.get("S3_ACCESS_KEY_ID") ?? "minioadmin", + secretAccessKey: this.configService.get("S3_SECRET_ACCESS_KEY") ?? "minioadmin" + } + }); + + return this.s3Client; + } + + private getDefaultBucket(): string { + return this.configService.get("S3_BUCKET") ?? "todolist"; + } + + private getPresignExpiresInSeconds(): number { + const configValue = Number(this.configService.get("S3_PRESIGN_EXPIRES_SECONDS") ?? 900); + if (!Number.isFinite(configValue) || configValue <= 0) { + return 900; + } + + return Math.min(configValue, 604800); + } + + private generateObjectKey(userId: string, fileName: string): string { + const safeFileName = fileName.replace(/[^\w.-]+/g, "_"); + const datePrefix = new Date().toISOString().slice(0, 10); + return `${userId}/${datePrefix}/${randomUUID()}-${safeFileName}`; + } + + private resolveObjectUrl(bucket: string, objectKey: string): string { + const publicBaseUrl = this.configService.get("S3_PUBLIC_BASE_URL"); + if (publicBaseUrl) { + return `${publicBaseUrl.replace(/\/+$/, "")}/${bucket}/${objectKey}`; + } + + const endpoint = this.configService.get("S3_ENDPOINT") ?? "http://127.0.0.1:9000"; + return `${endpoint.replace(/\/+$/, "")}/${bucket}/${objectKey}`; + } + + private resolveAttachmentType(mimeType: string): AttachmentType { + if (mimeType.startsWith("image/")) { + return AttachmentType.IMAGE; + } + + if (mimeType.startsWith("video/")) { + return AttachmentType.VIDEO; + } + + return AttachmentType.FILE; + } + + private async ensureTaskOwnership(userId: string, taskId: string): Promise { + const task = await this.prismaService.task.findFirst({ + where: { + id: taskId, + userId + }, + select: { + id: true + } + }); + + if (!task) { + throw new NotFoundException("任务不存在"); + } + } +} diff --git a/apps/api/src/attachment/dto/complete-attachment.dto.ts b/apps/api/src/attachment/dto/complete-attachment.dto.ts new file mode 100644 index 0000000..2318e3b --- /dev/null +++ b/apps/api/src/attachment/dto/complete-attachment.dto.ts @@ -0,0 +1,89 @@ +import { Transform, Type } from "class-transformer"; +import { + IsEnum, + IsInt, + IsOptional, + IsString, + Max, + MaxLength, + Min, + MinLength +} from "class-validator"; +import { AttachmentType } from "../../../generated/prisma/client"; + +function normalizeString(value: unknown): unknown { + if (typeof value !== "string") { + return value; + } + + return value.trim(); +} + +export class CompleteAttachmentDto { + @Transform(({ value }) => normalizeString(value)) + @IsString() + @MinLength(1) + @MaxLength(255) + objectKey!: string; + + @Transform(({ value }) => normalizeString(value)) + @IsOptional() + @IsString() + @MaxLength(100) + bucket?: string; + + @Transform(({ value }) => normalizeString(value)) + @IsString() + @MinLength(1) + @MaxLength(255) + fileName!: string; + + @Transform(({ value }) => normalizeString(value)) + @IsString() + @MinLength(1) + @MaxLength(255) + mimeType!: string; + + @Type(() => Number) + @IsInt() + @Min(1) + @Max(1073741824) + fileSize!: number; + + @IsOptional() + @IsEnum(AttachmentType) + type?: AttachmentType; + + @Transform(({ value }) => normalizeString(value)) + @IsOptional() + @IsString() + @MaxLength(255) + taskId?: string; + + @Transform(({ value }) => normalizeString(value)) + @IsOptional() + @IsString() + @MaxLength(128) + checksum?: string; + + @Type(() => Number) + @IsOptional() + @IsInt() + @Min(1) + @Max(100000) + width?: number; + + @Type(() => Number) + @IsOptional() + @IsInt() + @Min(1) + @Max(100000) + height?: number; + + @Type(() => Number) + @IsOptional() + @IsInt() + @Min(1) + @Max(86400000) + durationMs?: number; +} diff --git a/apps/api/src/attachment/dto/presign-attachment.dto.ts b/apps/api/src/attachment/dto/presign-attachment.dto.ts new file mode 100644 index 0000000..9eda1a9 --- /dev/null +++ b/apps/api/src/attachment/dto/presign-attachment.dto.ts @@ -0,0 +1,35 @@ +import { Transform } from "class-transformer"; +import { IsInt, IsOptional, IsString, Max, MaxLength, Min, MinLength } from "class-validator"; + +function normalizeString(value: unknown): unknown { + if (typeof value !== "string") { + return value; + } + + return value.trim(); +} + +export class PresignAttachmentDto { + @Transform(({ value }) => normalizeString(value)) + @IsString() + @MinLength(1) + @MaxLength(255) + fileName!: string; + + @Transform(({ value }) => normalizeString(value)) + @IsString() + @MinLength(1) + @MaxLength(255) + mimeType!: string; + + @IsInt() + @Min(1) + @Max(1073741824) + fileSize!: number; + + @Transform(({ value }) => normalizeString(value)) + @IsOptional() + @IsString() + @MaxLength(255) + taskId?: string; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 051c827..4726407 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,6 +31,12 @@ importers: apps/api: dependencies: + "@aws-sdk/client-s3": + specifier: ^3.1024.0 + version: 3.1024.0 + "@aws-sdk/s3-request-presigner": + specifier: ^3.1024.0 + version: 3.1024.0 "@nestjs/common": specifier: ^11.1.18 version: 11.1.18(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -98,6 +104,299 @@ importers: packages/tsconfig: {} packages: + "@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.1024.0": + resolution: + { + integrity: sha512-8qdO5aLCzaf9l0RdrSBW1iIroRKP2QBqtZ6lkrtHKiaaH0B18xEn+lrEgiN/eCf3uRAYk4cqbnI2XcWzm+7dDQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/core@3.973.26": + resolution: + { + integrity: sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/crc64-nvme@3.972.5": + resolution: + { + integrity: sha512-2VbTstbjKdT+yKi8m7b3a9CiVac+pL/IY2PHJwsaGkkHmuuqkJZIErPck1h6P3T9ghQMLSdMPyW6Qp7Di5swFg== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-env@3.972.24": + resolution: + { + integrity: sha512-FWg8uFmT6vQM7VuzELzwVo5bzExGaKHdubn0StjgrcU5FvuLExUe+k06kn/40uKv59rYzhez8eFNM4yYE/Yb/w== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-http@3.972.26": + resolution: + { + integrity: sha512-CY4ppZ+qHYqcXqBVi//sdHST1QK3KzOEiLtpLsc9W2k2vfZPKExGaQIsOwcyvjpjUEolotitmd3mUNY56IwDEA== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-ini@3.972.28": + resolution: + { + integrity: sha512-wXYvq3+uQcZV7k+bE4yDXCTBdzWTU9x/nMiKBfzInmv6yYK1veMK0AKvRfRBd72nGWYKcL6AxwiPg9z/pYlgpw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-login@3.972.28": + resolution: + { + integrity: sha512-ZSTfO6jqUTCysbdBPtEX5OUR//3rbD0lN7jO3sQeS2Gjr/Y+DT6SbIJ0oT2cemNw3UzKu97sNONd1CwNMthuZQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-node@3.972.29": + resolution: + { + integrity: sha512-clSzDcvndpFJAggLDnDb36sPdlZYyEs5Zm6zgZjjUhwsJgSWiWKwFIXUVBcbruidNyBdbpOv2tNDL9sX8y3/0g== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-process@3.972.24": + resolution: + { + integrity: sha512-Q2k/XLrFXhEztPHqj4SLCNID3hEPdlhh1CDLBpNnM+1L8fq7P+yON9/9M1IGN/dA5W45v44ylERfXtDAlmMNmw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-sso@3.972.28": + resolution: + { + integrity: sha512-IoUlmKMLEITFn1SiCTjPfR6KrE799FBo5baWyk/5Ppar2yXZoUdaRqZzJzK6TcJxx450M8m8DbpddRVYlp5R/A== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/credential-provider-web-identity@3.972.28": + resolution: + { + integrity: sha512-d+6h0SD8GGERzKe27v5rOzNGKOl0D+l0bWJdqrxH8WSQzHzjsQFIAPgIeOTUwBHVsKKwtSxc91K/SWax6XgswQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-bucket-endpoint@3.972.8": + resolution: + { + integrity: sha512-WR525Rr2QJSETa9a050isktyWi/4yIGcmY3BQ1kpHqb0LqUglQHCS8R27dTJxxWNZvQ0RVGtEZjTCbZJpyF3Aw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-expect-continue@3.972.8": + resolution: + { + integrity: sha512-5DTBTiotEES1e2jOHAq//zyzCjeMB78lEHd35u15qnrid4Nxm7diqIf9fQQ3Ov0ChH1V3Vvt13thOnrACmfGVQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-flexible-checksums@3.974.6": + resolution: + { + integrity: sha512-YckB8k1ejbyCg/g36gUMFLNzE4W5cERIa4MtsdO+wpTmJEP0+TB7okWIt7d8TDOvnb7SwvxJ21E4TGOBxFpSWQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-host-header@3.972.8": + resolution: + { + integrity: sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-location-constraint@3.972.8": + resolution: + { + integrity: sha512-KaUoFuoFPziIa98DSQsTPeke1gvGXlc5ZGMhy+b+nLxZ4A7jmJgLzjEF95l8aOQN2T/qlPP3MrAyELm8ExXucw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-logger@3.972.8": + resolution: + { + integrity: sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-recursion-detection@3.972.9": + resolution: + { + integrity: sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-sdk-s3@3.972.27": + resolution: + { + integrity: sha512-gomO6DZwx+1D/9mbCpcqO5tPBqYBK7DtdgjTIjZ4yvfh/S7ETwAPS0XbJgP2JD8Ycr5CwVrEkV1sFtu3ShXeOw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-ssec@3.972.8": + resolution: + { + integrity: sha512-wqlK0yO/TxEC2UsY9wIlqeeutF6jjLe0f96Pbm40XscTo57nImUk9lBcw0dPgsm0sppFtAkSlDrfpK+pC30Wqw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/middleware-user-agent@3.972.28": + resolution: + { + integrity: sha512-cfWZFlVh7Va9lRay4PN2A9ARFzaBYcA097InT5M2CdRS05ECF5yaz86jET8Wsl2WcyKYEvVr/QNmKtYtafUHtQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/nested-clients@3.996.18": + resolution: + { + integrity: sha512-c7ZSIXrESxHKx2Mcopgd8AlzZgoXMr20fkx5ViPWPOLBvmyhw9VwJx/Govg8Ef/IhEon5R9l53Z8fdYSEmp6VA== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/region-config-resolver@3.972.10": + resolution: + { + integrity: sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/s3-request-presigner@3.1024.0": + resolution: + { + integrity: sha512-KNoGsXnTfBxPqrtV2Owd4mrLnhTHRsOz6Hdaz+As5czGMQuPchoRvG1BJzn2NFRGLt/HSJAXVn+G6IhtRIDe+Q== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/signature-v4-multi-region@3.996.15": + resolution: + { + integrity: sha512-Ukw2RpqvaL96CjfH/FgfBmy/ZosHBqoHBCFsN61qGg99F33vpntIVii8aNeh65XuOja73arSduskoa4OJea9RQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/token-providers@3.1021.0": + resolution: + { + integrity: sha512-TKY6h9spUk3OLs5v1oAgW9mAeBE3LAGNBwJokLy96wwmd4W2v/tYlXseProyed9ValDj2u1jK/4Rg1T+1NXyJA== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/types@3.973.6": + resolution: + { + integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-arn-parser@3.972.3": + resolution: + { + integrity: sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-endpoints@3.996.5": + resolution: + { + integrity: sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-format-url@3.972.8": + resolution: + { + integrity: sha512-J6DS9oocrgxM8xlUTTmQOuwRF6rnAGEujAN9SAzllcrQmwn5iJ58ogxy3SEhD0Q7JZvlA5jvIXBkpQRqEqlE9A== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-locate-window@3.965.5": + resolution: + { + integrity: sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ== + } + engines: { node: ">=20.0.0" } + + "@aws-sdk/util-user-agent-browser@3.972.8": + resolution: + { + integrity: sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA== + } + + "@aws-sdk/util-user-agent-node@3.973.14": + resolution: + { + integrity: sha512-vNSB/DYaPOyujVZBg/zUznH9QC142MaTHVmaFlF7uzzfg3CgT9f/l4C0Yi+vU/tbBhxVcXVB90Oohk5+o+ZbWw== + } + engines: { node: ">=20.0.0" } + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + + "@aws-sdk/xml-builder@3.972.16": + resolution: + { + integrity: sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A== + } + engines: { node: ">=20.0.0" } + + "@aws/lambda-invoke-store@0.2.4": + resolution: + { + integrity: sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ== + } + engines: { node: ">=18.0.0" } + "@borewit/text-codec@0.2.2": resolution: { @@ -622,6 +921,377 @@ packages: integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w== } + "@smithy/chunked-blob-reader-native@4.2.3": + resolution: + { + integrity: sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw== + } + engines: { node: ">=18.0.0" } + + "@smithy/chunked-blob-reader@5.2.2": + resolution: + { + integrity: sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw== + } + engines: { node: ">=18.0.0" } + + "@smithy/config-resolver@4.4.13": + resolution: + { + integrity: sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg== + } + engines: { node: ">=18.0.0" } + + "@smithy/core@3.23.13": + resolution: + { + integrity: sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q== + } + engines: { node: ">=18.0.0" } + + "@smithy/credential-provider-imds@4.2.12": + resolution: + { + integrity: sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg== + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-codec@4.2.12": + resolution: + { + integrity: sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA== + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-browser@4.2.12": + resolution: + { + integrity: sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A== + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-config-resolver@4.3.12": + resolution: + { + integrity: sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q== + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-node@4.2.12": + resolution: + { + integrity: sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA== + } + engines: { node: ">=18.0.0" } + + "@smithy/eventstream-serde-universal@4.2.12": + resolution: + { + integrity: sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/fetch-http-handler@5.3.15": + resolution: + { + integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A== + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-blob-browser@4.2.13": + resolution: + { + integrity: sha512-YrF4zWKh+ghLuquldj6e/RzE3xZYL8wIPfkt0MqCRphVICjyyjH8OwKD7LLlKpVEbk4FLizFfC1+gwK6XQdR3g== + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-node@4.2.12": + resolution: + { + integrity: sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w== + } + engines: { node: ">=18.0.0" } + + "@smithy/hash-stream-node@4.2.12": + resolution: + { + integrity: sha512-O3YbmGExeafuM/kP7Y8r6+1y0hIh3/zn6GROx0uNlB54K9oihAL75Qtc+jFfLNliTi6pxOAYZrRKD9A7iA6UFw== + } + engines: { node: ">=18.0.0" } + + "@smithy/invalid-dependency@4.2.12": + resolution: + { + integrity: sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g== + } + 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.2.2": + resolution: + { + integrity: sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow== + } + engines: { node: ">=18.0.0" } + + "@smithy/md5-js@4.2.12": + resolution: + { + integrity: sha512-W/oIpHCpWU2+iAkfZYyGWE+qkpuf3vEXHLxQQDx9FPNZTTdnul0dZ2d/gUFrtQ5je1G2kp4cjG0/24YueG2LbQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-content-length@4.2.12": + resolution: + { + integrity: sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA== + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-endpoint@4.4.28": + resolution: + { + integrity: sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-retry@4.4.46": + resolution: + { + integrity: sha512-SpvWNNOPOrKQGUqZbEPO+es+FRXMWvIyzUKUOYdDgdlA6BdZj/R58p4umoQ76c2oJC44PiM7mKizyyex1IJzow== + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-serde@4.2.16": + resolution: + { + integrity: sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA== + } + engines: { node: ">=18.0.0" } + + "@smithy/middleware-stack@4.2.12": + resolution: + { + integrity: sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw== + } + engines: { node: ">=18.0.0" } + + "@smithy/node-config-provider@4.3.12": + resolution: + { + integrity: sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw== + } + engines: { node: ">=18.0.0" } + + "@smithy/node-http-handler@4.5.1": + resolution: + { + integrity: sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw== + } + engines: { node: ">=18.0.0" } + + "@smithy/property-provider@4.2.12": + resolution: + { + integrity: sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A== + } + engines: { node: ">=18.0.0" } + + "@smithy/protocol-http@5.3.12": + resolution: + { + integrity: sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw== + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-builder@4.2.12": + resolution: + { + integrity: sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg== + } + engines: { node: ">=18.0.0" } + + "@smithy/querystring-parser@4.2.12": + resolution: + { + integrity: sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw== + } + engines: { node: ">=18.0.0" } + + "@smithy/service-error-classification@4.2.12": + resolution: + { + integrity: sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/shared-ini-file-loader@4.4.7": + resolution: + { + integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw== + } + engines: { node: ">=18.0.0" } + + "@smithy/signature-v4@5.3.12": + resolution: + { + integrity: sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw== + } + engines: { node: ">=18.0.0" } + + "@smithy/smithy-client@4.12.8": + resolution: + { + integrity: sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA== + } + engines: { node: ">=18.0.0" } + + "@smithy/types@4.13.1": + resolution: + { + integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g== + } + engines: { node: ">=18.0.0" } + + "@smithy/url-parser@4.2.12": + resolution: + { + integrity: sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-base64@4.3.2": + resolution: + { + integrity: sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-browser@4.2.2": + resolution: + { + integrity: sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-body-length-node@4.2.3": + resolution: + { + integrity: sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g== + } + 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.2.2": + resolution: + { + integrity: sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-config-provider@4.2.2": + resolution: + { + integrity: sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-browser@4.3.44": + resolution: + { + integrity: sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-defaults-mode-node@4.2.48": + resolution: + { + integrity: sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-endpoints@3.3.3": + resolution: + { + integrity: sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-hex-encoding@4.2.2": + resolution: + { + integrity: sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-middleware@4.2.12": + resolution: + { + integrity: sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-retry@4.2.13": + resolution: + { + integrity: sha512-qQQsIvL0MGIbUjeSrg0/VlQ3jGNKyM3/2iU3FPNgy01z+Sp4OvcaxbgIoFOTvB61ZoohtutuOvOcgmhbD0katQ== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-stream@4.5.21": + resolution: + { + integrity: sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-uri-escape@4.2.2": + resolution: + { + integrity: sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw== + } + 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.2.2": + resolution: + { + integrity: sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw== + } + engines: { node: ">=18.0.0" } + + "@smithy/util-waiter@4.2.14": + resolution: + { + integrity: sha512-2zqq5o/oizvMaFUlNiTyZ7dbgYv1a893aGut2uaxtbzTx/VYYnRxWzDHuD/ftgcw94ffenua+ZNLrbqwUYE+Bg== + } + engines: { node: ">=18.0.0" } + + "@smithy/uuid@1.1.2": + resolution: + { + integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g== + } + engines: { node: ">=18.0.0" } + "@standard-schema/spec@1.1.0": resolution: { @@ -974,6 +1644,12 @@ packages: } engines: { node: ">=18" } + bowser@2.14.1: + resolution: + { + integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg== + } + brace-expansion@1.1.13: resolution: { @@ -1507,6 +2183,19 @@ packages: integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== } + fast-xml-builder@1.1.4: + resolution: + { + integrity: sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg== + } + + fast-xml-parser@5.5.8: + resolution: + { + integrity: sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ== + } + hasBin: true + file-entry-cache@8.0.0: resolution: { @@ -2249,6 +2938,13 @@ packages: } engines: { node: ">=8" } + path-expression-matcher@1.2.1: + resolution: + { + integrity: sha512-d7gQQmLvAKXKXE2GeP9apIGbMYKz88zWdsn/BN2HRWVQsDFdUY36WSLTY0Jvd4HWi7Fb30gQ62oAOzdgJA6fZw== + } + engines: { node: ">=14.0.0" } + path-is-absolute@1.0.1: resolution: { @@ -2723,6 +3419,12 @@ packages: } engines: { node: ">=0.10.0" } + strnum@2.2.2: + resolution: + { + integrity: sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA== + } + strtok3@10.3.5: resolution: { @@ -2998,6 +3700,468 @@ packages: } snapshots: + "@aws-crypto/crc32@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.6 + tslib: 2.8.1 + + "@aws-crypto/crc32c@5.2.0": + dependencies: + "@aws-crypto/util": 5.2.0 + "@aws-sdk/types": 3.973.6 + 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.973.6 + "@aws-sdk/util-locate-window": 3.965.5 + "@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.973.6 + "@aws-sdk/util-locate-window": 3.965.5 + "@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.973.6 + 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.973.6 + "@smithy/util-utf8": 2.3.0 + tslib: 2.8.1 + + "@aws-sdk/client-s3@3.1024.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.973.26 + "@aws-sdk/credential-provider-node": 3.972.29 + "@aws-sdk/middleware-bucket-endpoint": 3.972.8 + "@aws-sdk/middleware-expect-continue": 3.972.8 + "@aws-sdk/middleware-flexible-checksums": 3.974.6 + "@aws-sdk/middleware-host-header": 3.972.8 + "@aws-sdk/middleware-location-constraint": 3.972.8 + "@aws-sdk/middleware-logger": 3.972.8 + "@aws-sdk/middleware-recursion-detection": 3.972.9 + "@aws-sdk/middleware-sdk-s3": 3.972.27 + "@aws-sdk/middleware-ssec": 3.972.8 + "@aws-sdk/middleware-user-agent": 3.972.28 + "@aws-sdk/region-config-resolver": 3.972.10 + "@aws-sdk/signature-v4-multi-region": 3.996.15 + "@aws-sdk/types": 3.973.6 + "@aws-sdk/util-endpoints": 3.996.5 + "@aws-sdk/util-user-agent-browser": 3.972.8 + "@aws-sdk/util-user-agent-node": 3.973.14 + "@smithy/config-resolver": 4.4.13 + "@smithy/core": 3.23.13 + "@smithy/eventstream-serde-browser": 4.2.12 + "@smithy/eventstream-serde-config-resolver": 4.3.12 + "@smithy/eventstream-serde-node": 4.2.12 + "@smithy/fetch-http-handler": 5.3.15 + "@smithy/hash-blob-browser": 4.2.13 + "@smithy/hash-node": 4.2.12 + "@smithy/hash-stream-node": 4.2.12 + "@smithy/invalid-dependency": 4.2.12 + "@smithy/md5-js": 4.2.12 + "@smithy/middleware-content-length": 4.2.12 + "@smithy/middleware-endpoint": 4.4.28 + "@smithy/middleware-retry": 4.4.46 + "@smithy/middleware-serde": 4.2.16 + "@smithy/middleware-stack": 4.2.12 + "@smithy/node-config-provider": 4.3.12 + "@smithy/node-http-handler": 4.5.1 + "@smithy/protocol-http": 5.3.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + "@smithy/url-parser": 4.2.12 + "@smithy/util-base64": 4.3.2 + "@smithy/util-body-length-browser": 4.2.2 + "@smithy/util-body-length-node": 4.2.3 + "@smithy/util-defaults-mode-browser": 4.3.44 + "@smithy/util-defaults-mode-node": 4.2.48 + "@smithy/util-endpoints": 3.3.3 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-retry": 4.2.13 + "@smithy/util-stream": 4.5.21 + "@smithy/util-utf8": 4.2.2 + "@smithy/util-waiter": 4.2.14 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/core@3.973.26": + dependencies: + "@aws-sdk/types": 3.973.6 + "@aws-sdk/xml-builder": 3.972.16 + "@smithy/core": 3.23.13 + "@smithy/node-config-provider": 4.3.12 + "@smithy/property-provider": 4.2.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/signature-v4": 5.3.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + "@smithy/util-base64": 4.3.2 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/crc64-nvme@3.972.5": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-env@3.972.24": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/types": 3.973.6 + "@smithy/property-provider": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-http@3.972.26": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/types": 3.973.6 + "@smithy/fetch-http-handler": 5.3.15 + "@smithy/node-http-handler": 4.5.1 + "@smithy/property-provider": 4.2.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + "@smithy/util-stream": 4.5.21 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-ini@3.972.28": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/credential-provider-env": 3.972.24 + "@aws-sdk/credential-provider-http": 3.972.26 + "@aws-sdk/credential-provider-login": 3.972.28 + "@aws-sdk/credential-provider-process": 3.972.24 + "@aws-sdk/credential-provider-sso": 3.972.28 + "@aws-sdk/credential-provider-web-identity": 3.972.28 + "@aws-sdk/nested-clients": 3.996.18 + "@aws-sdk/types": 3.973.6 + "@smithy/credential-provider-imds": 4.2.12 + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-login@3.972.28": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/nested-clients": 3.996.18 + "@aws-sdk/types": 3.973.6 + "@smithy/property-provider": 4.2.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-node@3.972.29": + dependencies: + "@aws-sdk/credential-provider-env": 3.972.24 + "@aws-sdk/credential-provider-http": 3.972.26 + "@aws-sdk/credential-provider-ini": 3.972.28 + "@aws-sdk/credential-provider-process": 3.972.24 + "@aws-sdk/credential-provider-sso": 3.972.28 + "@aws-sdk/credential-provider-web-identity": 3.972.28 + "@aws-sdk/types": 3.973.6 + "@smithy/credential-provider-imds": 4.2.12 + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-process@3.972.24": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/types": 3.973.6 + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/credential-provider-sso@3.972.28": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/nested-clients": 3.996.18 + "@aws-sdk/token-providers": 3.1021.0 + "@aws-sdk/types": 3.973.6 + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/credential-provider-web-identity@3.972.28": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/nested-clients": 3.996.18 + "@aws-sdk/types": 3.973.6 + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/middleware-bucket-endpoint@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@aws-sdk/util-arn-parser": 3.972.3 + "@smithy/node-config-provider": 4.3.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-config-provider": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/middleware-expect-continue@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/middleware-flexible-checksums@3.974.6": + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@aws-crypto/crc32c": 5.2.0 + "@aws-crypto/util": 5.2.0 + "@aws-sdk/core": 3.973.26 + "@aws-sdk/crc64-nvme": 3.972.5 + "@aws-sdk/types": 3.973.6 + "@smithy/is-array-buffer": 4.2.2 + "@smithy/node-config-provider": 4.3.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-stream": 4.5.21 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/middleware-host-header@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/middleware-location-constraint@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/middleware-logger@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/middleware-recursion-detection@3.972.9": + dependencies: + "@aws-sdk/types": 3.973.6 + "@aws/lambda-invoke-store": 0.2.4 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/middleware-sdk-s3@3.972.27": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/types": 3.973.6 + "@aws-sdk/util-arn-parser": 3.972.3 + "@smithy/core": 3.23.13 + "@smithy/node-config-provider": 4.3.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/signature-v4": 5.3.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + "@smithy/util-config-provider": 4.2.2 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-stream": 4.5.21 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/middleware-ssec@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/middleware-user-agent@3.972.28": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/types": 3.973.6 + "@aws-sdk/util-endpoints": 3.996.5 + "@smithy/core": 3.23.13 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-retry": 4.2.13 + tslib: 2.8.1 + + "@aws-sdk/nested-clients@3.996.18": + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": 3.973.26 + "@aws-sdk/middleware-host-header": 3.972.8 + "@aws-sdk/middleware-logger": 3.972.8 + "@aws-sdk/middleware-recursion-detection": 3.972.9 + "@aws-sdk/middleware-user-agent": 3.972.28 + "@aws-sdk/region-config-resolver": 3.972.10 + "@aws-sdk/types": 3.973.6 + "@aws-sdk/util-endpoints": 3.996.5 + "@aws-sdk/util-user-agent-browser": 3.972.8 + "@aws-sdk/util-user-agent-node": 3.973.14 + "@smithy/config-resolver": 4.4.13 + "@smithy/core": 3.23.13 + "@smithy/fetch-http-handler": 5.3.15 + "@smithy/hash-node": 4.2.12 + "@smithy/invalid-dependency": 4.2.12 + "@smithy/middleware-content-length": 4.2.12 + "@smithy/middleware-endpoint": 4.4.28 + "@smithy/middleware-retry": 4.4.46 + "@smithy/middleware-serde": 4.2.16 + "@smithy/middleware-stack": 4.2.12 + "@smithy/node-config-provider": 4.3.12 + "@smithy/node-http-handler": 4.5.1 + "@smithy/protocol-http": 5.3.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + "@smithy/url-parser": 4.2.12 + "@smithy/util-base64": 4.3.2 + "@smithy/util-body-length-browser": 4.2.2 + "@smithy/util-body-length-node": 4.2.3 + "@smithy/util-defaults-mode-browser": 4.3.44 + "@smithy/util-defaults-mode-node": 4.2.48 + "@smithy/util-endpoints": 3.3.3 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-retry": 4.2.13 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/region-config-resolver@3.972.10": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/config-resolver": 4.4.13 + "@smithy/node-config-provider": 4.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/s3-request-presigner@3.1024.0": + dependencies: + "@aws-sdk/signature-v4-multi-region": 3.996.15 + "@aws-sdk/types": 3.973.6 + "@aws-sdk/util-format-url": 3.972.8 + "@smithy/middleware-endpoint": 4.4.28 + "@smithy/protocol-http": 5.3.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/signature-v4-multi-region@3.996.15": + dependencies: + "@aws-sdk/middleware-sdk-s3": 3.972.27 + "@aws-sdk/types": 3.973.6 + "@smithy/protocol-http": 5.3.12 + "@smithy/signature-v4": 5.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/token-providers@3.1021.0": + dependencies: + "@aws-sdk/core": 3.973.26 + "@aws-sdk/nested-clients": 3.996.18 + "@aws-sdk/types": 3.973.6 + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + "@aws-sdk/types@3.973.6": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/util-arn-parser@3.972.3": + dependencies: + tslib: 2.8.1 + + "@aws-sdk/util-endpoints@3.996.5": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/types": 4.13.1 + "@smithy/url-parser": 4.2.12 + "@smithy/util-endpoints": 3.3.3 + tslib: 2.8.1 + + "@aws-sdk/util-format-url@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/querystring-builder": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@aws-sdk/util-locate-window@3.965.5": + dependencies: + tslib: 2.8.1 + + "@aws-sdk/util-user-agent-browser@3.972.8": + dependencies: + "@aws-sdk/types": 3.973.6 + "@smithy/types": 4.13.1 + bowser: 2.14.1 + tslib: 2.8.1 + + "@aws-sdk/util-user-agent-node@3.973.14": + dependencies: + "@aws-sdk/middleware-user-agent": 3.972.28 + "@aws-sdk/types": 3.973.6 + "@smithy/node-config-provider": 4.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-config-provider": 4.2.2 + tslib: 2.8.1 + + "@aws-sdk/xml-builder@3.972.16": + dependencies: + "@smithy/types": 4.13.1 + fast-xml-parser: 5.5.8 + tslib: 2.8.1 + + "@aws/lambda-invoke-store@0.2.4": {} + "@borewit/text-codec@0.2.2": {} "@clack/core@0.5.0": @@ -3334,6 +4498,338 @@ snapshots: "@scure/base@2.0.0": {} + "@smithy/chunked-blob-reader-native@4.2.3": + dependencies: + "@smithy/util-base64": 4.3.2 + tslib: 2.8.1 + + "@smithy/chunked-blob-reader@5.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/config-resolver@4.4.13": + dependencies: + "@smithy/node-config-provider": 4.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-config-provider": 4.2.2 + "@smithy/util-endpoints": 3.3.3 + "@smithy/util-middleware": 4.2.12 + tslib: 2.8.1 + + "@smithy/core@3.23.13": + dependencies: + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + "@smithy/url-parser": 4.2.12 + "@smithy/util-base64": 4.3.2 + "@smithy/util-body-length-browser": 4.2.2 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-stream": 4.5.21 + "@smithy/util-utf8": 4.2.2 + "@smithy/uuid": 1.1.2 + tslib: 2.8.1 + + "@smithy/credential-provider-imds@4.2.12": + dependencies: + "@smithy/node-config-provider": 4.3.12 + "@smithy/property-provider": 4.2.12 + "@smithy/types": 4.13.1 + "@smithy/url-parser": 4.2.12 + tslib: 2.8.1 + + "@smithy/eventstream-codec@4.2.12": + dependencies: + "@aws-crypto/crc32": 5.2.0 + "@smithy/types": 4.13.1 + "@smithy/util-hex-encoding": 4.2.2 + tslib: 2.8.1 + + "@smithy/eventstream-serde-browser@4.2.12": + dependencies: + "@smithy/eventstream-serde-universal": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/eventstream-serde-config-resolver@4.3.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/eventstream-serde-node@4.2.12": + dependencies: + "@smithy/eventstream-serde-universal": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/eventstream-serde-universal@4.2.12": + dependencies: + "@smithy/eventstream-codec": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/fetch-http-handler@5.3.15": + dependencies: + "@smithy/protocol-http": 5.3.12 + "@smithy/querystring-builder": 4.2.12 + "@smithy/types": 4.13.1 + "@smithy/util-base64": 4.3.2 + tslib: 2.8.1 + + "@smithy/hash-blob-browser@4.2.13": + dependencies: + "@smithy/chunked-blob-reader": 5.2.2 + "@smithy/chunked-blob-reader-native": 4.2.3 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/hash-node@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + "@smithy/util-buffer-from": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/hash-stream-node@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/invalid-dependency@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/is-array-buffer@2.2.0": + dependencies: + tslib: 2.8.1 + + "@smithy/is-array-buffer@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/md5-js@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/middleware-content-length@4.2.12": + dependencies: + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/middleware-endpoint@4.4.28": + dependencies: + "@smithy/core": 3.23.13 + "@smithy/middleware-serde": 4.2.16 + "@smithy/node-config-provider": 4.3.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + "@smithy/url-parser": 4.2.12 + "@smithy/util-middleware": 4.2.12 + tslib: 2.8.1 + + "@smithy/middleware-retry@4.4.46": + dependencies: + "@smithy/node-config-provider": 4.3.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/service-error-classification": 4.2.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-retry": 4.2.13 + "@smithy/uuid": 1.1.2 + tslib: 2.8.1 + + "@smithy/middleware-serde@4.2.16": + dependencies: + "@smithy/core": 3.23.13 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/middleware-stack@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/node-config-provider@4.3.12": + dependencies: + "@smithy/property-provider": 4.2.12 + "@smithy/shared-ini-file-loader": 4.4.7 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/node-http-handler@4.5.1": + dependencies: + "@smithy/protocol-http": 5.3.12 + "@smithy/querystring-builder": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/property-provider@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/protocol-http@5.3.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/querystring-builder@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + "@smithy/util-uri-escape": 4.2.2 + tslib: 2.8.1 + + "@smithy/querystring-parser@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/service-error-classification@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + + "@smithy/shared-ini-file-loader@4.4.7": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/signature-v4@5.3.12": + dependencies: + "@smithy/is-array-buffer": 4.2.2 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-hex-encoding": 4.2.2 + "@smithy/util-middleware": 4.2.12 + "@smithy/util-uri-escape": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/smithy-client@4.12.8": + dependencies: + "@smithy/core": 3.23.13 + "@smithy/middleware-endpoint": 4.4.28 + "@smithy/middleware-stack": 4.2.12 + "@smithy/protocol-http": 5.3.12 + "@smithy/types": 4.13.1 + "@smithy/util-stream": 4.5.21 + tslib: 2.8.1 + + "@smithy/types@4.13.1": + dependencies: + tslib: 2.8.1 + + "@smithy/url-parser@4.2.12": + dependencies: + "@smithy/querystring-parser": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/util-base64@4.3.2": + dependencies: + "@smithy/util-buffer-from": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-body-length-browser@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-body-length-node@4.2.3": + 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.2.2": + dependencies: + "@smithy/is-array-buffer": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-config-provider@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-defaults-mode-browser@4.3.44": + dependencies: + "@smithy/property-provider": 4.2.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/util-defaults-mode-node@4.2.48": + dependencies: + "@smithy/config-resolver": 4.4.13 + "@smithy/credential-provider-imds": 4.2.12 + "@smithy/node-config-provider": 4.3.12 + "@smithy/property-provider": 4.2.12 + "@smithy/smithy-client": 4.12.8 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/util-endpoints@3.3.3": + dependencies: + "@smithy/node-config-provider": 4.3.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/util-hex-encoding@4.2.2": + dependencies: + tslib: 2.8.1 + + "@smithy/util-middleware@4.2.12": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/util-retry@4.2.13": + dependencies: + "@smithy/service-error-classification": 4.2.12 + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/util-stream@4.5.21": + dependencies: + "@smithy/fetch-http-handler": 5.3.15 + "@smithy/node-http-handler": 4.5.1 + "@smithy/types": 4.13.1 + "@smithy/util-base64": 4.3.2 + "@smithy/util-buffer-from": 4.2.2 + "@smithy/util-hex-encoding": 4.2.2 + "@smithy/util-utf8": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-uri-escape@4.2.2": + 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.2.2": + dependencies: + "@smithy/util-buffer-from": 4.2.2 + tslib: 2.8.1 + + "@smithy/util-waiter@4.2.14": + dependencies: + "@smithy/types": 4.13.1 + tslib: 2.8.1 + + "@smithy/uuid@1.1.2": + dependencies: + tslib: 2.8.1 + "@standard-schema/spec@1.1.0": {} "@tokenizer/inflate@0.4.1": @@ -3527,6 +5023,8 @@ snapshots: transitivePeerDependencies: - supports-color + bowser@2.14.1: {} + brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 @@ -3846,6 +5344,16 @@ snapshots: fast-uri@3.1.0: {} + fast-xml-builder@1.1.4: + dependencies: + path-expression-matcher: 1.2.1 + + fast-xml-parser@5.5.8: + dependencies: + fast-xml-builder: 1.1.4 + path-expression-matcher: 1.2.1 + strnum: 2.2.2 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -4251,6 +5759,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.2.1: {} + path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -4516,6 +6026,8 @@ snapshots: strip-json-comments@2.0.1: {} + strnum@2.2.2: {} + strtok3@10.3.5: dependencies: "@tokenizer/token": 0.3.0