From bd8d51b02dc590cb96ea40857e39581d3dfc4624 Mon Sep 17 00:00:00 2001 From: Prakash Date: Wed, 7 Jan 2026 14:34:30 +0530 Subject: [PATCH] @uppy/aws-s3: add support for tempCredentials in s3mini (#6110) - added `getCredentials` callback in `S3Config` - simplified signer test util ( `sigv4-signer.js` ) and moved to `src/signer.ts` - all tests run in a new non root minio user ( required for sts ) , which gets created before the tests start see `tests/s3-client/setup.js` - tests added for sts , using `@aws-sdk/client-sts` for getting creds. - credential caching inspired from the current implementation in `@aws-s3` plugin , see `#getTemporarySecurityCredentials` inside `@uppy/aws-s3/src/index.ts` --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- packages/@uppy/aws-s3/package.json | 1 + packages/@uppy/aws-s3/src/s3-client/S3.ts | 140 ++- packages/@uppy/aws-s3/src/s3-client/signer.ts | 111 +++ packages/@uppy/aws-s3/src/s3-client/types.ts | 53 +- .../aws-s3/tests/s3-client/_shared.test.js | 2 +- .../aws-s3/tests/s3-client/minio.test.js | 166 +++- .../@uppy/aws-s3/tests/s3-client/setup.js | 35 +- .../aws-s3/tests/test-utils/sigv4-signer.js | 136 --- yarn.lock | 905 ++++++++++++++++++ 9 files changed, 1381 insertions(+), 168 deletions(-) create mode 100644 packages/@uppy/aws-s3/src/s3-client/signer.ts delete mode 100644 packages/@uppy/aws-s3/tests/test-utils/sigv4-signer.js diff --git a/packages/@uppy/aws-s3/package.json b/packages/@uppy/aws-s3/package.json index 840997fad..0cc3904d2 100644 --- a/packages/@uppy/aws-s3/package.json +++ b/packages/@uppy/aws-s3/package.json @@ -43,6 +43,7 @@ }, "devDependencies": { "@aws-sdk/client-s3": "^3.362.0", + "@aws-sdk/client-sts": "^3.362.0", "@aws-sdk/s3-request-presigner": "^3.362.0", "@uppy/core": "workspace:^", "jsdom": "^26.1.0", diff --git a/packages/@uppy/aws-s3/src/s3-client/S3.ts b/packages/@uppy/aws-s3/src/s3-client/S3.ts index 52419a795..7d2bc8e05 100644 --- a/packages/@uppy/aws-s3/src/s3-client/S3.ts +++ b/packages/@uppy/aws-s3/src/s3-client/S3.ts @@ -4,6 +4,7 @@ */ import * as C from './consts.js' +import { createSigV4Signer } from './signer.js' import type * as IT from './types.js' import * as U from './utils.js' @@ -12,6 +13,7 @@ import * as U from './utils.js' * Supports simple uploads, multipart uploads, and object deletion. * * @example + * // Option 1: With signRequest callback * const s3 = new S3mini({ * endpoint: 'https://s3.amazonaws.com/my-bucket', * signRequest: async ({ method, url, headers }) => { @@ -19,6 +21,15 @@ import * as U from './utils.js' * }, * }); * + * // Option 2: With getCredentials callback (client-side signing) + * const s3 = new S3mini({ + * endpoint: 'https://s3.amazonaws.com/my-bucket', + * getCredentials: async () => { + * const resp = await fetch('/api/s3/credentials'); + * return resp.json(); // { credentials, bucket, region } + * }, + * }); + * * await s3.putObject('file.txt', 'Hello, World!'); */ class S3mini { @@ -26,38 +37,92 @@ class S3mini { readonly region: string readonly requestSizeInBytes: number readonly requestAbortTimeout?: number - readonly fetch: typeof fetch - readonly signRequest: IT.signRequestFn + + private readonly getCredentials?: IT.getCredentialsFn + private cachedCredentials?: IT.CredentialsResponse + private cachedCredentialsPromise?: Promise + private signRequest!: IT.signRequestFn constructor({ endpoint, signRequest, + getCredentials, region = 'auto', requestSizeInBytes = C.DEFAULT_REQUEST_SIZE_IN_BYTES, requestAbortTimeout = undefined, - fetch = globalThis.fetch, }: IT.S3Config) { - this._validateConstructorParams(endpoint, signRequest) + this._validateConstructorParams(endpoint, signRequest, getCredentials) this.endpoint = new URL(this._ensureValidUrl(endpoint)) - this.signRequest = signRequest this.region = region this.requestSizeInBytes = requestSizeInBytes this.requestAbortTimeout = requestAbortTimeout - // Bind fetch to globalThis to preserve correct 'this' context in browsers - // Without this, calling this.fetch() throws "Illegal invocation" - this.fetch = fetch.bind(globalThis) + + if (signRequest) { + this.signRequest = signRequest + } else if (getCredentials) { + this.getCredentials = getCredentials + this.signRequest = this._createCredentialBasedSigner() + } + } + + /** Creates a signer that fetches/caches credentials and signs requests. */ + private _createCredentialBasedSigner(): IT.signRequestFn { + return async (request: IT.signableRequest): Promise => { + const creds = await this._getCachedCredentials() + const signer = createSigV4Signer({ + accessKeyId: creds.credentials.accessKeyId, + secretAccessKey: creds.credentials.secretAccessKey, + sessionToken: creds.credentials.sessionToken, + region: creds.region || this.region, + }) + return signer(request) + } + } + + /** Gets cached credentials or fetches new ones. */ + private async _getCachedCredentials(): Promise { + // Return Cached Credentials if available + if (this.cachedCredentials != null) { + return this.cachedCredentials + } + + // Cache the promise so concurrent calls wait for the same fetch + if (this.cachedCredentialsPromise == null) { + this.cachedCredentialsPromise = this.getCredentials!() + .then((creds) => { + this.cachedCredentials = creds + return creds + }) + .finally(() => { + // Clear promise cache after resolution to allow future retries + this.cachedCredentialsPromise = undefined + }) + } + + return this.cachedCredentialsPromise } private _validateConstructorParams( endpoint: string, - signRequest: IT.signRequestFn, + signRequest?: IT.signRequestFn, + getCredentials?: IT.getCredentialsFn, ): void { if (typeof endpoint !== 'string' || endpoint.trim().length === 0) { throw new TypeError(C.ERROR_ENDPOINT_REQUIRED) } - if (typeof signRequest !== 'function') { - throw new TypeError('signRequest is not passed') + if (!signRequest && !getCredentials) { + throw new TypeError( + 'Either signRequest or getCredentials must be provided', + ) + } + + if (signRequest && typeof signRequest !== 'function') { + throw new TypeError('signRequest must be a function') + } + + if (getCredentials && typeof getCredentials !== 'function') { + throw new TypeError('getCredentials must be a function') } } @@ -219,13 +284,41 @@ class S3mini { headers: baseHeaders, }) - return this._sendRequest( - finalUrl.toString(), - method, - signedHeaders, - body, - tolerated, - ) + try { + return await this._sendRequest( + finalUrl.toString(), + method, + signedHeaders, + body, + tolerated, + ) + } catch (err) { + // If expired token error and using getCredentials, clear cache and retry once + if ( + this.getCredentials && + err instanceof U.S3ServiceError && + err.code && + ['ExpiredToken', 'InvalidAccessKeyId'].includes(err.code) + ) { + // Clear timer and cache + this.clearCachedCredentials() + + // Retry with fresh credentials + const freshSignedHeaders = await this.signRequest({ + method, + url: finalUrl.toString(), + headers: baseHeaders, + }) + return this._sendRequest( + finalUrl.toString(), + method, + freshSignedHeaders, + body, + tolerated, + ) + } + throw err + } } /** Uploads an object to the S3-compatible service. */ @@ -471,6 +564,15 @@ class S3mini { return res.status === 200 || res.status === 204 } + /** + * Clears cached credentials. + * Call this method when you need to force a credential refresh on the next request. + */ + public clearCachedCredentials(): void { + this.cachedCredentials = undefined + this.cachedCredentialsPromise = undefined + } + private async _sendRequest( url: string, method: IT.HttpMethod, @@ -479,7 +581,7 @@ class S3mini { toleratedStatusCodes: number[] = [], ): Promise { try { - const res = await this.fetch(url, { + const res = await fetch(url, { method, headers, body: ['GET', 'HEAD'].includes(method) ? undefined : body, diff --git a/packages/@uppy/aws-s3/src/s3-client/signer.ts b/packages/@uppy/aws-s3/src/s3-client/signer.ts new file mode 100644 index 000000000..3427a6a86 --- /dev/null +++ b/packages/@uppy/aws-s3/src/s3-client/signer.ts @@ -0,0 +1,111 @@ +/** + * AWS Signature Version 4 Signer for S3-compatible services. + * @see https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html + */ + +import * as C from './consts.js' +import type { signableRequest, signedHeaders } from './types.js' +import * as U from './utils.js' + +export interface SignerConfig { + accessKeyId: string + secretAccessKey: string + sessionToken?: string + region: string + service?: string +} + +/** + * Creates a SigV4 signer for S3 requests. + * Returns a function that can sign requests with Authorization headers. + */ +export function createSigV4Signer(config: SignerConfig) { + const { + accessKeyId, + secretAccessKey, + sessionToken, + region, + service = C.S3_SERVICE, + } = config + + let signingKeyDate: string | null = null + let signingKey: ArrayBuffer | null = null + + async function getSignatureKey(dateStamp: string): Promise { + const kDate = await U.hmac(`AWS4${secretAccessKey}`, dateStamp) + const kRegion = await U.hmac(kDate, region) + const kService = await U.hmac(kRegion, service) + return U.hmac(kService, C.AWS_REQUEST_TYPE) + } + + return async function signRequest( + request: signableRequest, + ): Promise { + const { method, url, headers } = request + const parsedUrl = new URL(url) + + const now = new Date() + const shortDate = now.toISOString().slice(0, 10).replace(/-/g, '') + const fullDatetime = `${shortDate}T${now.toISOString().slice(11, 19).replace(/:/g, '')}Z` + const scope = `${shortDate}/${region}/${service}/${C.AWS_REQUEST_TYPE}` + + // S3 supports both hashed / unhashed payload no need for hashed payload now as + // we're not talking to sts, also it takes up CPU + const payloadHash = C.UNSIGNED_PAYLOAD + + const headersToSign: Record = { + ...headers, + [C.HEADER_AMZ_CONTENT_SHA256]: payloadHash, + [C.HEADER_AMZ_DATE]: fullDatetime, + [C.HEADER_HOST]: parsedUrl.host, + ...(sessionToken ? { 'x-amz-security-token': sessionToken } : {}), + } + + const ignored = new Set([ + 'authorization', + 'content-length', + 'content-type', + 'user-agent', + ]) + const sorted = Object.entries(headersToSign) + .filter(([k]) => !ignored.has(k.toLowerCase())) + .sort(([a], [b]) => a.toLowerCase().localeCompare(b.toLowerCase())) + + const canonicalHeaders = sorted + .map(([k, v]) => `${k.toLowerCase()}:${v.trim()}`) + .join('\n') + const signedHeaderNames = sorted.map(([k]) => k.toLowerCase()).join(';') + + const queryString = [...parsedUrl.searchParams.entries()] + .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`) + .sort() + .join('&') + + const canonicalRequest = [ + method, + parsedUrl.pathname, + queryString, + canonicalHeaders, + '', + signedHeaderNames, + payloadHash, + ].join('\n') + + const stringToSign = [ + C.AWS_ALGORITHM, + fullDatetime, + scope, + U.hexFromBuffer(await U.sha256(canonicalRequest)), + ].join('\n') + + if (shortDate !== signingKeyDate || !signingKey) { + signingKeyDate = shortDate + signingKey = await getSignatureKey(shortDate) + } + + const signature = U.hexFromBuffer(await U.hmac(signingKey, stringToSign)) + const authorization = `${C.AWS_ALGORITHM} Credential=${accessKeyId}/${scope}, SignedHeaders=${signedHeaderNames}, Signature=${signature}` + + return { ...headersToSign, authorization } + } +} diff --git a/packages/@uppy/aws-s3/src/s3-client/types.ts b/packages/@uppy/aws-s3/src/s3-client/types.ts index 67b7b49ed..5d5923741 100644 --- a/packages/@uppy/aws-s3/src/s3-client/types.ts +++ b/packages/@uppy/aws-s3/src/s3-client/types.ts @@ -12,22 +12,63 @@ export type signedHeaders = Record /** Function that signs a request and returns the signed headers */ export type signRequestFn = (request: signableRequest) => Promise -/** Configuration options for S3mini client */ -export interface S3Config { +/** + * Temporary security credentials from STS or similar service. + * These are used with getCredentials callback for client-side signing. + */ +export interface TemporaryCredentials { + accessKeyId: string + secretAccessKey: string + sessionToken: string + /** ISO 8601 date string when credentials expire */ + expiration?: string +} + +/** + * Response from getCredentials callback. + * Includes temporary credentials plus region info. + */ +export interface CredentialsResponse { + credentials: TemporaryCredentials + region: string +} + +/** Function that retrieves temporary credentials */ +export type getCredentialsFn = (options?: { + signal?: AbortSignal +}) => Promise + +/** Base configuration shared by both signing approaches */ +type S3ConfigBase = { /** Endpoint URL of the S3-compatible service (e.g., 'https://s3.amazonaws.com/bucket-name') */ endpoint: string - /** Function to sign requests. Called for each S3 API request. */ - signRequest: signRequestFn /** AWS region. Defaults to 'auto'. */ region?: string /** Request size in bytes for multipart uploads. Defaults to 8MB. */ requestSizeInBytes?: number /** Timeout in ms after which a request should be aborted. */ requestAbortTimeout?: number - /** Custom fetch implementation. Defaults to globalThis.fetch. */ - fetch?: typeof fetch } +/** Config when using signRequest callback (region optional) */ +type S3ConfigWithSignRequest = S3ConfigBase & { + /** Function to sign requests. Called for each S3 API request. */ + signRequest: signRequestFn + getCredentials?: never +} + +/** Config when using getCredentials callback (region required for signing) */ +type S3ConfigWithGetCredentials = Omit & { + signRequest?: never + /** Function to retrieve temporary credentials for client-side signing. */ + getCredentials: getCredentialsFn + /** AWS region. Required for signing with getCredentials. */ + region: string +} + +/** Configuration options for S3mini client */ +export type S3Config = S3ConfigWithSignRequest | S3ConfigWithGetCredentials + export interface SSECHeaders { 'x-amz-server-side-encryption-customer-algorithm': string 'x-amz-server-side-encryption-customer-key': string diff --git a/packages/@uppy/aws-s3/tests/s3-client/_shared.test.js b/packages/@uppy/aws-s3/tests/s3-client/_shared.test.js index 36e55e347..ad49cf456 100644 --- a/packages/@uppy/aws-s3/tests/s3-client/_shared.test.js +++ b/packages/@uppy/aws-s3/tests/s3-client/_shared.test.js @@ -1,7 +1,7 @@ import { beforeAll, describe, expect, it, vi } from 'vitest' import { S3mini } from '../../src/s3-client/index.js' +import { createSigV4Signer } from '../../src/s3-client/signer.js' import { randomBytes } from '../test-utils/browser-crypto.js' -import { createSigV4Signer } from '../test-utils/sigv4-signer.js' let _providerName diff --git a/packages/@uppy/aws-s3/tests/s3-client/minio.test.js b/packages/@uppy/aws-s3/tests/s3-client/minio.test.js index d37f54a93..f5bbfcc4c 100644 --- a/packages/@uppy/aws-s3/tests/s3-client/minio.test.js +++ b/packages/@uppy/aws-s3/tests/s3-client/minio.test.js @@ -1,7 +1,8 @@ -import { expect, inject, it, vi } from 'vitest' +import { AssumeRoleCommand, STSClient } from '@aws-sdk/client-sts' +import { describe, expect, inject, it, vi } from 'vitest' import { S3mini } from '../../src/s3-client/S3.js' +import { createSigV4Signer } from '../../src/s3-client/signer.js' import { sha1Base64 } from '../test-utils/browser-crypto.js' -import { createSigV4Signer } from '../test-utils/sigv4-signer.js' import { beforeRun, cleanupTestBeforeAll } from './_shared.test.js' const name = 'minio' @@ -18,6 +19,33 @@ const raw = bucketConfigs.find((c) => c.provider === name) ] : null +/** Create STS client using @aws-sdk/client-sts */ +function createSTSClient({ endpoint, accessKeyId, secretAccessKey, region }) { + return new STSClient({ + region, + endpoint, + credentials: { accessKeyId, secretAccessKey }, + }) +} + +/** Get temporary credentials via AssumeRole */ +async function assumeRole(stsClient, { durationSeconds = 900 } = {}) { + const response = await stsClient.send( + new AssumeRoleCommand({ + RoleArn: 'aws:iam::000000000000:role/test-role', // MinIO doesn't validate ARN + RoleSessionName: 'uppy-test', + DurationSeconds: durationSeconds, + }), + ) + const creds = response.Credentials + return { + AccessKeyId: creds.AccessKeyId, + SecretAccessKey: creds.SecretAccessKey, + SessionToken: creds.SessionToken, + Expiration: creds.Expiration?.toISOString() || creds.Expiration, + } +} + const minioSpecific = (bucket) => { vi.setConfig({ testTimeout: 120_000 }) @@ -35,6 +63,8 @@ const minioSpecific = (bucket) => { cleanupTestBeforeAll(s3client) + // ===== signRequest tests ===== + it('put object with valid x-amz-checksum-sha1 header', async () => { const fileContents = new TextEncoder().encode('Some file contents.') const fileHash = await sha1Base64(fileContents) @@ -77,6 +107,138 @@ const minioSpecific = (bucket) => { expect(err.code).toBe('XAmzContentChecksumMismatch') } }) + + // ===== getCredentials tests (STS) ===== + + describe('getCredentials (STS)', () => { + const stsEndpoint = new URL(bucket.endpoint).origin + + it('should upload using getCredentials callback', async () => { + const testKey = `sts-getcreds-${Date.now()}.txt` + + const s3 = new S3mini({ + endpoint: bucket.endpoint, + region: bucket.region, + getCredentials: async () => { + const stsClient = createSTSClient({ + endpoint: stsEndpoint, + accessKeyId: bucket.accessKeyId, + secretAccessKey: bucket.secretAccessKey, + region: bucket.region, + }) + const creds = await assumeRole(stsClient) + return { + credentials: { + accessKeyId: creds.AccessKeyId, + secretAccessKey: creds.SecretAccessKey, + sessionToken: creds.SessionToken, + expiration: creds.Expiration, + }, + bucket: new URL(bucket.endpoint).pathname.slice(1), + region: bucket.region, + } + }, + }) + + try { + const result = await s3.putObject(testKey, 'Hello STS!', 'text/plain') + expect(result.ok).toBe(true) + } finally { + await s3.deleteObject(testKey) + } + }) + + it('should cache credentials across multiple requests', async () => { + let fetchCount = 0 + + const s3 = new S3mini({ + endpoint: bucket.endpoint, + region: bucket.region, + getCredentials: async () => { + fetchCount++ + const stsClient = createSTSClient({ + endpoint: stsEndpoint, + accessKeyId: bucket.accessKeyId, + secretAccessKey: bucket.secretAccessKey, + region: bucket.region, + }) + const creds = await assumeRole(stsClient) + return { + credentials: { + accessKeyId: creds.AccessKeyId, + secretAccessKey: creds.SecretAccessKey, + sessionToken: creds.SessionToken, + expiration: creds.Expiration, + }, + bucket: new URL(bucket.endpoint).pathname.slice(1), + region: bucket.region, + } + }, + }) + + await s3.putObject( + `sts-cache-1-${Date.now()}.txt`, + 'File 1', + 'text/plain', + ) + await s3.putObject( + `sts-cache-2-${Date.now()}.txt`, + 'File 2', + 'text/plain', + ) + expect(fetchCount).toBe(1) + }) + + it('should perform multipart upload with getCredentials', async () => { + const s3 = new S3mini({ + endpoint: bucket.endpoint, + region: bucket.region, + getCredentials: async () => { + const stsClient = createSTSClient({ + endpoint: stsEndpoint, + accessKeyId: bucket.accessKeyId, + secretAccessKey: bucket.secretAccessKey, + region: bucket.region, + }) + const creds = await assumeRole(stsClient) + return { + credentials: { + accessKeyId: creds.AccessKeyId, + secretAccessKey: creds.SecretAccessKey, + sessionToken: creds.SessionToken, + expiration: creds.Expiration, + }, + bucket: new URL(bucket.endpoint).pathname.slice(1), + region: bucket.region, + } + }, + }) + + const key = `sts-multipart-${Date.now()}.bin` + const partSize = 5 * 1024 * 1024 // 5MB + + const part = new Uint8Array(partSize) + for (let i = 0; i < part.length; i += 65536) { + crypto.getRandomValues( + new Uint8Array(part.buffer, i, Math.min(65536, part.length - i)), + ) + } + + const uploadId = await s3.getMultipartUploadId( + key, + 'application/octet-stream', + ) + expect(uploadId).toBeDefined() + + const uploaded = await s3.uploadPart(key, uploadId, part, 1) + expect(uploaded.etag).toBeDefined() + + const result = await s3.completeMultipartUpload(key, uploadId, [uploaded]) + expect(result.etag).toBeDefined() + + await s3.deleteObject(key) + }) + }) } beforeRun(raw, name, minioSpecific) diff --git a/packages/@uppy/aws-s3/tests/s3-client/setup.js b/packages/@uppy/aws-s3/tests/s3-client/setup.js index a6857c2cc..fbcf4a030 100644 --- a/packages/@uppy/aws-s3/tests/s3-client/setup.js +++ b/packages/@uppy/aws-s3/tests/s3-client/setup.js @@ -13,9 +13,19 @@ const composeFiles = { const bucketConfigs = Object.keys(process.env) .filter((k) => k.startsWith('BUCKET_ENV_')) .map((k) => { - const [provider, accessKeyId, secretAccessKey, endpoint, region] = + const [provider, rootAccessKeyId, rootSecretAccessKey, endpoint, region] = process.env[k].split(',') - return { provider, accessKeyId, secretAccessKey, endpoint, region } + // Use stsuser credentials for all tests (readwrite policy is sufficient) + // Root credentials are kept for Docker container startup + return { + provider, + accessKeyId: 'stsuser', + secretAccessKey: 'stspassword123', + rootAccessKeyId, + rootSecretAccessKey, + endpoint, + region, + } }) export default async function setup({ provide }) { @@ -28,8 +38,8 @@ export default async function setup({ provide }) { console.log(`⏫ starting ${cfg.provider} image …`) switch (cfg.provider) { case 'minio': - process.env.MINIO_ROOT_USER = cfg.accessKeyId - process.env.MINIO_ROOT_PASSWORD = cfg.secretAccessKey + process.env.MINIO_ROOT_USER = cfg.rootAccessKeyId + process.env.MINIO_ROOT_PASSWORD = cfg.rootSecretAccessKey await composeUpWait(composeFile) // biome-ignore lint/correctness/noSwitchDeclarations: no other switch blocks const bucketName = new URL(cfg.endpoint).pathname.split('/')[1] @@ -39,6 +49,23 @@ export default async function setup({ provide }) { `mc mb local/${bucketName} --ignore-existing`, 30000, ) + // Create a user with readwrite policy for STS testing + // The root user cannot AssumeRole for itself - needs a regular user + try { + await execDockerCommand( + 'minio', + `mc admin user add local stsuser stspassword123`, + 15000, + ) + await execDockerCommand( + 'minio', + `mc admin policy attach local readwrite --user stsuser`, + 15000, + ) + } catch (err) { + // User may already exist, that's fine + console.log('STS user setup:', err.message || 'error occurred') + } } break default: diff --git a/packages/@uppy/aws-s3/tests/test-utils/sigv4-signer.js b/packages/@uppy/aws-s3/tests/test-utils/sigv4-signer.js deleted file mode 100644 index 8532036e6..000000000 --- a/packages/@uppy/aws-s3/tests/test-utils/sigv4-signer.js +++ /dev/null @@ -1,136 +0,0 @@ -import { - AWS_ALGORITHM, - AWS_REQUEST_TYPE, - HEADER_AMZ_CONTENT_SHA256, - HEADER_AMZ_DATE, - HEADER_HOST, - S3_SERVICE, - UNSIGNED_PAYLOAD, -} from '../../src/s3-client/consts' -import { hexFromBuffer, hmac, sha256 } from '../../src/s3-client/utils' -/** - * get the url - * create the headers object which we need to sign - * create the sortedHeaders and ignored headers - * build canonicalHeaders - * build query string - * build cannonical request - * build string to sign - */ - -// ! WIP -export function createSigV4Signer({ accessKeyId, secretAccessKey, region }) { - // - let signingKeyDate - let signingKey - - const getSignatureKey = async (dateStamp) => { - const kDate = await hmac(`AWS4${secretAccessKey}`, dateStamp) - const kRegion = await hmac(kDate, region) - const kService = await hmac(kRegion, S3_SERVICE) - return await hmac(kService, AWS_REQUEST_TYPE) - } - - return async function signRequest({ method, url, headers }) { - const parsedUrl = new URL(url) - - const d = new Date() - const year = d.getUTCFullYear() - const month = String(d.getUTCMonth() + 1).padStart(2, '0') - const day = String(d.getUTCDate()).padStart(2, '0') - - const shortDatetime = `${year}${month}${day}` - const fullDatetime = `${shortDatetime}T${String(d.getUTCHours()).padStart(2, '0')}${String( - d.getUTCMinutes(), - ).padStart(2, '0')}${String(d.getUTCSeconds()).padStart(2, '0')}Z` - const credentialScope = `${shortDatetime}/${region}/${S3_SERVICE}/${AWS_REQUEST_TYPE}` - - // Headers to sign - - const signedHeadersObj = { - ...headers, - [HEADER_AMZ_CONTENT_SHA256]: UNSIGNED_PAYLOAD, - [HEADER_AMZ_DATE]: fullDatetime, - [HEADER_HOST]: parsedUrl.host, - } - - const ignoredHeaders = new Set([ - 'authorization', - 'content-length', - 'content-type', - 'user-agent', - ]) - - let canonicalHeaders = '' - let signedHeaders = '' - - const sortedHeaders = Object.entries(signedHeadersObj) - .filter(([key]) => !ignoredHeaders.has(key.toLocaleLowerCase())) - .sort(([a], [b]) => a.toLowerCase().localeCompare(b.toLowerCase())) - - for (const [key, value] of sortedHeaders) { - const lowerKey = key.toLowerCase() - if (canonicalHeaders) { - canonicalHeaders += '\n' - signedHeaders += ';' - } - canonicalHeaders += `${lowerKey}:${String(value).trim()}` - signedHeaders += lowerKey - } - - const queryParams = {} - parsedUrl.searchParams.forEach((value, key) => { - queryParams[key] = value - }) - - const canonicalQueryString = Object.keys(queryParams) - .map( - (key) => - `${encodeURIComponent(key)}=${encodeURIComponent(queryParams[key])}`, - ) - .sort() - .join('&') - - // canonical request - - const canonicalRequest = [ - method, - parsedUrl.pathname, - canonicalQueryString, - canonicalHeaders, - '', - signedHeaders, - UNSIGNED_PAYLOAD, - ].join('\n') - - // build string to sign - - const hashedCanonical = hexFromBuffer(await sha256(canonicalRequest)) - - const stringToSign = [ - 'AWS4-HMAC-SHA256', - fullDatetime, - credentialScope, - hashedCanonical, - ].join('\n') - - // get key - - if (shortDatetime !== signingKeyDate || !signingKey) { - signingKeyDate = shortDatetime - signingKey = await getSignatureKey(shortDatetime) - } - - // get signature - const signature = hexFromBuffer(await hmac(signingKey, stringToSign)) - - // auth header - - const authorization = `${AWS_ALGORITHM} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}` - - return { - ...signedHeadersObj, - authorization: authorization, - } - } -} diff --git a/yarn.lock b/yarn.lock index 38952d48c..c66547166 100644 --- a/yarn.lock +++ b/yarn.lock @@ -831,6 +831,52 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-sso@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/client-sso@npm:3.953.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/middleware-host-header": "npm:3.953.0" + "@aws-sdk/middleware-logger": "npm:3.953.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.953.0" + "@aws-sdk/middleware-user-agent": "npm:3.953.0" + "@aws-sdk/region-config-resolver": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@aws-sdk/util-endpoints": "npm:3.953.0" + "@aws-sdk/util-user-agent-browser": "npm:3.953.0" + "@aws-sdk/util-user-agent-node": "npm:3.953.0" + "@smithy/config-resolver": "npm:^4.4.4" + "@smithy/core": "npm:^3.19.0" + "@smithy/fetch-http-handler": "npm:^5.3.7" + "@smithy/hash-node": "npm:^4.2.6" + "@smithy/invalid-dependency": "npm:^4.2.6" + "@smithy/middleware-content-length": "npm:^4.2.6" + "@smithy/middleware-endpoint": "npm:^4.3.15" + "@smithy/middleware-retry": "npm:^4.4.15" + "@smithy/middleware-serde": "npm:^4.2.7" + "@smithy/middleware-stack": "npm:^4.2.6" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/node-http-handler": "npm:^4.4.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/smithy-client": "npm:^4.10.0" + "@smithy/types": "npm:^4.10.0" + "@smithy/url-parser": "npm:^4.2.6" + "@smithy/util-base64": "npm:^4.3.0" + "@smithy/util-body-length-browser": "npm:^4.2.0" + "@smithy/util-body-length-node": "npm:^4.2.1" + "@smithy/util-defaults-mode-browser": "npm:^4.3.14" + "@smithy/util-defaults-mode-node": "npm:^4.2.17" + "@smithy/util-endpoints": "npm:^3.2.6" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-retry": "npm:^4.2.6" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/f7b21d79a608e9ab72b6ae1bbc8adb05a0659825d0f5ca2548368cff911c94502209fdebd0637306ec8923cb0ecbf21f238ee69191363bd416b36252343966a6 + languageName: node + linkType: hard + "@aws-sdk/client-sts@npm:3.600.0, @aws-sdk/client-sts@npm:^3.338.0": version: 3.600.0 resolution: "@aws-sdk/client-sts@npm:3.600.0" @@ -879,6 +925,53 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-sts@npm:^3.362.0": + version: 3.953.0 + resolution: "@aws-sdk/client-sts@npm:3.953.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/credential-provider-node": "npm:3.953.0" + "@aws-sdk/middleware-host-header": "npm:3.953.0" + "@aws-sdk/middleware-logger": "npm:3.953.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.953.0" + "@aws-sdk/middleware-user-agent": "npm:3.953.0" + "@aws-sdk/region-config-resolver": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@aws-sdk/util-endpoints": "npm:3.953.0" + "@aws-sdk/util-user-agent-browser": "npm:3.953.0" + "@aws-sdk/util-user-agent-node": "npm:3.953.0" + "@smithy/config-resolver": "npm:^4.4.4" + "@smithy/core": "npm:^3.19.0" + "@smithy/fetch-http-handler": "npm:^5.3.7" + "@smithy/hash-node": "npm:^4.2.6" + "@smithy/invalid-dependency": "npm:^4.2.6" + "@smithy/middleware-content-length": "npm:^4.2.6" + "@smithy/middleware-endpoint": "npm:^4.3.15" + "@smithy/middleware-retry": "npm:^4.4.15" + "@smithy/middleware-serde": "npm:^4.2.7" + "@smithy/middleware-stack": "npm:^4.2.6" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/node-http-handler": "npm:^4.4.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/smithy-client": "npm:^4.10.0" + "@smithy/types": "npm:^4.10.0" + "@smithy/url-parser": "npm:^4.2.6" + "@smithy/util-base64": "npm:^4.3.0" + "@smithy/util-body-length-browser": "npm:^4.2.0" + "@smithy/util-body-length-node": "npm:^4.2.1" + "@smithy/util-defaults-mode-browser": "npm:^4.3.14" + "@smithy/util-defaults-mode-node": "npm:^4.2.17" + "@smithy/util-endpoints": "npm:^3.2.6" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-retry": "npm:^4.2.6" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/b41dc2190fec8ccd2bcae77a2cfc1ed9d20e9586c4bdfa60274fa1f4e11272bc78b01c493d25f492d44c132c20a8af70d4faa36f49f3559f2b6f7dc7101f6d0d + languageName: node + linkType: hard + "@aws-sdk/core@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/core@npm:3.598.0" @@ -915,6 +1008,27 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/core@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/core@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@aws-sdk/xml-builder": "npm:3.953.0" + "@smithy/core": "npm:^3.19.0" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/signature-v4": "npm:^5.3.6" + "@smithy/smithy-client": "npm:^4.10.0" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-base64": "npm:^4.3.0" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/949798b03a10e309bf7dc6bfc2bfb4aabaddb6dee87c85e06c811b933af1cd83ec989be96c8066201663d50b48c40a82db9f543ababc1b43f885d6ce171fe7d5 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-env@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/credential-provider-env@npm:3.598.0" @@ -940,6 +1054,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-env@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/82c006cf8944476fe857b8b61533f25cca3ffbe9dfe236cc26dc88c4d54a2d22b23cb16faddfa130b1f5bd5ed0c0ba8bca04c67e5bff11d278f772057b6c4b4c + languageName: node + linkType: hard + "@aws-sdk/credential-provider-http@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/credential-provider-http@npm:3.598.0" @@ -975,6 +1102,24 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-http@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/fetch-http-handler": "npm:^5.3.7" + "@smithy/node-http-handler": "npm:^4.4.6" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/smithy-client": "npm:^4.10.0" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-stream": "npm:^4.5.7" + tslib: "npm:^2.6.2" + checksum: 10/0a4c0092929caac95fd2c003c504bba26e5aa884252a98de7a03f18cb1ef69e944f4997628f7409ed7fb364d412a5d8c64ef8e9e8fc057612cc10314e66b45a2 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-ini@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/credential-provider-ini@npm:3.598.0" @@ -1017,6 +1162,44 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-ini@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/credential-provider-env": "npm:3.953.0" + "@aws-sdk/credential-provider-http": "npm:3.953.0" + "@aws-sdk/credential-provider-login": "npm:3.953.0" + "@aws-sdk/credential-provider-process": "npm:3.953.0" + "@aws-sdk/credential-provider-sso": "npm:3.953.0" + "@aws-sdk/credential-provider-web-identity": "npm:3.953.0" + "@aws-sdk/nested-clients": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/credential-provider-imds": "npm:^4.2.6" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/e416b9e2d2da37f945450282a78e9b477daf6e3dafcb7c61b25897c4438ce7b4675ea6cc9292bb120a4ba16a0105ad51f62d9af0b00007275a3c14a3d3f57890 + languageName: node + linkType: hard + +"@aws-sdk/credential-provider-login@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-login@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/nested-clients": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/0642d2029f8dbadd95e1678afd4a9a99735028b06934cd783b91acad86e29fb920bd75396f95b6a581ad8cb4cee36444b3aef37d8721ecdd7d47147f7abdd182 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-node@npm:3.600.0": version: 3.600.0 resolution: "@aws-sdk/credential-provider-node@npm:3.600.0" @@ -1057,6 +1240,26 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-node@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.953.0" + dependencies: + "@aws-sdk/credential-provider-env": "npm:3.953.0" + "@aws-sdk/credential-provider-http": "npm:3.953.0" + "@aws-sdk/credential-provider-ini": "npm:3.953.0" + "@aws-sdk/credential-provider-process": "npm:3.953.0" + "@aws-sdk/credential-provider-sso": "npm:3.953.0" + "@aws-sdk/credential-provider-web-identity": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/credential-provider-imds": "npm:^4.2.6" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/a842444887a1ea8ccf6282b34a150f22c75274650906bfde2cae76e672fd3898c0504c8add5459c0cd8a1113c397791d9dad77dce427282429c998435a4629c4 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-process@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/credential-provider-process@npm:3.598.0" @@ -1084,6 +1287,20 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-process@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/39ff89306d9a55becec4d5fa8dc82420c3cd5ff5079fb91ec2b8812cf048d6063474215dd2a205e8f02f85815b17b38f89ed7f5a1b16023bfcd56abeb325dd55 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-sso@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/credential-provider-sso@npm:3.598.0" @@ -1115,6 +1332,22 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-sso@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.953.0" + dependencies: + "@aws-sdk/client-sso": "npm:3.953.0" + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/token-providers": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/4c95ce8f60983d31a7454ee0a201dea4c0e20e9e2ce4ef1eebf6e096f4cb99991811260a47cb2c9ed2a0b63c5a1663f7b4c7c9d19918b2494239e54efab8477f + languageName: node + linkType: hard + "@aws-sdk/credential-provider-web-identity@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/credential-provider-web-identity@npm:3.598.0" @@ -1144,6 +1377,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-web-identity@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/nested-clients": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/84d94fb4ecfa12b882f49a409b9cdc3c17de08f94b76376b64690198bc61e3ec2d0e85d2e2518f3bb99ce7cb43fc32202f6c193f89b0df9c03fc586f3e6df560 + languageName: node + linkType: hard + "@aws-sdk/lib-storage@npm:^3.338.0": version: 3.600.0 resolution: "@aws-sdk/lib-storage@npm:3.600.0" @@ -1276,6 +1524,18 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-host-header@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/c78936083a336310814d7e64ffd8d6dbf26b85abd4f8bcf90b75a1ad629704e390d75493339082d38a96c24a9ab9b1ad6e8e22d87035486547a3ae32fbdc13e4 + languageName: node + linkType: hard + "@aws-sdk/middleware-location-constraint@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/middleware-location-constraint@npm:3.598.0" @@ -1320,6 +1580,17 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-logger@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/middleware-logger@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/3f02f3a954af46a94246e6bdbf5aca351bd61d6fc0c04f83505be353da128af26ac4ef9190450766bb6ea298213056c5dbc64e641a366a318e394e7272edf4b0 + languageName: node + linkType: hard + "@aws-sdk/middleware-recursion-detection@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/middleware-recursion-detection@npm:3.598.0" @@ -1345,6 +1616,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-recursion-detection@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@aws/lambda-invoke-store": "npm:^0.2.2" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/02802b74a08cbf8731db588c01645acf0bd9e014f3e68e7690fc28d62348a498da76f68a47a763b8d7f4a7e407d23c7c9e6f98017f85dde853b481421556a451 + languageName: node + linkType: hard + "@aws-sdk/middleware-sdk-s3@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/middleware-sdk-s3@npm:3.598.0" @@ -1449,6 +1733,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-user-agent@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@aws-sdk/util-endpoints": "npm:3.953.0" + "@smithy/core": "npm:^3.19.0" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/2dfccca22e3829c17b609cca236fe3be2e2bc234c438d0beda8d87cd7614a8b31825a63337ce26b565d52c3905e4c6e914d4f83156654bededb6f175fa9880ac + languageName: node + linkType: hard + "@aws-sdk/nested-clients@npm:3.896.0": version: 3.896.0 resolution: "@aws-sdk/nested-clients@npm:3.896.0" @@ -1495,6 +1794,52 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/nested-clients@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/nested-clients@npm:3.953.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/middleware-host-header": "npm:3.953.0" + "@aws-sdk/middleware-logger": "npm:3.953.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.953.0" + "@aws-sdk/middleware-user-agent": "npm:3.953.0" + "@aws-sdk/region-config-resolver": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@aws-sdk/util-endpoints": "npm:3.953.0" + "@aws-sdk/util-user-agent-browser": "npm:3.953.0" + "@aws-sdk/util-user-agent-node": "npm:3.953.0" + "@smithy/config-resolver": "npm:^4.4.4" + "@smithy/core": "npm:^3.19.0" + "@smithy/fetch-http-handler": "npm:^5.3.7" + "@smithy/hash-node": "npm:^4.2.6" + "@smithy/invalid-dependency": "npm:^4.2.6" + "@smithy/middleware-content-length": "npm:^4.2.6" + "@smithy/middleware-endpoint": "npm:^4.3.15" + "@smithy/middleware-retry": "npm:^4.4.15" + "@smithy/middleware-serde": "npm:^4.2.7" + "@smithy/middleware-stack": "npm:^4.2.6" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/node-http-handler": "npm:^4.4.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/smithy-client": "npm:^4.10.0" + "@smithy/types": "npm:^4.10.0" + "@smithy/url-parser": "npm:^4.2.6" + "@smithy/util-base64": "npm:^4.3.0" + "@smithy/util-body-length-browser": "npm:^4.2.0" + "@smithy/util-body-length-node": "npm:^4.2.1" + "@smithy/util-defaults-mode-browser": "npm:^4.3.14" + "@smithy/util-defaults-mode-node": "npm:^4.2.17" + "@smithy/util-endpoints": "npm:^3.2.6" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-retry": "npm:^4.2.6" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/35baacf1c2513515f0ae6b1f3772401f43a24eaac08c1614680711aae23418ba1243a3144419a4a0662e929d2411ac39f833984794b92fdc4aa8238ee2ce7020 + languageName: node + linkType: hard + "@aws-sdk/region-config-resolver@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/region-config-resolver@npm:3.598.0" @@ -1523,6 +1868,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/region-config-resolver@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@smithy/config-resolver": "npm:^4.4.4" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/b11d9507df620afceec0e1a6c39225eae0494aac602c0113a895cff8cec2a6db36523ad8eff4b673f1d15a6e5bc9c971ba0c64d46ff5a59df5afa2b198e3f969 + languageName: node + linkType: hard + "@aws-sdk/s3-presigned-post@npm:^3.338.0": version: 3.600.0 resolution: "@aws-sdk/s3-presigned-post@npm:3.600.0" @@ -1614,6 +1972,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/token-providers@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/token-providers@npm:3.953.0" + dependencies: + "@aws-sdk/core": "npm:3.953.0" + "@aws-sdk/nested-clients": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/1ef0b8d8da84f815ef8ce9789fb894d512d970b91a61317422829ea82faebfc0d7270581306554e19b9f70e39730e56a438c25bffd29cdb4bdbecbb821caa53c + languageName: node + linkType: hard + "@aws-sdk/types@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/types@npm:3.598.0" @@ -1634,6 +2007,16 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/types@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/types@npm:3.953.0" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/959bab8a9cd280c0824265dce0892796326896df5407d4cf482791a76033182fe10b8080909965610cb56ff6c6117413e9920e864f519e85ce2c5a0041fd9cf1 + languageName: node + linkType: hard + "@aws-sdk/util-arn-parser@npm:3.568.0": version: 3.568.0 resolution: "@aws-sdk/util-arn-parser@npm:3.568.0" @@ -1677,6 +2060,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-endpoints@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/util-endpoints@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@smithy/types": "npm:^4.10.0" + "@smithy/url-parser": "npm:^4.2.6" + "@smithy/util-endpoints": "npm:^3.2.6" + tslib: "npm:^2.6.2" + checksum: 10/d1aebcf2a32d0c40c28462fcfaa34868fb09f7560ce622bda6f5194039783be218134119e928e4162e2820abfa7cf2777b730fbca6b79a64cb98f4763dc113eb + languageName: node + linkType: hard + "@aws-sdk/util-format-url@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/util-format-url@npm:3.598.0" @@ -1734,6 +2130,18 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-user-agent-browser@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.953.0" + dependencies: + "@aws-sdk/types": "npm:3.953.0" + "@smithy/types": "npm:^4.10.0" + bowser: "npm:^2.11.0" + tslib: "npm:^2.6.2" + checksum: 10/735ea58521b095ac5546e8cab4eadbb944207a619ed47a5ef962b6501bfc8dc296d24e3c7a2c27a0a44537966a49bf61467ed4bf5578eb8ba07fa6f343e99063 + languageName: node + linkType: hard + "@aws-sdk/util-user-agent-node@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/util-user-agent-node@npm:3.598.0" @@ -1769,6 +2177,24 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-user-agent-node@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.953.0" + dependencies: + "@aws-sdk/middleware-user-agent": "npm:3.953.0" + "@aws-sdk/types": "npm:3.953.0" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + checksum: 10/8d21a0106214469f1ce72b33cbdf3fef2dcdf36505874b9c0a999bee1b63390190e82f496c5b1e9cd0503304cee9ec58c491e5663cc38b3965284b74e9e0757f + languageName: node + linkType: hard + "@aws-sdk/xml-builder@npm:3.598.0": version: 3.598.0 resolution: "@aws-sdk/xml-builder@npm:3.598.0" @@ -1790,6 +2216,17 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/xml-builder@npm:3.953.0": + version: 3.953.0 + resolution: "@aws-sdk/xml-builder@npm:3.953.0" + dependencies: + "@smithy/types": "npm:^4.10.0" + fast-xml-parser: "npm:5.2.5" + tslib: "npm:^2.6.2" + checksum: 10/7ab2023a397373f4c52501e178d054d7637df78a90dc5ee430af6448e005f601f230aa284f8b41371a2db5a382c568a076968437bf1ec4b0122f546ea1e14b7e + languageName: node + linkType: hard + "@aws/lambda-invoke-store@npm:^0.0.1": version: 0.0.1 resolution: "@aws/lambda-invoke-store@npm:0.0.1" @@ -1797,6 +2234,13 @@ __metadata: languageName: node linkType: hard +"@aws/lambda-invoke-store@npm:^0.2.2": + version: 0.2.2 + resolution: "@aws/lambda-invoke-store@npm:0.2.2" + checksum: 10/18cd0cec90d9d865c9089218ef2220b0a7302a860c9a3f808b101386f569abc5ee11eb98a36947bed280a63308dd5df23c39e7b07fe9ac4f4ffcd0c4dce537c4 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.26.2, @babel/code-frame@npm:^7.27.1": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" @@ -6047,6 +6491,16 @@ __metadata: languageName: node linkType: hard +"@smithy/abort-controller@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/abort-controller@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/ef683909987f6225e43de1a256126f20d0ed213ae4f59edb2d9bc4c0c0d3d809dc66d3313afc3603aae81b842a23aa47f6e19d6439f009d7898db8c4206a7588 + languageName: node + linkType: hard + "@smithy/chunked-blob-reader-native@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/chunked-blob-reader-native@npm:3.0.0" @@ -6111,6 +6565,20 @@ __metadata: languageName: node linkType: hard +"@smithy/config-resolver@npm:^4.4.4": + version: 4.4.4 + resolution: "@smithy/config-resolver@npm:4.4.4" + dependencies: + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-config-provider": "npm:^4.2.0" + "@smithy/util-endpoints": "npm:^3.2.6" + "@smithy/util-middleware": "npm:^4.2.6" + tslib: "npm:^2.6.2" + checksum: 10/61f25f55e81233b7cd7cb3a123bb16052640de63ef6badab399b0f95fe3846e36b93181c6d80707265c662f0949a2f7f12b57e85580ed3a0e43403b19c87b36f + languageName: node + linkType: hard + "@smithy/core@npm:^2.2.1": version: 2.2.3 resolution: "@smithy/core@npm:2.2.3" @@ -6145,6 +6613,24 @@ __metadata: languageName: node linkType: hard +"@smithy/core@npm:^3.19.0": + version: 3.19.0 + resolution: "@smithy/core@npm:3.19.0" + dependencies: + "@smithy/middleware-serde": "npm:^4.2.7" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-base64": "npm:^4.3.0" + "@smithy/util-body-length-browser": "npm:^4.2.0" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-stream": "npm:^4.5.7" + "@smithy/util-utf8": "npm:^4.2.0" + "@smithy/uuid": "npm:^1.1.0" + tslib: "npm:^2.6.2" + checksum: 10/feedf2138fd1b63108603d30969d9bc9053f117086f690f26049193381af8ba78a48fc90d8941c98c3564c2f45dc8ad57fb6bae9cff0a146f6c82d7b376def02 + languageName: node + linkType: hard + "@smithy/credential-provider-imds@npm:^3.1.1, @smithy/credential-provider-imds@npm:^3.1.2": version: 3.1.2 resolution: "@smithy/credential-provider-imds@npm:3.1.2" @@ -6171,6 +6657,19 @@ __metadata: languageName: node linkType: hard +"@smithy/credential-provider-imds@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/credential-provider-imds@npm:4.2.6" + dependencies: + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/url-parser": "npm:^4.2.6" + tslib: "npm:^2.6.2" + checksum: 10/ac0fe1e1bb75b82287bdd6869f072ce9928baaf27d61cba7c881968161dd94fd9c287f208ac7b77c83a7983bde9cfffd5bcc32ba788dbd6903aa3702aac1618a + languageName: node + linkType: hard + "@smithy/eventstream-codec@npm:^3.1.1": version: 3.1.1 resolution: "@smithy/eventstream-codec@npm:3.1.1" @@ -6307,6 +6806,19 @@ __metadata: languageName: node linkType: hard +"@smithy/fetch-http-handler@npm:^5.3.7": + version: 5.3.7 + resolution: "@smithy/fetch-http-handler@npm:5.3.7" + dependencies: + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/querystring-builder": "npm:^4.2.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-base64": "npm:^4.3.0" + tslib: "npm:^2.6.2" + checksum: 10/ad45a381f37dcad2e7df47b596569bd182e96f73ca329726bb10209eff7e92efb1d50e3a0f14ffc15c7d6e0afbc8cc267c2151e6b2f99df33fa1dbc95441c0a9 + languageName: node + linkType: hard + "@smithy/hash-blob-browser@npm:^3.1.0": version: 3.1.1 resolution: "@smithy/hash-blob-browser@npm:3.1.1" @@ -6355,6 +6867,18 @@ __metadata: languageName: node linkType: hard +"@smithy/hash-node@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/hash-node@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + "@smithy/util-buffer-from": "npm:^4.2.0" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/ae593b814d1cbd12a676d246ab0528a9f1b79c698c403b88255b20116c256c815b6fbbd3bfda496f5205159bdcd0fc69b75224837767981b19f43270b846e58e + languageName: node + linkType: hard + "@smithy/hash-stream-node@npm:^3.1.0": version: 3.1.1 resolution: "@smithy/hash-stream-node@npm:3.1.1" @@ -6397,6 +6921,16 @@ __metadata: languageName: node linkType: hard +"@smithy/invalid-dependency@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/invalid-dependency@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/96a2863eaa1405e4bd38521f159f78429e6a329a4606034630d161ba3206a1574c76f5b1099357928b9a9b2987e180f3ca51b3c4e917502c6931f7aaa666b9c9 + languageName: node + linkType: hard + "@smithy/is-array-buffer@npm:^2.2.0": version: 2.2.0 resolution: "@smithy/is-array-buffer@npm:2.2.0" @@ -6424,6 +6958,15 @@ __metadata: languageName: node linkType: hard +"@smithy/is-array-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/is-array-buffer@npm:4.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/fdc097ce6a8b241565e2d56460ec289730bcd734dcde17c23d1eaaa0996337f897217166276a3fd82491fe9fd17447aadf62e8d9056b3d2b9daf192b4b668af9 + languageName: node + linkType: hard + "@smithy/md5-js@npm:^3.0.1": version: 3.0.2 resolution: "@smithy/md5-js@npm:3.0.2" @@ -6468,6 +7011,17 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-content-length@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/middleware-content-length@npm:4.2.6" + dependencies: + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/224d5c5c3aa0f8d0d9a934b2c82b77ba9e0b9fdd27502adaa011f8d5c3f521e501763f377546b0945908d947b4e74fabc00d4fc282a1d3dc976339ae4fdc4945 + languageName: node + linkType: hard + "@smithy/middleware-endpoint@npm:^3.0.2, @smithy/middleware-endpoint@npm:^3.0.3": version: 3.0.3 resolution: "@smithy/middleware-endpoint@npm:3.0.3" @@ -6499,6 +7053,22 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-endpoint@npm:^4.3.15, @smithy/middleware-endpoint@npm:^4.4.0": + version: 4.4.0 + resolution: "@smithy/middleware-endpoint@npm:4.4.0" + dependencies: + "@smithy/core": "npm:^3.19.0" + "@smithy/middleware-serde": "npm:^4.2.7" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + "@smithy/url-parser": "npm:^4.2.6" + "@smithy/util-middleware": "npm:^4.2.6" + tslib: "npm:^2.6.2" + checksum: 10/3b6c3cfa39daa27c27c10054658912eb9f4db19371461821f0fb9afeda50e97fe3af2cbe46d3c481dea63161788895217fffe1484d9cae716364385dac317bcb + languageName: node + linkType: hard + "@smithy/middleware-retry@npm:^3.0.4, @smithy/middleware-retry@npm:^3.0.6": version: 3.0.6 resolution: "@smithy/middleware-retry@npm:3.0.6" @@ -6533,6 +7103,23 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-retry@npm:^4.4.15": + version: 4.4.16 + resolution: "@smithy/middleware-retry@npm:4.4.16" + dependencies: + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/service-error-classification": "npm:^4.2.6" + "@smithy/smithy-client": "npm:^4.10.1" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-retry": "npm:^4.2.6" + "@smithy/uuid": "npm:^1.1.0" + tslib: "npm:^2.6.2" + checksum: 10/b2d873d535eea2af1d719594a900167bf6e5b760492745ea04e9d85b1d9248944ac46c18a8595a27f4ea43d2bad92ed04d822e463ac1d12b248a07a7702a07ac + languageName: node + linkType: hard + "@smithy/middleware-serde@npm:^3.0.1, @smithy/middleware-serde@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/middleware-serde@npm:3.0.2" @@ -6554,6 +7141,17 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-serde@npm:^4.2.7": + version: 4.2.7 + resolution: "@smithy/middleware-serde@npm:4.2.7" + dependencies: + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/5cc20397a0ebd657825b8694599d1af5e98adb6f2232073bdd1045a3af9ecf62cfde3ac90613c94836b543b2fbff4f0be212410052089a66e54bd52638b61693 + languageName: node + linkType: hard + "@smithy/middleware-stack@npm:^3.0.1, @smithy/middleware-stack@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/middleware-stack@npm:3.0.2" @@ -6574,6 +7172,16 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-stack@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/middleware-stack@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/17f5247494caa3325375f2ff729844816ccb6f7c4acf3033dba448fe85172290f5dc4cebefabcfd9c238ba84b2eef5a4d5f689cfcff39913621feb33645ddd3b + languageName: node + linkType: hard + "@smithy/node-config-provider@npm:^3.1.1, @smithy/node-config-provider@npm:^3.1.2": version: 3.1.2 resolution: "@smithy/node-config-provider@npm:3.1.2" @@ -6598,6 +7206,18 @@ __metadata: languageName: node linkType: hard +"@smithy/node-config-provider@npm:^4.3.6": + version: 4.3.6 + resolution: "@smithy/node-config-provider@npm:4.3.6" + dependencies: + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/shared-ini-file-loader": "npm:^4.4.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/f67ebc9f50d7e44295b6ba5ca0341b54b4fb472d85925993778ef4e3c9046146a15d01b61b31928fa23465a46974cd69b851d3e529beb6da5f4b13e4fb50fe29 + languageName: node + linkType: hard + "@smithy/node-http-handler@npm:^3.0.1, @smithy/node-http-handler@npm:^3.1.0": version: 3.1.0 resolution: "@smithy/node-http-handler@npm:3.1.0" @@ -6624,6 +7244,19 @@ __metadata: languageName: node linkType: hard +"@smithy/node-http-handler@npm:^4.4.6": + version: 4.4.6 + resolution: "@smithy/node-http-handler@npm:4.4.6" + dependencies: + "@smithy/abort-controller": "npm:^4.2.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/querystring-builder": "npm:^4.2.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/52afe7ee82b2e988dcd2c2ce6bcd0bc4f7aeaa7a517d722a40b9237841a586ced381b27c3d73b9dc573f5bd6168742427a155103da8474d268b5af0194fc734b + languageName: node + linkType: hard + "@smithy/property-provider@npm:^3.1.1, @smithy/property-provider@npm:^3.1.2": version: 3.1.2 resolution: "@smithy/property-provider@npm:3.1.2" @@ -6644,6 +7277,16 @@ __metadata: languageName: node linkType: hard +"@smithy/property-provider@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/property-provider@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/019f03694bd0c23a61e62c85271b612267886dd6b631ea8b3c79038edefdcb05136988bfb3ae86dca43868cb072545420d4dbaaea012c626107d168f8349a211 + languageName: node + linkType: hard + "@smithy/protocol-http@npm:^4.0.1, @smithy/protocol-http@npm:^4.0.2": version: 4.0.2 resolution: "@smithy/protocol-http@npm:4.0.2" @@ -6664,6 +7307,16 @@ __metadata: languageName: node linkType: hard +"@smithy/protocol-http@npm:^5.3.6": + version: 5.3.6 + resolution: "@smithy/protocol-http@npm:5.3.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/a7fe130953bcc7bfd1a51cb65443919003aa6954950489023f33355a55e096287ae10760dd2b6f4359666c3e99ad584a12422a7a31fffc4b171c35b85b16a769 + languageName: node + linkType: hard + "@smithy/querystring-builder@npm:^3.0.1, @smithy/querystring-builder@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/querystring-builder@npm:3.0.2" @@ -6686,6 +7339,17 @@ __metadata: languageName: node linkType: hard +"@smithy/querystring-builder@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/querystring-builder@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + "@smithy/util-uri-escape": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/2495004856d76c3de3b8df793a3e53233f2e993e34bb936f120aeaa74712acee03ef9b828457a8fa7ed616d01947b357f898aff37519aba80d200ed8104843bd + languageName: node + linkType: hard + "@smithy/querystring-parser@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/querystring-parser@npm:3.0.2" @@ -6706,6 +7370,16 @@ __metadata: languageName: node linkType: hard +"@smithy/querystring-parser@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/querystring-parser@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/f3aae6561a973def4db9b3344c7860ae5659203cb912ac8aaba68e9ee67726534756fa51f93dfc23874a878e98a93744dd69946d86e045f87a08bbf42421c1f3 + languageName: node + linkType: hard + "@smithy/service-error-classification@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/service-error-classification@npm:3.0.2" @@ -6724,6 +7398,15 @@ __metadata: languageName: node linkType: hard +"@smithy/service-error-classification@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/service-error-classification@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + checksum: 10/b77e79aa66eadba65acae98cea257162cc5b4733987dea458ffc5e4c997ea8ab64bf9fb3178ac15ee2159e616c3d87a71ecc0be91f5abff624e523602a364a9f + languageName: node + linkType: hard + "@smithy/shared-ini-file-loader@npm:^3.1.1, @smithy/shared-ini-file-loader@npm:^3.1.2": version: 3.1.2 resolution: "@smithy/shared-ini-file-loader@npm:3.1.2" @@ -6744,6 +7427,16 @@ __metadata: languageName: node linkType: hard +"@smithy/shared-ini-file-loader@npm:^4.4.1": + version: 4.4.1 + resolution: "@smithy/shared-ini-file-loader@npm:4.4.1" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/a05814e89f66fef0b79e464d06e3c36c553fb8aebc68f08674776806f7f5c11e2e5b83d85f1a450fc5d447ca4c3471a967c90ebfead28f75c829df125967ed80 + languageName: node + linkType: hard + "@smithy/signature-v4@npm:^3.1.0": version: 3.1.1 resolution: "@smithy/signature-v4@npm:3.1.1" @@ -6775,6 +7468,22 @@ __metadata: languageName: node linkType: hard +"@smithy/signature-v4@npm:^5.3.6": + version: 5.3.6 + resolution: "@smithy/signature-v4@npm:5.3.6" + dependencies: + "@smithy/is-array-buffer": "npm:^4.2.0" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-hex-encoding": "npm:^4.2.0" + "@smithy/util-middleware": "npm:^4.2.6" + "@smithy/util-uri-escape": "npm:^4.2.0" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/6ee715d5000b2df51cbb8bf72d4fefbe159bacf65b8c3decc93bb11b97f1eb5daf5980d6083751dc4e39a6b8954a2709bb8f12d091f8ad87d1f4910537f494f4 + languageName: node + linkType: hard + "@smithy/smithy-client@npm:^3.1.2, @smithy/smithy-client@npm:^3.1.4": version: 3.1.4 resolution: "@smithy/smithy-client@npm:3.1.4" @@ -6789,6 +7498,21 @@ __metadata: languageName: node linkType: hard +"@smithy/smithy-client@npm:^4.10.0, @smithy/smithy-client@npm:^4.10.1": + version: 4.10.1 + resolution: "@smithy/smithy-client@npm:4.10.1" + dependencies: + "@smithy/core": "npm:^3.19.0" + "@smithy/middleware-endpoint": "npm:^4.4.0" + "@smithy/middleware-stack": "npm:^4.2.6" + "@smithy/protocol-http": "npm:^5.3.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-stream": "npm:^4.5.7" + tslib: "npm:^2.6.2" + checksum: 10/efb5230ff1ea6d2661ca7bc89bbd5c6f4d710d7f9d62efa51f8f68476f71a5734b5877d666b2528b814b327c1deb07ee5ae877882e318d6d8fc1d9deb5e8357f + languageName: node + linkType: hard + "@smithy/smithy-client@npm:^4.6.4, @smithy/smithy-client@npm:^4.6.5": version: 4.6.5 resolution: "@smithy/smithy-client@npm:4.6.5" @@ -6813,6 +7537,15 @@ __metadata: languageName: node linkType: hard +"@smithy/types@npm:^4.10.0": + version: 4.10.0 + resolution: "@smithy/types@npm:4.10.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/04486a46b3c3bcb8fc024951041390261edb0aa7db4b8c467dfc8a7373d09d58c0106edabbaff3163af15271f113c236e7f835a405bcd8d7652ea49578e7eb35 + languageName: node + linkType: hard + "@smithy/types@npm:^4.5.0": version: 4.5.0 resolution: "@smithy/types@npm:4.5.0" @@ -6844,6 +7577,17 @@ __metadata: languageName: node linkType: hard +"@smithy/url-parser@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/url-parser@npm:4.2.6" + dependencies: + "@smithy/querystring-parser": "npm:^4.2.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/64080eae9fdad635178e1dbc611adcdad7a82ced4d2943445e90f0321c8a31ebcdec9fae8961d808bb59a7df100dc54acb43af158a9965e7a456acfb59bf0775 + languageName: node + linkType: hard + "@smithy/util-base64@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-base64@npm:3.0.0" @@ -6866,6 +7610,17 @@ __metadata: languageName: node linkType: hard +"@smithy/util-base64@npm:^4.3.0": + version: 4.3.0 + resolution: "@smithy/util-base64@npm:4.3.0" + dependencies: + "@smithy/util-buffer-from": "npm:^4.2.0" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/87065ca13e3745858e0bb0ab6374433b258c378ee2a5ef865b74f6a4208c56db7db2b9ee5f888e021de0107fae49e9957662c4c6847fe10529e2f6cc882426b4 + languageName: node + linkType: hard + "@smithy/util-body-length-browser@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-body-length-browser@npm:3.0.0" @@ -6884,6 +7639,15 @@ __metadata: languageName: node linkType: hard +"@smithy/util-body-length-browser@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-body-length-browser@npm:4.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/deeb689b52652651c11530a324e07725805533899215ad1f93c5e9a14931443e22b313491a3c2a6d7f61d6dd1e84f9154d0d32de62bf61e0bd8e6ab7bf5f81ed + languageName: node + linkType: hard + "@smithy/util-body-length-node@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-body-length-node@npm:3.0.0" @@ -6902,6 +7666,15 @@ __metadata: languageName: node linkType: hard +"@smithy/util-body-length-node@npm:^4.2.1": + version: 4.2.1 + resolution: "@smithy/util-body-length-node@npm:4.2.1" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/efb1333d35120124ec0c751b7b7d5657eb9ad6d0bf6171ff61fde2504639883d36e9562613c70eca623b726193b22601c8ff60e40a8156102d4c5b12fae222f8 + languageName: node + linkType: hard + "@smithy/util-buffer-from@npm:^2.2.0": version: 2.2.0 resolution: "@smithy/util-buffer-from@npm:2.2.0" @@ -6932,6 +7705,16 @@ __metadata: languageName: node linkType: hard +"@smithy/util-buffer-from@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-buffer-from@npm:4.2.0" + dependencies: + "@smithy/is-array-buffer": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/6a81e658554d7123fe089426a840b5e691aee4aa4f0d72b79af19dcf57ccb212dca518acb447714792d48c2dc99bda5e0e823dab05e450ee2393146706d476f9 + languageName: node + linkType: hard + "@smithy/util-config-provider@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-config-provider@npm:3.0.0" @@ -6950,6 +7733,15 @@ __metadata: languageName: node linkType: hard +"@smithy/util-config-provider@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-config-provider@npm:4.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/d65f36401c7a085660cf201a1b317d271e390258b619179fff88248c2db64fc35e6c62fe055f1e55be8935b06eb600379824dabf634fb26d528f54fe60c9d77b + languageName: node + linkType: hard + "@smithy/util-defaults-mode-browser@npm:^3.0.4": version: 3.0.6 resolution: "@smithy/util-defaults-mode-browser@npm:3.0.6" @@ -6976,6 +7768,18 @@ __metadata: languageName: node linkType: hard +"@smithy/util-defaults-mode-browser@npm:^4.3.14": + version: 4.3.15 + resolution: "@smithy/util-defaults-mode-browser@npm:4.3.15" + dependencies: + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/smithy-client": "npm:^4.10.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/24f9b105f85a76a8df1da930892bf04e1d21dcbd1042d93b049d3c201be3e2c91c4d2b12244b740149d5b2353072578c96ef49c93e280e9948a582ab6fc2f0b3 + languageName: node + linkType: hard + "@smithy/util-defaults-mode-node@npm:^3.0.4": version: 3.0.6 resolution: "@smithy/util-defaults-mode-node@npm:3.0.6" @@ -7006,6 +7810,21 @@ __metadata: languageName: node linkType: hard +"@smithy/util-defaults-mode-node@npm:^4.2.17": + version: 4.2.18 + resolution: "@smithy/util-defaults-mode-node@npm:4.2.18" + dependencies: + "@smithy/config-resolver": "npm:^4.4.4" + "@smithy/credential-provider-imds": "npm:^4.2.6" + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/property-provider": "npm:^4.2.6" + "@smithy/smithy-client": "npm:^4.10.1" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/a558ec6ceb0bff5e8e8a237b6baa03bba550a4a0d227c1458c59819c3bdd5a4671019e66aceca3071e30558fd50d45b03f3cdf3a76ad122a14f2561aafd7c457 + languageName: node + linkType: hard + "@smithy/util-endpoints@npm:^2.0.2": version: 2.0.3 resolution: "@smithy/util-endpoints@npm:2.0.3" @@ -7028,6 +7847,17 @@ __metadata: languageName: node linkType: hard +"@smithy/util-endpoints@npm:^3.2.6": + version: 3.2.6 + resolution: "@smithy/util-endpoints@npm:3.2.6" + dependencies: + "@smithy/node-config-provider": "npm:^4.3.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/7ba0177c333a662d6c1019481ef262666dbcf103292c84acd2ef445bfe6a74576a83a09d1e9870692fd465ab14e2107d5f4b0c72ec55009255f26defa17229ea + languageName: node + linkType: hard + "@smithy/util-hex-encoding@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-hex-encoding@npm:3.0.0" @@ -7046,6 +7876,15 @@ __metadata: languageName: node linkType: hard +"@smithy/util-hex-encoding@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-hex-encoding@npm:4.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/478773d73690e39167b67481116c4fd47cecfc97c3a935d88db9271fb0718627bec1cbc143efbf0cd49d1ac417bde7e76aa74139ea07e365b51e66797f63a45d + languageName: node + linkType: hard + "@smithy/util-middleware@npm:^3.0.1, @smithy/util-middleware@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/util-middleware@npm:3.0.2" @@ -7066,6 +7905,16 @@ __metadata: languageName: node linkType: hard +"@smithy/util-middleware@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/util-middleware@npm:4.2.6" + dependencies: + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/ebb2f228b69301d9dbe63fb15fabe4408a9064ad834ecf4c1c77e5fca2171e11b21caa30e58553a1db0ec34b7d8cbbe7543ccc330f4b98210ef3ba5e47a1e024 + languageName: node + linkType: hard + "@smithy/util-retry@npm:^3.0.1, @smithy/util-retry@npm:^3.0.2": version: 3.0.2 resolution: "@smithy/util-retry@npm:3.0.2" @@ -7088,6 +7937,17 @@ __metadata: languageName: node linkType: hard +"@smithy/util-retry@npm:^4.2.6": + version: 4.2.6 + resolution: "@smithy/util-retry@npm:4.2.6" + dependencies: + "@smithy/service-error-classification": "npm:^4.2.6" + "@smithy/types": "npm:^4.10.0" + tslib: "npm:^2.6.2" + checksum: 10/039d23283975352f8d6b668cd21043071f9f9299eba76fca8ec574e0bbbb2cdf44aeada7b929fb2a9f8a19d513d6e394b4c53e3654b757916de32e28834d042c + languageName: node + linkType: hard + "@smithy/util-stream@npm:^3.0.2, @smithy/util-stream@npm:^3.0.4": version: 3.0.4 resolution: "@smithy/util-stream@npm:3.0.4" @@ -7120,6 +7980,22 @@ __metadata: languageName: node linkType: hard +"@smithy/util-stream@npm:^4.5.7": + version: 4.5.7 + resolution: "@smithy/util-stream@npm:4.5.7" + dependencies: + "@smithy/fetch-http-handler": "npm:^5.3.7" + "@smithy/node-http-handler": "npm:^4.4.6" + "@smithy/types": "npm:^4.10.0" + "@smithy/util-base64": "npm:^4.3.0" + "@smithy/util-buffer-from": "npm:^4.2.0" + "@smithy/util-hex-encoding": "npm:^4.2.0" + "@smithy/util-utf8": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/7142ea677aaba0c89a0ff45adee50f061d40a6a3dc5d1a7666c4b61e5ee15fbad9255e1fcffdc429a30a6428d543fcbe19baefb0be50563c8ea3134de04898b2 + languageName: node + linkType: hard + "@smithy/util-uri-escape@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-uri-escape@npm:3.0.0" @@ -7138,6 +8014,15 @@ __metadata: languageName: node linkType: hard +"@smithy/util-uri-escape@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-uri-escape@npm:4.2.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/a838a3afe557d7087d4500735c79d5da72e0cd5a08f95d1a1c450ba29d9cd85c950228eedbd9b2494156f4eb8658afb0a9a5bd2df3fc4f297faed886c396242b + languageName: node + linkType: hard + "@smithy/util-utf8@npm:^2.0.0": version: 2.3.0 resolution: "@smithy/util-utf8@npm:2.3.0" @@ -7168,6 +8053,16 @@ __metadata: languageName: node linkType: hard +"@smithy/util-utf8@npm:^4.2.0": + version: 4.2.0 + resolution: "@smithy/util-utf8@npm:4.2.0" + dependencies: + "@smithy/util-buffer-from": "npm:^4.2.0" + tslib: "npm:^2.6.2" + checksum: 10/d49f58fc6681255eecc3dee39c657b80ef8a4c5617e361bdaf6aaa22f02e378622376153cafc9f0655fb80162e88fc98bbf459f8dd5ba6d7c4b9a59e6eaa05f8 + languageName: node + linkType: hard + "@smithy/util-waiter@npm:^3.0.1": version: 3.1.0 resolution: "@smithy/util-waiter@npm:3.1.0" @@ -7199,6 +8094,15 @@ __metadata: languageName: node linkType: hard +"@smithy/uuid@npm:^1.1.0": + version: 1.1.0 + resolution: "@smithy/uuid@npm:1.1.0" + dependencies: + tslib: "npm:^2.6.2" + checksum: 10/fe77b1cebbbf2d541ee2f07eec6d4573af16e08dd3228758f59dcbe85a504112cefe81b971818cf39e2e3fa0ed1fcc61d392cddc50fca13d9dc9bd835e366db0 + languageName: node + linkType: hard + "@socket.io/component-emitter@npm:~3.1.0": version: 3.1.2 resolution: "@socket.io/component-emitter@npm:3.1.2" @@ -8789,6 +9693,7 @@ __metadata: resolution: "@uppy/aws-s3@workspace:packages/@uppy/aws-s3" dependencies: "@aws-sdk/client-s3": "npm:^3.362.0" + "@aws-sdk/client-sts": "npm:^3.362.0" "@aws-sdk/s3-request-presigner": "npm:^3.362.0" "@uppy/companion-client": "workspace:^" "@uppy/core": "workspace:^"