From 07ab053760374081b5b61c55c3720e0550e4c289 Mon Sep 17 00:00:00 2001 From: "Thomas F. K. Jorna" Date: Tue, 25 Feb 2025 18:39:25 +0100 Subject: [PATCH] feat: allow for multipart server uploads (#993) --- core/lib/server/assets.db.test.ts | 48 +++ core/lib/server/assets.ts | 76 ++++- core/package.json | 1 + docker-compose.test.yml | 2 + pnpm-lock.yaml | 517 +++++++++++++++++++++++------- 5 files changed, 527 insertions(+), 117 deletions(-) create mode 100644 core/lib/server/assets.db.test.ts diff --git a/core/lib/server/assets.db.test.ts b/core/lib/server/assets.db.test.ts new file mode 100644 index 000000000..b229b5cfc --- /dev/null +++ b/core/lib/server/assets.db.test.ts @@ -0,0 +1,48 @@ +import fs from "fs/promises"; + +import { beforeAll, describe, expect, it } from "vitest"; + +import { mockServerCode } from "~/lib/__tests__/utils"; +import { env } from "../env/env.mjs"; + +const { createForEachMockedTransaction } = await mockServerCode(); + +const { getTrx } = createForEachMockedTransaction(); + +beforeAll(async () => { + // check if minio is up + + if (!env.ASSETS_STORAGE_ENDPOINT) { + throw new Error( + "You should only run this test against a local minio instance, not to prod S3" + ); + } + + const check = await fetch(env.ASSETS_STORAGE_ENDPOINT, { + method: "OPTIONS", + }); + + if (!check.ok) { + throw new Error( + "Minio is not running. Please setup the test environment properly by running `pnpm -w test:setup`" + ); + } +}); + +describe("assets upload", () => { + it("should be able to upload a file to the minio bucket from the server", async () => { + const { uploadFileToS3 } = await import("./assets"); + + const file = await fs.readFile(new URL("./assets.ts", import.meta.url)); + + const url = await uploadFileToS3("test", "test.ts", file, { + contentType: "text/plain", + }); + + expect(url).toBeDefined(); + + const text = await fetch(url).then((res) => res.text()); + + expect(text).toEqual(file.toString("utf8")); + }); +}); diff --git a/core/lib/server/assets.ts b/core/lib/server/assets.ts index ea93c054a..8826622bd 100644 --- a/core/lib/server/assets.ts +++ b/core/lib/server/assets.ts @@ -1,17 +1,24 @@ import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; +import { Upload } from "@aws-sdk/lib-storage"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import type { PubsId } from "db/public"; +import { logger } from "logger"; import { env } from "../env/env.mjs"; -export const generateSignedAssetUploadUrl = async (pubId: PubsId, fileName: string) => { +let s3Client: S3Client; + +export const getS3Client = () => { + if (s3Client) { + return s3Client; + } + const region = env.ASSETS_REGION; const key = env.ASSETS_UPLOAD_KEY; const secret = env.ASSETS_UPLOAD_SECRET_KEY; - const bucket = env.ASSETS_BUCKET_NAME; - const client = new S3Client({ + s3Client = new S3Client({ endpoint: env.ASSETS_STORAGE_ENDPOINT, region: region, credentials: { @@ -20,9 +27,72 @@ export const generateSignedAssetUploadUrl = async (pubId: PubsId, fileName: stri }, forcePathStyle: !!env.ASSETS_STORAGE_ENDPOINT, // Required for MinIO }); + + return s3Client; +}; + +export const generateSignedAssetUploadUrl = async (pubId: PubsId, fileName: string) => { + const client = getS3Client(); + + const bucket = env.ASSETS_BUCKET_NAME; const command = new PutObjectCommand({ Bucket: bucket, Key: `${pubId}/${fileName}`, }); + return await getSignedUrl(client, command, { expiresIn: 3600 }); }; + +/** + * Uploads a file to the S3 bucket using the S3 client directly + * @param id - id under which the file will be stored. eg for a pub, the pubId. for community assets like the logo, the communityId. for user avatars, the userId. + * @param fileName - name of the file to be stored + * @param fileData - the file data to upload (Buffer or Uint8Array) + * @param contentType - MIME type of the file (e.g., 'image/jpeg') + * @returns the URL of the uploaded file + */ +export const uploadFileToS3 = async ( + id: string, + fileName: string, + fileData: Buffer | Uint8Array, + { + contentType, + queueSize, + partSize, + progressCallback, + }: { + contentType: string; + queueSize?: number; + partSize?: number; + progressCallback?: (progress: any) => void; + } +): Promise => { + const client = getS3Client(); + const bucket = env.ASSETS_BUCKET_NAME; + const key = `${id}/${fileName}`; + + const parallelUploads3 = new Upload({ + client, + params: { + Bucket: bucket, + Key: key, + Body: fileData, + ContentType: contentType, + }, + queueSize: queueSize ?? 3, // optional concurrency configuration + partSize: partSize ?? 1024 * 1024 * 5, // optional size of each part, in bytes, at least 5MB + leavePartsOnError: false, // optional manually handle dropped parts + }); + + parallelUploads3.on( + "httpUploadProgress", + progressCallback ?? + ((progress) => { + logger.debug(progress); + }) + ); + + const result = await parallelUploads3.done(); + + return result.Location!; +}; diff --git a/core/package.json b/core/package.json index 9dd46331d..56f62dd6a 100644 --- a/core/package.json +++ b/core/package.json @@ -54,6 +54,7 @@ }, "dependencies": { "@aws-sdk/client-s3": "^3.445.0", + "@aws-sdk/lib-storage": "^3.750.0", "@aws-sdk/s3-request-presigner": "^3.445.0", "@dagrejs/dagre": "^1.0.4", "@dnd-kit/core": "^6.1.0", diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 8c0fedbae..43fa08ba2 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -26,6 +26,7 @@ services: networks: - app-network profiles: + - test - integration minio-init: @@ -39,6 +40,7 @@ services: networks: - app-network profiles: + - test - integration inbucket: diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb37967cb..0f1a8566e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -232,6 +232,9 @@ importers: '@aws-sdk/client-s3': specifier: ^3.445.0 version: 3.645.0 + '@aws-sdk/lib-storage': + specifier: ^3.750.0 + version: 3.750.0(@aws-sdk/client-s3@3.645.0) '@aws-sdk/s3-request-presigner': specifier: ^3.445.0 version: 3.645.0 @@ -1394,6 +1397,12 @@ packages: peerDependencies: '@aws-sdk/client-sts': ^3.621.0 + '@aws-sdk/lib-storage@3.750.0': + resolution: {integrity: sha512-2IHbhUzlKtiAZVW7S5jkJfVDj5pJC9TldHGJLYRAR9GReG9HhK6mI7kLnYE9jf3GchWfe/Bn3wqSwh3BIf0OZQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@aws-sdk/client-s3': ^3.750.0 + '@aws-sdk/middleware-bucket-endpoint@3.620.0': resolution: {integrity: sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==} engines: {node: '>=16.0.0'} @@ -5388,6 +5397,10 @@ packages: resolution: {integrity: sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==} engines: {node: '>=16.0.0'} + '@smithy/abort-controller@4.0.1': + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} + engines: {node: '>=18.0.0'} + '@smithy/chunked-blob-reader-native@3.0.0': resolution: {integrity: sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==} @@ -5402,6 +5415,10 @@ packages: resolution: {integrity: sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==} engines: {node: '>=16.0.0'} + '@smithy/core@3.1.5': + resolution: {integrity: sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@3.2.1': resolution: {integrity: sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==} engines: {node: '>=16.0.0'} @@ -5428,6 +5445,10 @@ packages: '@smithy/fetch-http-handler@3.2.5': resolution: {integrity: sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==} + '@smithy/fetch-http-handler@5.0.1': + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} + engines: {node: '>=18.0.0'} + '@smithy/hash-blob-browser@3.1.3': resolution: {integrity: sha512-im9wAU9mANWW0OP0YGqwX3lw0nXG0ngyIcKQ8V/MUz1r7A6uO2lpPqKmAsH4VPGNLP2JPUhj4aW/m5UKkxX/IA==} @@ -5450,6 +5471,10 @@ packages: resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} engines: {node: '>=16.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@3.0.4': resolution: {integrity: sha512-qSlqr/+hybufIJgxQW2gYzGE6ywfOxkjjJVojbbmv4MtxfdDFfzRew+NOIOXcYgazW0f8OYBTIKsmNsjxpvnng==} @@ -5461,6 +5486,10 @@ packages: resolution: {integrity: sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==} engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@4.0.6': + resolution: {integrity: sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-retry@3.0.16': resolution: {integrity: sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==} engines: {node: '>=16.0.0'} @@ -5469,34 +5498,66 @@ packages: resolution: {integrity: sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==} engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@4.0.2': + resolution: {integrity: sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@3.0.4': resolution: {integrity: sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==} engines: {node: '>=16.0.0'} + '@smithy/middleware-stack@4.0.1': + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} + engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@3.1.5': resolution: {integrity: sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==} engines: {node: '>=16.0.0'} + '@smithy/node-config-provider@4.0.1': + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} + engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@3.2.0': resolution: {integrity: sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==} engines: {node: '>=16.0.0'} + '@smithy/node-http-handler@4.0.3': + resolution: {integrity: sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@3.1.4': resolution: {integrity: sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==} engines: {node: '>=16.0.0'} + '@smithy/property-provider@4.0.1': + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} + engines: {node: '>=18.0.0'} + '@smithy/protocol-http@4.1.1': resolution: {integrity: sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==} engines: {node: '>=16.0.0'} + '@smithy/protocol-http@5.0.1': + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@3.0.4': resolution: {integrity: sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==} engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@4.0.1': + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@3.0.4': resolution: {integrity: sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==} engines: {node: '>=16.0.0'} + '@smithy/querystring-parser@4.0.1': + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} + engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@3.0.4': resolution: {integrity: sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==} engines: {node: '>=16.0.0'} @@ -5505,6 +5566,10 @@ packages: resolution: {integrity: sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==} engines: {node: '>=16.0.0'} + '@smithy/shared-ini-file-loader@4.0.1': + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} + engines: {node: '>=18.0.0'} + '@smithy/signature-v4@4.1.1': resolution: {integrity: sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==} engines: {node: '>=16.0.0'} @@ -5513,20 +5578,40 @@ packages: resolution: {integrity: sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==} engines: {node: '>=16.0.0'} + '@smithy/smithy-client@4.1.6': + resolution: {integrity: sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==} + engines: {node: '>=18.0.0'} + '@smithy/types@3.4.0': resolution: {integrity: sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==} engines: {node: '>=16.0.0'} + '@smithy/types@4.1.0': + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@3.0.4': resolution: {integrity: sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==} + '@smithy/url-parser@4.0.1': + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} + engines: {node: '>=18.0.0'} + '@smithy/util-base64@3.0.0': resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} engines: {node: '>=16.0.0'} + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + '@smithy/util-body-length-browser@3.0.0': resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + '@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@3.0.0': resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} engines: {node: '>=16.0.0'} @@ -5539,6 +5624,10 @@ packages: resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} engines: {node: '>=16.0.0'} + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + '@smithy/util-config-provider@3.0.0': resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} engines: {node: '>=16.0.0'} @@ -5559,10 +5648,18 @@ packages: resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} engines: {node: '>=16.0.0'} + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + '@smithy/util-middleware@3.0.4': resolution: {integrity: sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==} engines: {node: '>=16.0.0'} + '@smithy/util-middleware@4.0.1': + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} + engines: {node: '>=18.0.0'} + '@smithy/util-retry@3.0.4': resolution: {integrity: sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==} engines: {node: '>=16.0.0'} @@ -5571,10 +5668,18 @@ packages: resolution: {integrity: sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==} engines: {node: '>=16.0.0'} + '@smithy/util-stream@4.1.2': + resolution: {integrity: sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==} + engines: {node: '>=18.0.0'} + '@smithy/util-uri-escape@3.0.0': resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} engines: {node: '>=16.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'} @@ -5583,6 +5688,10 @@ packages: resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} engines: {node: '>=16.0.0'} + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + '@smithy/util-waiter@3.1.3': resolution: {integrity: sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA==} engines: {node: '>=16.0.0'} @@ -6914,6 +7023,9 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.6.0: + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -8939,7 +9051,6 @@ packages: resolution: {integrity: sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw==} engines: {node: '>=8.17.0'} hasBin: true - bundledDependencies: [] jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -10966,6 +11077,9 @@ packages: prettier: optional: true + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -12015,13 +12129,13 @@ snapshots: dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.609.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.609.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: @@ -12030,7 +12144,7 @@ snapshots: '@aws-sdk/types': 3.609.0 '@aws-sdk/util-locate-window': 3.568.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-crypto/sha256-browser@5.2.0': dependencies: @@ -12040,23 +12154,23 @@ snapshots: '@aws-sdk/types': 3.609.0 '@aws-sdk/util-locate-window': 3.568.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.609.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@aws-crypto/util@5.2.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/util-utf8': 2.3.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/client-s3@3.645.0': dependencies: @@ -12162,7 +12276,7 @@ snapshots: '@smithy/util-middleware': 3.0.4 '@smithy/util-retry': 3.0.4 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -12205,7 +12319,7 @@ snapshots: '@smithy/util-middleware': 3.0.4 '@smithy/util-retry': 3.0.4 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -12250,7 +12364,7 @@ snapshots: '@smithy/util-middleware': 3.0.4 '@smithy/util-retry': 3.0.4 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -12265,14 +12379,14 @@ snapshots: '@smithy/types': 3.4.0 '@smithy/util-middleware': 3.0.4 fast-xml-parser: 4.4.1 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/credential-provider-env@3.620.1': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.4 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.635.0': dependencies: @@ -12284,7 +12398,7 @@ snapshots: '@smithy/smithy-client': 3.3.0 '@smithy/types': 3.4.0 '@smithy/util-stream': 3.1.4 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/credential-provider-ini@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))(@aws-sdk/client-sts@3.645.0)': dependencies: @@ -12299,7 +12413,7 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/shared-ini-file-loader': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt @@ -12317,7 +12431,7 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/shared-ini-file-loader': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - '@aws-sdk/client-sts' @@ -12329,7 +12443,7 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/shared-ini-file-loader': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/credential-provider-sso@3.645.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))': dependencies: @@ -12339,7 +12453,7 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/shared-ini-file-loader': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' - aws-crt @@ -12350,7 +12464,18 @@ snapshots: '@aws-sdk/types': 3.609.0 '@smithy/property-provider': 3.1.4 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@aws-sdk/lib-storage@3.750.0(@aws-sdk/client-s3@3.645.0)': + dependencies: + '@aws-sdk/client-s3': 3.645.0 + '@smithy/abort-controller': 4.0.1 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/smithy-client': 4.1.6 + buffer: 5.6.0 + events: 3.3.0 + stream-browserify: 3.0.0 + tslib: 2.8.1 '@aws-sdk/middleware-bucket-endpoint@3.620.0': dependencies: @@ -12360,14 +12485,14 @@ snapshots: '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 '@smithy/util-config-provider': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-expect-continue@3.620.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-flexible-checksums@3.620.0': dependencies: @@ -12378,33 +12503,33 @@ snapshots: '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-host-header@3.620.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-location-constraint@3.609.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-logger@3.609.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.620.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-sdk-s3@3.635.0': dependencies: @@ -12421,13 +12546,13 @@ snapshots: '@smithy/util-middleware': 3.0.4 '@smithy/util-stream': 3.1.4 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-ssec@3.609.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/middleware-user-agent@3.645.0': dependencies: @@ -12435,7 +12560,7 @@ snapshots: '@aws-sdk/util-endpoints': 3.645.0 '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/region-config-resolver@3.614.0': dependencies: @@ -12444,7 +12569,7 @@ snapshots: '@smithy/types': 3.4.0 '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/s3-request-presigner@3.645.0': dependencies: @@ -12464,7 +12589,7 @@ snapshots: '@smithy/protocol-http': 4.1.1 '@smithy/signature-v4': 4.1.1 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/token-providers@3.614.0(@aws-sdk/client-sso-oidc@3.645.0(@aws-sdk/client-sts@3.645.0))': dependencies: @@ -12473,53 +12598,53 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/shared-ini-file-loader': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/types@3.609.0': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/util-arn-parser@3.568.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/util-endpoints@3.645.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/types': 3.4.0 '@smithy/util-endpoints': 2.1.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/util-format-url@3.609.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/querystring-builder': 3.0.4 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/util-locate-window@3.568.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/util-user-agent-browser@3.609.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/types': 3.4.0 bowser: 2.11.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/util-user-agent-node@3.614.0': dependencies: '@aws-sdk/types': 3.609.0 '@smithy/node-config-provider': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@aws-sdk/xml-builder@3.609.0': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@babel/code-frame@7.24.7': dependencies: @@ -13444,12 +13569,12 @@ snapshots: '@dnd-kit/accessibility@3.1.0(react@19.0.0)': dependencies: react: 19.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@dnd-kit/accessibility@3.1.1(react@19.0.0)': dependencies: react: 19.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@dnd-kit/core@6.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: @@ -13495,28 +13620,28 @@ snapshots: '@emnapi/core@0.45.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@emnapi/core@1.2.0': dependencies: '@emnapi/wasi-threads': 1.0.1 - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@emnapi/runtime@0.45.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@emnapi/wasi-threads@1.0.1': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@emotion/babel-plugin@11.12.0': @@ -15845,7 +15970,7 @@ snapshots: '@prosemirror-adapter/core@0.2.6': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@prosemirror-adapter/core@0.4.0': dependencies: @@ -17058,16 +17183,21 @@ snapshots: '@smithy/abort-controller@3.1.2': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/abort-controller@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/chunked-blob-reader-native@3.0.0': dependencies: '@smithy/util-base64': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/chunked-blob-reader@3.0.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/config-resolver@3.0.6': dependencies: @@ -17075,7 +17205,7 @@ snapshots: '@smithy/types': 3.4.0 '@smithy/util-config-provider': 3.0.0 '@smithy/util-middleware': 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/core@2.4.1': dependencies: @@ -17088,7 +17218,18 @@ snapshots: '@smithy/util-body-length-browser': 3.0.0 '@smithy/util-middleware': 3.0.4 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/core@3.1.5': + dependencies: + '@smithy/middleware-serde': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.1.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 '@smithy/credential-provider-imds@3.2.1': dependencies: @@ -17096,37 +17237,37 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/types': 3.4.0 '@smithy/url-parser': 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/eventstream-codec@3.1.3': dependencies: '@aws-crypto/crc32': 5.2.0 '@smithy/types': 3.4.0 '@smithy/util-hex-encoding': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/eventstream-serde-browser@3.0.7': dependencies: '@smithy/eventstream-serde-universal': 3.0.6 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/eventstream-serde-config-resolver@3.0.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/eventstream-serde-node@3.0.6': dependencies: '@smithy/eventstream-serde-universal': 3.0.6 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/eventstream-serde-universal@3.0.6': dependencies: '@smithy/eventstream-codec': 3.1.3 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/fetch-http-handler@3.2.5': dependencies: @@ -17134,52 +17275,64 @@ snapshots: '@smithy/querystring-builder': 3.0.4 '@smithy/types': 3.4.0 '@smithy/util-base64': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.1': + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 '@smithy/hash-blob-browser@3.1.3': dependencies: '@smithy/chunked-blob-reader': 3.0.0 '@smithy/chunked-blob-reader-native': 3.0.0 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/hash-node@3.0.4': dependencies: '@smithy/types': 3.4.0 '@smithy/util-buffer-from': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/hash-stream-node@3.1.3': dependencies: '@smithy/types': 3.4.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/invalid-dependency@3.0.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/is-array-buffer@3.0.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 '@smithy/md5-js@3.0.4': dependencies: '@smithy/types': 3.4.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/middleware-content-length@3.0.6': dependencies: '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/middleware-endpoint@3.1.1': dependencies: @@ -17189,7 +17342,18 @@ snapshots: '@smithy/types': 3.4.0 '@smithy/url-parser': 3.0.4 '@smithy/util-middleware': 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.0.6': + dependencies: + '@smithy/core': 3.1.5 + '@smithy/middleware-serde': 4.0.2 + '@smithy/node-config-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 '@smithy/middleware-retry@3.0.16': dependencies: @@ -17200,25 +17364,42 @@ snapshots: '@smithy/types': 3.4.0 '@smithy/util-middleware': 3.0.4 '@smithy/util-retry': 3.0.4 - tslib: 2.7.0 + tslib: 2.8.1 uuid: 9.0.1 '@smithy/middleware-serde@3.0.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/middleware-serde@4.0.2': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/middleware-stack@3.0.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/node-config-provider@3.1.5': dependencies: '@smithy/property-provider': 3.1.4 '@smithy/shared-ini-file-loader': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.0.1': + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/node-http-handler@3.2.0': dependencies: @@ -17226,28 +17407,57 @@ snapshots: '@smithy/protocol-http': 4.1.1 '@smithy/querystring-builder': 3.0.4 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.0.3': + dependencies: + '@smithy/abort-controller': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/property-provider@3.1.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/protocol-http@4.1.1': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/querystring-builder@3.0.4': dependencies: '@smithy/types': 3.4.0 '@smithy/util-uri-escape': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 '@smithy/querystring-parser@3.0.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/service-error-classification@3.0.4': dependencies: @@ -17256,7 +17466,12 @@ snapshots: '@smithy/shared-ini-file-loader@3.1.5': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/shared-ini-file-loader@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/signature-v4@4.1.1': dependencies: @@ -17267,7 +17482,7 @@ snapshots: '@smithy/util-middleware': 3.0.4 '@smithy/util-uri-escape': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/smithy-client@3.3.0': dependencies: @@ -17276,45 +17491,80 @@ snapshots: '@smithy/protocol-http': 4.1.1 '@smithy/types': 3.4.0 '@smithy/util-stream': 3.1.4 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.1.6': + dependencies: + '@smithy/core': 3.1.5 + '@smithy/middleware-endpoint': 4.0.6 + '@smithy/middleware-stack': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.1.2 + tslib: 2.8.1 '@smithy/types@3.4.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/types@4.1.0': + dependencies: + tslib: 2.8.1 '@smithy/url-parser@3.0.4': dependencies: '@smithy/querystring-parser': 3.0.4 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/url-parser@4.0.1': + dependencies: + '@smithy/querystring-parser': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/util-base64@3.0.0': dependencies: '@smithy/util-buffer-from': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.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@3.0.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 '@smithy/util-body-length-node@3.0.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-buffer-from@2.2.0': dependencies: '@smithy/is-array-buffer': 2.2.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-buffer-from@3.0.0': dependencies: '@smithy/is-array-buffer': 3.0.0 - tslib: 2.7.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@3.0.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-defaults-mode-browser@3.0.16': dependencies: @@ -17322,7 +17572,7 @@ snapshots: '@smithy/smithy-client': 3.3.0 '@smithy/types': 3.4.0 bowser: 2.11.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-defaults-mode-node@3.0.16': dependencies: @@ -17332,28 +17582,37 @@ snapshots: '@smithy/property-provider': 3.1.4 '@smithy/smithy-client': 3.3.0 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-endpoints@2.1.0': dependencies: '@smithy/node-config-provider': 3.1.5 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-hex-encoding@3.0.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 '@smithy/util-middleware@3.0.4': dependencies: '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/util-middleware@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@smithy/util-retry@3.0.4': dependencies: '@smithy/service-error-classification': 3.0.4 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@smithy/util-stream@3.1.4': dependencies: @@ -17364,27 +17623,47 @@ snapshots: '@smithy/util-buffer-from': 3.0.0 '@smithy/util-hex-encoding': 3.0.0 '@smithy/util-utf8': 3.0.0 - tslib: 2.7.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.1.2': + dependencies: + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.3 + '@smithy/types': 4.1.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@3.0.0': dependencies: - tslib: 2.7.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.7.0 + tslib: 2.8.1 '@smithy/util-utf8@3.0.0': dependencies: '@smithy/util-buffer-from': 3.0.0 - tslib: 2.7.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@3.1.3': dependencies: '@smithy/abort-controller': 3.1.2 '@smithy/types': 3.4.0 - tslib: 2.7.0 + tslib: 2.8.1 '@socket.io/component-emitter@3.1.2': {} @@ -17733,7 +18012,7 @@ snapshots: '@swc/helpers@0.5.13': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 '@swc/helpers@0.5.15': dependencies: @@ -17947,12 +18226,12 @@ snapshots: '@tybys/wasm-util@0.8.3': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.7.0 + tslib: 2.8.1 optional: true '@types/aria-query@5.0.4': {} @@ -18827,7 +19106,7 @@ snapshots: aria-hidden@1.2.4: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 aria-query@5.3.0: dependencies: @@ -18930,11 +19209,11 @@ snapshots: ast-types@0.13.4: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 ast-types@0.16.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 astral-regex@2.0.0: {} @@ -19077,6 +19356,11 @@ snapshots: buffer-from@1.1.2: {} + buffer@5.6.0: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -20735,7 +21019,7 @@ snapshots: debug: 4.4.0 interpret: 3.1.1 semver: 7.6.3 - tslib: 2.7.0 + tslib: 2.8.1 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -23300,7 +23584,7 @@ snapshots: dependencies: react: 19.0.0 react-style-singleton: 2.2.3(@types/react@19.0.6)(react@19.0.0) - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.6 @@ -23309,7 +23593,7 @@ snapshots: react: 19.0.0 react-remove-scroll-bar: 2.3.8(@types/react@19.0.6)(react@19.0.0) react-style-singleton: 2.2.3(@types/react@19.0.6)(react@19.0.0) - tslib: 2.7.0 + tslib: 2.8.1 use-callback-ref: 1.3.3(@types/react@19.0.6)(react@19.0.0) use-sidecar: 1.1.2(@types/react@19.0.6)(react@19.0.0) optionalDependencies: @@ -23323,7 +23607,7 @@ snapshots: dependencies: get-nonce: 1.0.1 react: 19.0.0 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.6 @@ -23406,7 +23690,7 @@ snapshots: esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.7.0 + tslib: 2.8.1 rechoir@0.8.0: dependencies: @@ -23681,7 +23965,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 safe-array-concat@1.1.2: dependencies: @@ -24003,6 +24287,11 @@ snapshots: - supports-color - utf-8-validate + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + streamsearch@1.1.0: {} string-argv@0.3.2: {} @@ -24798,7 +25087,7 @@ snapshots: use-callback-ref@1.3.3(@types/react@19.0.6)(react@19.0.0): dependencies: react: 19.0.0 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.6 @@ -24816,7 +25105,7 @@ snapshots: dependencies: detect-node-es: 1.1.0 react: 19.0.0 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@types/react': 19.0.6