From 0a66d5e308f4247c795460c058640b614e42aa40 Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Sun, 1 Feb 2026 21:38:26 +0100 Subject: [PATCH 1/4] object tests updates post unused functions removal Issue: CLDSRV-826 --- .../raw-node/test/GCP/object/completeMpu.js | 128 +++++++------ .../raw-node/test/GCP/object/copy.js | 109 +++++------ .../raw-node/test/GCP/object/delete.js | 87 ++++----- .../raw-node/test/GCP/object/deleteMpu.js | 96 +++++----- .../raw-node/test/GCP/object/deleteTagging.js | 130 ++++++------- .../raw-node/test/GCP/object/get.js | 91 ++++----- .../raw-node/test/GCP/object/getTagging.js | 99 +++++----- .../raw-node/test/GCP/object/head.js | 119 ++++++------ .../raw-node/test/GCP/object/initiateMpu.js | 175 +++++++++++------- .../raw-node/test/GCP/object/put.js | 89 ++++----- .../raw-node/test/GCP/object/putTagging.js | 84 ++++----- .../raw-node/test/GCP/object/upload.js | 115 ++++++------ 12 files changed, 645 insertions(+), 677 deletions(-) diff --git a/tests/functional/raw-node/test/GCP/object/completeMpu.js b/tests/functional/raw-node/test/GCP/object/completeMpu.js index 900093f353..524b49eab9 100644 --- a/tests/functional/raw-node/test/GCP/object/completeMpu.js +++ b/tests/functional/raw-node/test/GCP/object/completeMpu.js @@ -1,16 +1,20 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); +const { ListObjectsCommand } = require('@aws-sdk/client-s3'); const { GCP, GcpUtils } = arsenal.storage.data.external.GCP; const { - gcpRequestRetry, - gcpClientRetry, - setBucketClass, gcpMpuSetup, genUniqID, + gcpRetry, } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + HeadBucketCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketNames = { @@ -49,29 +53,28 @@ function listObjectsPaginated(gcpClient, bucketName, cb) { params.Marker = marker; } - return gcpClientRetry(gcpClient.listObjects.bind(gcpClient), params, (err, res) => { - if (err) { - return cb(err); - } - - const contents = (res && res.Contents) || []; - objects.push(...contents); + const command = new ListObjectsCommand(params); + return gcpClient.send(command) + .then(res => { + const contents = (res && res.Contents) || []; + objects.push(...contents); - const isTruncated = Boolean(res && res.IsTruncated); - if (!isTruncated) { - return cb(null, objects); - } + const isTruncated = Boolean(res && res.IsTruncated); + if (!isTruncated) { + return cb(null, objects); + } - // AWS listObjects(V1) pagination: prefer NextMarker, fallback to last key. - marker = (res && res.NextMarker) || - (contents.length ? contents[contents.length - 1].Key : undefined); + // AWS listObjects(V1) pagination: prefer NextMarker, fallback to last key. + marker = (res && res.NextMarker) || + (contents.length ? contents[contents.length - 1].Key : undefined); - if (!marker) { - return cb(null, objects); - } + if (!marker) { + return cb(null, objects); + } - return _list(); - }); + return _list(); + }) + .catch(err => cb(err)); } return _list(); @@ -87,52 +90,73 @@ function emptyBucket(gcpClient, bucketName, cb) { Bucket: bucketName, Key: object.Key, }; - return gcpClientRetry(gcpClient.deleteObject.bind(gcpClient), deleteParams, next); + return gcpClient.deleteObject(deleteParams, next); }, cb); }); } +function waitForBucketReady(gcpClient, bucketName) { + const cmd = new HeadBucketCommand({ Bucket: bucketName }); + return gcpRetry(gcpClient, cmd, { + maxAttempts: 6, + shouldRetry: err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + ), + getDelayMs: attempt => (attempt + 1) * 1000, + }); +} + describe('GCP: Complete MPU', function testSuite() { this.timeout(600000); let config; let gcpClient; - before(done => { + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - async.eachSeries(bucketNames, - (bucket, next) => gcpRequestRetry({ - method: 'PUT', - bucket: bucket.Name, - authCredentials: config.credentials, - requestBody: setBucketClass(bucket.Type), - }, 0, err => { - if (err) { + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + const cmd = new CreateBucketCommand({ Bucket: bucket.Name }); + try { + await gcpRetry(gcpClient, cmd); + await waitForBucketReady(gcpClient, bucket.Name); + } catch (err) { process.stdout.write(`err in creating bucket ${err}\n`); + throw err; } - return next(err); - }), - done); + }, + ); }); - after(done => { - async.eachSeries(bucketNames, - (bucket, next) => emptyBucket(gcpClient, bucket.Name, err => { - assert.equal(err, null, - `Expected success, but got error ${err}`); - gcpRequestRetry({ - method: 'DELETE', - bucket: bucket.Name, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write( - `err in deleting bucket ${err}\n`); - } - return next(err); + after(async () => { + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + await new Promise((resolve, reject) => { + emptyBucket(gcpClient, bucket.Name, err => { + if (err) { + reject(err); + return; + } + resolve(); + }); }); - }), - done); + const cmd = new DeleteBucketCommand({ Bucket: bucket.Name }); + try { + await gcpRetry(gcpClient, cmd); + } catch (err) { + process.stdout.write(`err in deleting bucket ${err}\n`); + throw err; + } + }, + ); }); describe('when MPU has 0 parts', () => { diff --git a/tests/functional/raw-node/test/GCP/object/copy.js b/tests/functional/raw-node/test/GCP/object/copy.js index 7df2260736..2527e9fac8 100644 --- a/tests/functional/raw-node/test/GCP/object/copy.js +++ b/tests/functional/raw-node/test/GCP/object/copy.js @@ -2,10 +2,14 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; @@ -15,30 +19,18 @@ describe('GCP: COPY Object', function testSuite() { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - before(done => { - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); describe('without existing object in bucket', () => { @@ -63,41 +55,38 @@ describe('GCP: COPY Object', function testSuite() { this.currentTest.key = `somekey-${genUniqID()}`; this.currentTest.copyKey = `copykey-${genUniqID()}`; this.currentTest.initValue = `${genUniqID()}`; - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.copyKey, - headers: { - 'x-goog-meta-value': this.currentTest.initValue, + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.copyKey, + Metadata: { + value: this.currentTest.initValue, }, - authCredentials: config.credentials, - }, (err, res) => { - if (err) { - process.stdout.write(`err in creating object ${err}\n`); - } - this.currentTest.contentHash = res.headers['x-goog-hash']; - return done(err); }); + gcpClient.send(cmd) + .then(res => { + this.currentTest.ETag = res.ETag; + return done(); + }) + .catch(err => { + process.stdout.write(`err in creating object ${err}\n`); + return done(err); + }); }); afterEach(function afterFn(done) { async.parallel([ - next => makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, + next => gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.key, }, err => { if (err) { process.stdout.write(`err in deleting object ${err}\n`); } return next(err); }), - next => makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.copyKey, - authCredentials: config.credentials, + next => gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.copyKey, }, err => { if (err) { process.stdout @@ -125,20 +114,17 @@ describe('GCP: COPY Object', function testSuite() { `Expected success, but got error ${err}`); return next(); }), - next => makeGcpRequest({ - method: 'HEAD', - bucket: bucketName, - objectKey: this.test.key, - authCredentials: config.credentials, + next => gcpClient.headObject({ + Bucket: bucketName, + Key: this.test.key, }, (err, res) => { if (err) { process.stdout .write(`err in retrieving object ${err}\n`); return next(err); } - assert.strictEqual(this.test.contentHash, - res.headers['x-goog-hash']); - assert.notStrictEqual(res.headers['x-goog-meta-value'], + assert.strictEqual(res.ETag, this.test.ETag); + assert.notStrictEqual(res.Metadata.value, this.test.initValue); return next(); }), @@ -158,20 +144,17 @@ describe('GCP: COPY Object', function testSuite() { `Expected success, but got error ${err}`); return next(); }), - next => makeGcpRequest({ - method: 'HEAD', - bucket: bucketName, - objectKey: this.test.key, - authCredentials: config.credentials, + next => gcpClient.headObject({ + Bucket: bucketName, + Key: this.test.key, }, (err, res) => { if (err) { process.stdout .write(`err in retrieving object ${err}\n`); return next(err); } - assert.strictEqual(this.test.contentHash, - res.headers['x-goog-hash']); - assert.strictEqual(res.headers['x-goog-meta-value'], + assert.strictEqual(res.ETag, this.test.ETag); + assert.strictEqual(res.Metadata.value, this.test.initValue); return next(); }), diff --git a/tests/functional/raw-node/test/GCP/object/delete.js b/tests/functional/raw-node/test/GCP/object/delete.js index 669969003c..62a4ada5ae 100644 --- a/tests/functional/raw-node/test/GCP/object/delete.js +++ b/tests/functional/raw-node/test/GCP/object/delete.js @@ -2,10 +2,15 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, + GetObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; @@ -17,45 +22,27 @@ describe('GCP: DELETE Object', function testSuite() { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - before(done => { - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); describe('with existing object in bucket', () => { - beforeEach(done => { - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey, - authCredentials: config.credentials, - }, err => { - if (err) { - process.stdout.write(`err in creating object ${err}\n`); - } - return done(err); + beforeEach(async () => { + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: objectKey, }); + await gcpClient.send(cmd); }); it('should successfully delete object', done => { @@ -68,17 +55,25 @@ describe('GCP: DELETE Object', function testSuite() { `Expected success, got error ${err}`); return next(); }), - next => makeGcpRequest({ - method: 'GET', - bucket: bucketName, - objectKey, - authCredentials: config.credentials, - }, err => { - assert(err); - assert.strictEqual(err.statusCode, 404); - assert.strictEqual(err.code, 'NoSuchKey'); - return next(); - }), + next => { + const cmd = new GetObjectCommand({ + Bucket: bucketName, + Key: objectKey, + }); + gcpClient.send(cmd) + .then(() => { + // Should not succeed + assert.fail('Expected NoSuchKey error'); + }) + .catch(err => { + assert(err); + assert.strictEqual( + err.$metadata && err.$metadata.httpStatusCode, + 404); + assert.strictEqual(err.name, 'NoSuchKey'); + return next(); + }); + }, ], err => done(err)); }); }); diff --git a/tests/functional/raw-node/test/GCP/object/deleteMpu.js b/tests/functional/raw-node/test/GCP/object/deleteMpu.js index 0d923a9a45..d3c6be9f7b 100644 --- a/tests/functional/raw-node/test/GCP/object/deleteMpu.js +++ b/tests/functional/raw-node/test/GCP/object/deleteMpu.js @@ -2,20 +2,24 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { gcpRequestRetry, setBucketClass, gcpMpuSetup, genUniqID } = +const { gcpMpuSetup, genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + ListObjectsCommand, + HeadBucketCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketNames = { main: { Name: `somebucket-${genUniqID()}`, - Type: 'MULTI_REGIONAL', }, mpu: { Name: `mpubucket-${genUniqID()}`, - Type: 'MULTI_REGIONAL', }, }; const numParts = 10; @@ -37,55 +41,59 @@ describe('GCP: Abort MPU', function testSuite() { let config; let gcpClient; - before(done => { + function waitForBucketReady(bucketName) { + const cmd = new HeadBucketCommand({ Bucket: bucketName }); + return gcpRetry(gcpClient, cmd, { + maxAttempts: 6, + shouldRetry: err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + ), + getDelayMs: attempt => (attempt + 1) * 1000, + }); + } + + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - async.eachSeries(bucketNames, - (bucket, next) => gcpRequestRetry({ - method: 'PUT', - bucket: bucket.Name, - authCredentials: config.credentials, - requestBody: setBucketClass(bucket.Type), - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return next(err); - }), - done); + + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucket.Name }), + ); + await waitForBucketReady(bucket.Name); + }, + ); }); - after(done => { - async.eachSeries(bucketNames, - (bucket, next) => gcpClient.listObjects({ - Bucket: bucket.Name, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got error ${err}`); - async.map(res.Contents, (object, moveOn) => { - const deleteParams = { + after(async () => { + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + const listCmd = new ListObjectsCommand({ + Bucket: bucket.Name, + }); + const listRes = await gcpClient.send(listCmd); + await async.map(listRes.Contents || [], async object => { + await gcpClient.deleteObject({ Bucket: bucket.Name, Key: object.Key, - }; - gcpClient.deleteObject( - deleteParams, err => moveOn(err)); - }, err => { - assert.equal(err, null, - `Expected success, but got error ${err}`); - gcpRequestRetry({ - method: 'DELETE', - bucket: bucket.Name, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write( - `err in deleting bucket ${err}\n`); - } - return next(err); }); }); - }), - done); + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucket.Name }), + ); + }, + ); }); describe('when MPU has 0 parts', () => { diff --git a/tests/functional/raw-node/test/GCP/object/deleteTagging.js b/tests/functional/raw-node/test/GCP/object/deleteTagging.js index de3053314c..b8a3812278 100644 --- a/tests/functional/raw-node/test/GCP/object/deleteTagging.js +++ b/tests/functional/raw-node/test/GCP/object/deleteTagging.js @@ -2,48 +2,40 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genDelTagObj, genUniqID } = +const { genDelTagObj, genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); const { gcpTaggingPrefix } = require('../../../../../../constants'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; -const gcpTagPrefix = `x-goog-meta-${gcpTaggingPrefix}`; let config; let gcpClient; function assertObjectMetaTag(params, callback) { - return makeGcpRequest({ - method: 'HEAD', - bucket: params.bucket, - objectKey: params.key, - authCredentials: config.credentials, - headers: { - 'x-goog-generation': params.versionId, - }, + return gcpClient.headObject({ + Bucket: params.bucket, + Key: params.key, + VersionId: params.versionId, }, (err, res) => { if (err) { process.stdout.write(`err in retrieving object ${err}`); return callback(err); } - const resObj = res.headers; + const resMeta = Object.assign({}, res.Metadata || {}); const tagRes = {}; - Object.keys(resObj).forEach( - header => { - if (header.startsWith(gcpTagPrefix)) { - tagRes[header] = resObj[header]; - delete resObj[header]; - } - }); const metaRes = {}; - Object.keys(resObj).forEach( - header => { - if (header.startsWith('x-goog-meta-')) { - metaRes[header] = resObj[header]; - delete resObj[header]; + Object.keys(resMeta).forEach(key => { + if (key.startsWith(gcpTaggingPrefix)) { + tagRes[key] = resMeta[key]; + } else { + metaRes[key] = resMeta[key]; } }); assert.deepStrictEqual(params.tag, tagRes); @@ -55,50 +47,56 @@ function assertObjectMetaTag(params, callback) { describe('GCP: DELETE Object Tagging', function testSuite() { this.timeout(30000); - before(done => { + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}`); - } - return done(err); - }); + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.key = `somekey-${genUniqID()}`; this.currentTest.specialKey = `veryspecial-${genUniqID()}`; - const { headers, expectedTagObj, expectedMetaObj } = - genDelTagObj(10, gcpTagPrefix); - this.currentTest.expectedTagObj = expectedTagObj; - this.currentTest.expectedMetaObj = expectedMetaObj; - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - headers, - }, (err, res) => { - if (err) { - process.stdout.write(`err in creating object ${err}`); - return done(err); - } - this.currentTest.versionId = res.headers['x-goog-generation']; - return done(); + const { expectedTagObj, expectedMetaObj } = + genDelTagObj(10, `x-goog-meta-${gcpTaggingPrefix}`); + + const expectedTagMeta = {}; + Object.keys(expectedTagObj).forEach(header => { + const key = header.replace('x-goog-meta-', ''); + expectedTagMeta[key] = expectedTagObj[header]; + }); + + const expectedMetaMeta = {}; + Object.keys(expectedMetaObj).forEach(header => { + const key = header.replace('x-goog-meta-', ''); + expectedMetaMeta[key] = expectedMetaObj[header]; + }); + + this.currentTest.expectedTagObj = expectedTagMeta; + this.currentTest.expectedMetaObj = expectedMetaMeta; + + const metadata = Object.assign( + {}, + expectedTagMeta, + expectedMetaMeta + ); + + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, + Metadata: metadata, }); + + const res = await gcpClient.send(cmd); + this.currentTest.versionId = res.VersionId; }); afterEach(function afterFn(done) { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, + gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.key, }, err => { if (err) { process.stdout.write(`err in deleting object ${err}`); @@ -107,17 +105,11 @@ describe('GCP: DELETE Object Tagging', function testSuite() { }); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}`); - } - return done(err); - }); + after(async () => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); it('should successfully delete object tags', function testFn(done) { diff --git a/tests/functional/raw-node/test/GCP/object/get.js b/tests/functional/raw-node/test/GCP/object/get.js index d8c44da9d0..34c9fac18e 100644 --- a/tests/functional/raw-node/test/GCP/object/get.js +++ b/tests/functional/raw-node/test/GCP/object/get.js @@ -1,10 +1,16 @@ const assert = require('assert'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, + DeleteObjectCommand, + GetObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; @@ -14,77 +20,46 @@ describe('GCP: GET Object', function testSuite() { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - before(done => { - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + const cmd = new DeleteBucketCommand({ Bucket: bucketName }); + await gcpClient.send(cmd); }); describe('with existing object in bucket', () => { - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.key = `somekey-${genUniqID()}`; - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - }, (err, res) => { - if (err) { - process.stdout.write(`err in creating object ${err}\n`); - return done(err); - } - this.currentTest.uploadId = - res.headers['x-goog-generation']; - this.currentTest.ETag = res.headers.etag; - return done(); + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, }); + const res = await gcpClient.send(cmd); + this.currentTest.uploadId = res.VersionId; + this.currentTest.ETag = res.ETag; }); - afterEach(function afterFn(done) { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - }, err => { - if (err) { - process.stdout.write(`err in deleting object ${err}\n`); - } - return done(err); + afterEach(async function afterFn() { + const cmd = new DeleteObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, }); + await gcpClient.send(cmd); }); - it('should successfully retrieve object', function testFn(done) { - gcpClient.getObject({ + it('should successfully retrieve object', async function testFn() { + const cmd = new GetObjectCommand({ Bucket: bucketName, Key: this.test.key, - }, (err, res) => { - assert.equal(err, null, - `Expected success, got error ${err}`); - assert.strictEqual(res.ETag, this.test.ETag); - assert.strictEqual(res.VersionId, this.test.uploadId); - return done(); }); + const res = await gcpClient.send(cmd); + assert.strictEqual(res.ETag, this.test.ETag); + assert.strictEqual(res.VersionId, this.test.uploadId); }); }); diff --git a/tests/functional/raw-node/test/GCP/object/getTagging.js b/tests/functional/raw-node/test/GCP/object/getTagging.js index f389f37b1d..14446f5528 100644 --- a/tests/functional/raw-node/test/GCP/object/getTagging.js +++ b/tests/functional/raw-node/test/GCP/object/getTagging.js @@ -1,65 +1,75 @@ const assert = require('assert'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genGetTagObj, genUniqID } = +const { genGetTagObj, genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); const { gcpTaggingPrefix } = require('../../../../../../constants'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; -const gcpTagPrefix = `x-goog-meta-${gcpTaggingPrefix}`; const tagSize = 10; describe('GCP: GET Object Tagging', () => { let config; let gcpClient; + let bucketCreated = false; - before(done => { + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}`); - } - return done(err); - }); + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); + bucketCreated = true; }); - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.key = `somekey-${genUniqID()}`; this.currentTest.specialKey = `veryspecial-${genUniqID()}`; - const { tagHeader, expectedTagObj } = - genGetTagObj(tagSize, gcpTagPrefix); + const { expectedTagObj } = + genGetTagObj(tagSize, `x-goog-meta-${gcpTaggingPrefix}`); this.currentTest.tagObj = expectedTagObj; - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - headers: tagHeader, - }, (err, res) => { - if (err) { - process.stdout.write(`err in creating object ${err}`); - return done(err); - } - this.currentTest.versionId = res.headers['x-goog-generation']; - return done(); + + const putCmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, + }); + + const res = await gcpClient.send(putCmd); + this.currentTest.versionId = res.VersionId; + + await new Promise((resolve, reject) => { + gcpClient.putObjectTagging({ + Bucket: bucketName, + Key: this.currentTest.key, + VersionId: this.currentTest.versionId, + Tagging: { + TagSet: this.currentTest.tagObj, + }, + }, err => { + if (err) { + process.stdout + .write(`err in setting object tags ${err}`); + reject(err); + return; + } + resolve(); + }); }); }); afterEach(function afterFn(done) { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, + gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.key, }, err => { if (err) { process.stdout.write(`err in deleting object ${err}`); @@ -68,17 +78,14 @@ describe('GCP: GET Object Tagging', () => { }); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}`); - } - return done(err); - }); + after(async () => { + if (!bucketCreated) { + return; + } + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); it('should successfully get object tags', function testFn(done) { diff --git a/tests/functional/raw-node/test/GCP/object/head.js b/tests/functional/raw-node/test/GCP/object/head.js index 177c836dec..d0fa1748c4 100644 --- a/tests/functional/raw-node/test/GCP/object/head.js +++ b/tests/functional/raw-node/test/GCP/object/head.js @@ -1,10 +1,15 @@ const assert = require('assert'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, + HeadObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; @@ -14,90 +19,72 @@ describe('GCP: HEAD Object', function testSuite() { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - before(done => { - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + const cmd = new DeleteBucketCommand({ Bucket: bucketName }); + await gcpClient.send(cmd); }); describe('with existing object in bucket', () => { - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.key = `somekey-${genUniqID()}`; - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - }, (err, res) => { - if (err) { - process.stdout.write(`err in creating object ${err}\n`); - return done(err); - } - this.currentTest.uploadId = - res.headers['x-goog-generation']; - this.currentTest.ETag = res.headers.etag; - return done(); + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, }); + const res = await gcpClient.send(cmd); + this.currentTest.uploadId = res.VersionId; + this.currentTest.ETag = res.ETag; }); - afterEach(function afterFn(done) { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - }, err => { - if (err) { - process.stdout.write(`err in deleting object ${err}\n`); - } - return done(err); + afterEach(async function afterFn() { + if (!this.currentTest.key) { + return; + } + await new Promise((resolve, reject) => { + gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.key, + }, err => { + if (err) { + process.stdout.write(`err in deleting object ${err}\n`); + reject(err); + return; + } + resolve(); + }); }); }); - it('should successfully retrieve object', function testFn(done) { - gcpClient.headObject({ + it('should successfully retrieve object', async function testFn() { + const cmd = new HeadObjectCommand({ Bucket: bucketName, Key: this.test.key, - }, (err, res) => { - assert.equal(err, null, - `Expected success, got error ${err}`); - assert.strictEqual(res.ETag, this.test.ETag); - assert.strictEqual(res.VersionId, this.test.uploadId); - return done(); }); + const res = await gcpClient.send(cmd); + assert.strictEqual(res.ETag, this.test.ETag); + assert.ok(res.$metadata && res.$metadata.httpStatusCode === 200); }); }); describe('without existing object in bucket', () => { - it('should return 404', done => { + it('should return 404', async () => { const badObjectkey = `nonexistingkey-${genUniqID()}`; - gcpClient.headObject({ - Bucket: bucketName, - Key: badObjectkey, - }, err => { - assert(err); - assert.strictEqual(err.$metadata.httpStatusCode, 404); - return done(); + await new Promise(resolve => { + gcpClient.headObject({ + Bucket: bucketName, + Key: badObjectkey, + }, err => { + assert(err); + assert.strictEqual(err.$metadata.httpStatusCode, 404); + resolve(); + }); }); }); }); diff --git a/tests/functional/raw-node/test/GCP/object/initiateMpu.js b/tests/functional/raw-node/test/GCP/object/initiateMpu.js index 1ed76ab578..f84ca80f59 100644 --- a/tests/functional/raw-node/test/GCP/object/initiateMpu.js +++ b/tests/functional/raw-node/test/GCP/object/initiateMpu.js @@ -2,21 +2,23 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, setBucketClass, genUniqID } = +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + HeadBucketCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketNames = { main: { Name: `somebucket-${genUniqID()}`, - Type: 'MULTI_REGIONAL', }, mpu: { Name: `mpubucket-${genUniqID()}`, - Type: 'MULTI_REGIONAL', }, }; @@ -24,83 +26,122 @@ describe('GCP: Initiate MPU', function testSuite() { this.timeout(180000); let config; let gcpClient; + const maxCreateAttempts = 6; + const retryDelayMs = attempt => (attempt + 1) * 1000; + const isRetryableCreateError = err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + ); - before(done => { + function waitForBucketReady(bucketName) { + const cmd = new HeadBucketCommand({ Bucket: bucketName }); + return gcpRetry(gcpClient, cmd, { + maxAttempts: 6, + shouldRetry: err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + ), + getDelayMs: attempt => (attempt + 1) * 1000, + }); + } + + function createMultipartUploadWithRetry(bucket, key, metadata) { + return new Promise((resolve, reject) => { + const attemptCreate = attempt => { + gcpClient.createMultipartUpload({ + Bucket: bucket, + Key: key, + Metadata: metadata, + }, (err, res) => { + if (!err) { + resolve(res); + return; + } + if (isRetryableCreateError(err) && attempt < maxCreateAttempts - 1) { + const delay = retryDelayMs(attempt); + setTimeout(() => attemptCreate(attempt + 1), delay); + return; + } + reject(err); + }); + }; + attemptCreate(0); + }); + } + + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - async.eachSeries(bucketNames, - (bucket, next) => gcpRequestRetry({ - method: 'PUT', - bucket: bucket.Name, - authCredentials: config.credentials, - requestBody: setBucketClass(bucket.Type), - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return next(err); - }), - done); + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucket.Name }), + ); + await waitForBucketReady(bucket.Name); + }, + ); }); - after(done => { - async.eachSeries(bucketNames, - (bucket, next) => gcpRequestRetry({ - method: 'DELETE', - bucket: bucket.Name, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return next(err); - }), - done); + after(async () => { + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucket.Name }), + ); + }, + ); }); - it('Should create a multipart upload object', done => { + it('Should create a multipart upload object', async () => { const keyName = `somekey-${genUniqID()}`; const specialKey = `special-${genUniqID()}`; - async.waterfall([ - next => gcpClient.createMultipartUpload({ + + const createRes = await createMultipartUploadWithRetry( + bucketNames.mpu.Name, + keyName, + { special: specialKey }, + ); + + const mpuInitKey = `${keyName}-${createRes.UploadId}/init`; + const headRes = await new Promise((resolve, reject) => { + gcpClient.headObject({ Bucket: bucketNames.mpu.Name, - Key: keyName, - Metadata: { - special: specialKey, - }, + Key: mpuInitKey, }, (err, res) => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - return next(null, res.UploadId); - }), - (uploadId, next) => { - const mpuInitKey = `${keyName}-${uploadId}/init`; - makeGcpRequest({ - method: 'GET', - bucket: bucketNames.mpu.Name, - objectKey: mpuInitKey, - authCredentials: config.credentials, - }, (err, res) => { - if (err) { - process.stdout - .write(`err in retrieving object ${err}`); - return next(err); - } - assert.strictEqual(res.headers['x-goog-meta-special'], - specialKey); - return next(null, uploadId); - }); - }, - (uploadId, next) => gcpClient.abortMultipartUpload({ + if (err) { + process.stdout + .write(`err in retrieving object ${err}`); + return reject(err); + } + return resolve(res); + }); + }); + assert.strictEqual(headRes.Metadata.special, specialKey); + + await new Promise((resolve, reject) => { + gcpClient.abortMultipartUpload({ Bucket: bucketNames.main.Name, MPU: bucketNames.mpu.Name, - UploadId: uploadId, + UploadId: createRes.UploadId, Key: keyName, }, err => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - return next(); - }), - ], done); + if (err) { + return reject(err); + } + return resolve(); + }); + }); }); }); diff --git a/tests/functional/raw-node/test/GCP/object/put.js b/tests/functional/raw-node/test/GCP/object/put.js index 9c3933a0e7..c39baa7704 100644 --- a/tests/functional/raw-node/test/GCP/object/put.js +++ b/tests/functional/raw-node/test/GCP/object/put.js @@ -1,10 +1,14 @@ const assert = require('assert'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; @@ -14,38 +18,26 @@ describe('GCP: PUT Object', function testSuite() { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - before(done => { - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + const cmd = new DeleteBucketCommand({ Bucket: bucketName }); + await gcpClient.send(cmd); }); afterEach(function afterFn(done) { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, + if (!this.currentTest.key) { + done(); + return; + } + gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.key, }, err => { if (err) { process.stdout.write(`err in deleting object ${err}\n`); @@ -55,22 +47,14 @@ describe('GCP: PUT Object', function testSuite() { }); describe('with existing object in bucket', () => { - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.key = `somekey-${genUniqID()}`; - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - }, 0, (err, res) => { - if (err) { - process.stdout.write(`err in putting object ${err}\n`); - return done(err); - } - this.currentTest.uploadId = - res.headers['x-goog-generation']; - return done(); + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, }); + const res = await gcpClient.send(cmd); + this.currentTest.uploadId = res.VersionId; }); it('should overwrite object', function testFn(done) { @@ -93,18 +77,13 @@ describe('GCP: PUT Object', function testSuite() { }, (err, putRes) => { assert.equal(err, null, `Expected success, got error ${err}`); - makeGcpRequest({ - method: 'GET', - bucket: bucketName, - objectKey: this.test.key, - authCredentials: config.credentials, - }, (err, getRes) => { - if (err) { - process.stdout.write(`err in getting bucket ${err}\n`); - return done(err); - } - assert.strictEqual(getRes.headers['x-goog-generation'], - putRes.VersionId); + gcpClient.getObject({ + Bucket: bucketName, + Key: this.test.key, + }, (getErr, getRes) => { + assert.equal(getErr, null, + `Expected success, got error ${getErr}`); + assert.strictEqual(getRes.VersionId, putRes.VersionId); return done(); }); }); diff --git a/tests/functional/raw-node/test/GCP/object/putTagging.js b/tests/functional/raw-node/test/GCP/object/putTagging.js index 72ef1c1151..c17ce0cbde 100644 --- a/tests/functional/raw-node/test/GCP/object/putTagging.js +++ b/tests/functional/raw-node/test/GCP/object/putTagging.js @@ -2,60 +2,48 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genPutTagObj, genUniqID } = +const { genPutTagObj, genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); const { gcpTaggingPrefix } = require('../../../../../../constants'); +const { + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketName = `somebucket-${genUniqID()}`; -const gcpTagPrefix = `x-goog-meta-${gcpTaggingPrefix}`; describe('GCP: PUT Object Tagging', () => { let config; let gcpClient; - before(done => { + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}`); - } - return done(err); - }); + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.key = `somekey-${genUniqID()}`; this.currentTest.specialKey = `veryspecial-${genUniqID()}`; - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, - }, (err, res) => { - if (err) { - process.stdout.write(`err in creating object ${err}`); - return done(err); - } - this.currentTest.versionId = res.headers['x-goog-generation']; - return done(); + const cmd = new PutObjectCommand({ + Bucket: bucketName, + Key: this.currentTest.key, }); + const res = await gcpClient.send(cmd); + this.currentTest.versionId = res.VersionId; }); afterEach(function afterFn(done) { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: this.currentTest.key, - authCredentials: config.credentials, + gcpClient.deleteObject({ + Bucket: bucketName, + Key: this.currentTest.key, }, err => { if (err) { process.stdout.write(`err in deleting object ${err}`); @@ -64,17 +52,11 @@ describe('GCP: PUT Object Tagging', () => { }); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}`); - } - return done(err); - }); + after(async () => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); it('should successfully put object tags', function testFn(done) { @@ -96,21 +78,17 @@ describe('GCP: PUT Object Tagging', () => { `Expected success, got error ${err}`); return next(); }), - next => makeGcpRequest({ - method: 'HEAD', - bucket: bucketName, - objectKey: this.test.key, - authCredentials: config.credentials, - headers: { - 'x-goog-generation': this.test.versionId, - }, + next => gcpClient.headObject({ + Bucket: bucketName, + Key: this.test.key, + VersionId: this.test.versionId, }, (err, res) => { if (err) { process.stdout.write(`err in retrieving object ${err}`); return next(err); } - const toCompare = - res.headers[`${gcpTagPrefix}${this.test.specialKey}`]; + const metaKey = `${gcpTaggingPrefix}${this.test.specialKey}`; + const toCompare = res.Metadata[metaKey]; assert.strictEqual(toCompare, this.test.specialKey); return next(); }), diff --git a/tests/functional/raw-node/test/GCP/object/upload.js b/tests/functional/raw-node/test/GCP/object/upload.js index 88005b8862..ba577a86fa 100644 --- a/tests/functional/raw-node/test/GCP/object/upload.js +++ b/tests/functional/raw-node/test/GCP/object/upload.js @@ -2,20 +2,24 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { gcpRequestRetry, setBucketClass, genUniqID } = +const { genUniqID, gcpRetry, gcpUploadWithRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, + ListObjectsCommand, + HeadBucketCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; const bucketNames = { main: { Name: `somebucket-${genUniqID()}`, - Type: 'MULTI_REGIONAL', }, mpu: { Name: `mpubucket-${genUniqID()}`, - Type: 'MULTI_REGIONAL', }, }; @@ -29,84 +33,79 @@ describe('GCP: Upload Object', function testSuite() { let config; let gcpClient; - before(done => { + function waitForBucketReady(bucketName) { + const cmd = new HeadBucketCommand({ Bucket: bucketName }); + return gcpRetry(gcpClient, cmd, { + maxAttempts: 6, + shouldRetry: err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + ), + getDelayMs: attempt => (attempt + 1) * 1000, + }); + } + + before(async () => { config = getRealAwsConfig(credentialOne); gcpClient = new GCP(config); - async.eachSeries(bucketNames, - (bucket, next) => gcpRequestRetry({ - method: 'PUT', - bucket: bucket.Name, - authCredentials: config.credentials, - requestBody: setBucketClass(bucket.Type), - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return next(err); - }), - err => done(err)); + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucket.Name }), + ); + await waitForBucketReady(bucket.Name); + }, + ); }); - after(done => { - async.eachSeries(bucketNames, - (bucket, next) => gcpClient.listObjects({ - Bucket: bucket.Name, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got error ${err}`); - async.map(res.Contents, (object, moveOn) => { - const deleteParams = { + after(async () => { + const buckets = Object.values(bucketNames); + await async.eachSeries( + buckets, + async bucket => { + const listCmd = new ListObjectsCommand({ + Bucket: bucket.Name, + }); + const listRes = await gcpClient.send(listCmd); + await async.map(listRes.Contents || [], async object => { + await gcpClient.deleteObject({ Bucket: bucket.Name, Key: object.Key, - }; - gcpClient.deleteObject( - deleteParams, err => moveOn(err)); - }, err => { - assert.equal(err, null, - `Expected success, but got error ${err}`); - gcpRequestRetry({ - method: 'DELETE', - bucket: bucket.Name, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write( - `err in deleting bucket ${err}\n`); - } - return next(err); }); }); - }), - err => done(err)); + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucket.Name }), + ); + }, + ); }); - it('should put an object to GCP', done => { + it('should put an object to GCP', async () => { const key = `somekey-${genUniqID()}`; - gcpClient.upload({ + const res = await gcpUploadWithRetry(gcpClient, { Bucket: bucketNames.main.Name, MPU: bucketNames.mpu.Name, Key: key, Body: body, - }, (err, res) => { - assert.equal(err, null, - `Expected success, got error ${err}`); - assert.strictEqual(res.ETag, `"${smallMD5}"`); - return done(); }); + assert.strictEqual(res.ETag, `"${smallMD5}"`); }); - it('should put a large object to GCP', done => { + it('should put a large object to GCP', async () => { const key = `somekey-${genUniqID()}`; - gcpClient.upload({ + const res = await gcpUploadWithRetry(gcpClient, { Bucket: bucketNames.main.Name, MPU: bucketNames.mpu.Name, Key: key, Body: bigBody, - }, (err, res) => { - assert.equal(err, null, - `Expected success, got error ${err}`); - assert.strictEqual(res.ETag, `"${bigMD5}"`); - return done(); }); + assert.strictEqual(res.ETag, `"${bigMD5}"`); }); }); From 13e75e923da5755b582a266ad6c5b5c40b1af9e4 Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Sun, 1 Feb 2026 21:38:58 +0100 Subject: [PATCH 2/4] gcpUtils adaptation post object tests adaptation Issue: CLDSRV-826 --- tests/functional/raw-node/utils/gcpUtils.js | 134 ++++++++++++++---- .../functional/raw-node/utils/makeRequest.js | 50 ------- 2 files changed, 105 insertions(+), 79 deletions(-) diff --git a/tests/functional/raw-node/utils/gcpUtils.js b/tests/functional/raw-node/utils/gcpUtils.js index 6a8db5deb3..33a3ff0415 100644 --- a/tests/functional/raw-node/utils/gcpUtils.js +++ b/tests/functional/raw-node/utils/gcpUtils.js @@ -1,49 +1,125 @@ const async = require('async'); -const assert = require('assert'); +const { callbackify } = require('util'); const { v4: uuidv4 } = require('uuid'); -const { makeGcpRequest } = require('./makeRequest'); - const genUniqID = () => uuidv4().replace(/-/g, ''); -function gcpRequestRetry(params, retry, callback) { - const maxRetries = 4; - const timeout = Math.pow(2, retry) * 1000; - return setTimeout(makeGcpRequest, timeout, params, (err, res) => { - if (err) { - if (retry <= maxRetries && err.statusCode === 429) { - return gcpRequestRetry(params, retry + 1, callback); +const defaultShouldRetry = err => + err && (err.name === 'SlowDown' || err.$metadata?.httpStatusCode === 429); + +async function gcpRetry(gcpClient, command, retryOptions, cb) { + if (cb) { + return callbackify(() => gcpRetry(gcpClient, command, + retryOptions))(cb); + } + + const { + maxAttempts = 3, + shouldRetry = defaultShouldRetry, + getDelayMs = attempt => Math.pow(2, attempt) * 1000, + } = retryOptions || {}; + + let lastError; + + for (let attempt = 0; attempt < maxAttempts; attempt++) { + try { + + return await gcpClient.send(command); + } catch (err) { + lastError = err; + if (!shouldRetry(err, attempt) || attempt === maxAttempts - 1) { + throw err; } - return callback(err); + const delay = getDelayMs(attempt); + process.stdout.write( + 'Retryable error from GCP, retrying in ' + + `${delay}ms (attempt ${attempt + 1}): ${err}\n`); + + await new Promise(resolve => setTimeout(resolve, delay)); } - return callback(null, res); - }); + } + + throw lastError; } -function gcpClientRetry(fn, params, callback, retry = 0) { - const maxRetries = 4; - const timeout = Math.pow(2, retry) * 1000; - return setTimeout(fn, timeout, params, (err, res) => { - if (err) { - if (retry <= maxRetries && err.statusCode === 429) { - return gcpClientRetry(fn, params, callback, retry + 1); +const defaultShouldRetryUpload = err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + || (typeof err.message === 'string' + && (err.message.includes('NoSuchBucket') + || err.message.includes('unable to complete upload'))) +); + +async function gcpUploadWithRetry(gcpClient, params, retryOptions) { + const { + maxAttempts = 6, + shouldRetry = defaultShouldRetryUpload, + getDelayMs = attempt => (attempt + 1) * 1000, + } = retryOptions || {}; + + let lastError; + for (let attempt = 0; attempt < maxAttempts; attempt++) { + try { + + return await new Promise((resolve, reject) => { + gcpClient.upload(params, (err, data) => { + if (err) { + return reject(err); + } + return resolve(data); + }); + }); + } catch (err) { + lastError = err; + if (!shouldRetry(err) || attempt === maxAttempts - 1) { + throw err; } - return callback(err); + const delay = getDelayMs(attempt); + + await new Promise(resolve => setTimeout(resolve, delay)); } - return callback(null, res); - }); + } + throw lastError; } // mpu test helpers function gcpMpuSetup(params, callback) { const { gcpClient, bucketNames, key, partCount, partSize } = params; - return async.waterfall([ - next => gcpClient.createMultipartUpload({ + const maxCreateAttempts = 6; + const retryDelayMs = attempt => (attempt + 1) * 1000; + const isRetryableCreateError = err => err && ( + err.name === 'NoSuchBucket' + || err.name === 'NotFound' + || err.$metadata?.httpStatusCode === 404 + || err.name === 'SlowDown' + || err.$metadata?.httpStatusCode === 429 + ); + + function createMultipartUploadWithRetry(attempt, cb) { + gcpClient.createMultipartUpload({ Bucket: bucketNames.mpu.Name, Key: key, }, (err, res) => { - assert.equal(err, null, - `Expected success, but got error ${err}`); + if (!err) { + return cb(null, res); + } + if (isRetryableCreateError(err) && attempt < maxCreateAttempts - 1) { + const delay = retryDelayMs(attempt); + setTimeout(() => createMultipartUploadWithRetry(attempt + 1, cb), delay); + return null; + } + return cb(err); + }); + } + + return async.waterfall([ + next => createMultipartUploadWithRetry(0, (err, res) => { + if (err) { + return next(err); + } return next(null, res.UploadId); }), (uploadId, next) => { @@ -142,12 +218,12 @@ function setBucketClass(storageClass) { } module.exports = { - gcpRequestRetry, - gcpClientRetry, setBucketClass, gcpMpuSetup, genPutTagObj, genGetTagObj, genDelTagObj, genUniqID, + gcpRetry, + gcpUploadWithRetry, }; diff --git a/tests/functional/raw-node/utils/makeRequest.js b/tests/functional/raw-node/utils/makeRequest.js index 3405a172e5..6759160c2e 100644 --- a/tests/functional/raw-node/utils/makeRequest.js +++ b/tests/functional/raw-node/utils/makeRequest.js @@ -185,55 +185,6 @@ function makeS3Request(params, callback) { makeRequest(options, callback); } -/** makeGcpRequest - utility function to generate a request against GCP - * @param {object} params - params for making request - * @param {string} params.method - request method - * @param {object} [params.queryObj] - query fields and their string values - * @param {object} [params.headers] - headers and their string values - * @param {string} [params.bucket] - bucket name - * @param {string} [params.objectKey] - object key name - * @param {object} [params.authCredentials] - authentication credentials - * @param {object} params.authCredentials.accessKey - access key - * @param {object} params.authCredentials.secretKey - secret key - * @param {string} [params.region] - request body contents - * @param {function} callback - with error and response parameters - * @return {undefined} - and call callback - */ -async function makeGcpRequest(params, callback) { - const { method, queryObj, headers, bucket, objectKey, authCredentials, - requestBody, region } = params; - - let resolvedCredentials = authCredentials; - if (authCredentials && typeof authCredentials === 'function') { - try { - resolvedCredentials = await authCredentials(); - resolvedCredentials = { - accessKey: resolvedCredentials.accessKeyId, - secretKey: resolvedCredentials.secretAccessKey, - }; - } catch (err) { - return callback(err); - } - } - - const options = { - authCredentials: resolvedCredentials, - requestBody, - hostname: 'storage.googleapis.com', - port: 80, - method, - queryObj, - headers: headers || {}, - path: bucket ? `/${bucket}/` : '/', - GCP: true, - region, - }; - if (objectKey) { - options.path = `${options.path}${objectKey}`; - } - return makeRequest(options, callback); -} - /** makeBackbeatRequest - utility function to generate a request going * through backbeat route * @param {object} params - params for making request @@ -270,6 +221,5 @@ function makeBackbeatRequest(params, callback) { module.exports = { makeRequest, makeS3Request, - makeGcpRequest, makeBackbeatRequest, }; From 416a792ceccffbf2bd4438ccb4d64d126eb3bfd5 Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Sun, 1 Feb 2026 21:39:15 +0100 Subject: [PATCH 3/4] bucket tests updates post unused functions removal Issue: CLDSRV-826 --- .../raw-node/test/GCP/bucket/get.js | 182 +++++++++--------- .../raw-node/test/GCP/bucket/getVersioning.js | 124 ++++-------- .../raw-node/test/GCP/bucket/head.js | 82 ++++---- .../raw-node/test/GCP/bucket/putVersioning.js | 134 +++++-------- 4 files changed, 210 insertions(+), 312 deletions(-) diff --git a/tests/functional/raw-node/test/GCP/bucket/get.js b/tests/functional/raw-node/test/GCP/bucket/get.js index dbd52c3cfb..89c9e68e57 100644 --- a/tests/functional/raw-node/test/GCP/bucket/get.js +++ b/tests/functional/raw-node/test/GCP/bucket/get.js @@ -1,9 +1,16 @@ const assert = require('assert'); const async = require('async'); const arsenal = require('arsenal'); +const { + ListObjectsCommand, + HeadBucketCommand, + CreateBucketCommand, + DeleteBucketCommand, + PutObjectCommand, + DeleteObjectCommand, +} = require('@aws-sdk/client-s3'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); const { listingHardLimit } = require('../../../../../../constants'); @@ -18,95 +25,90 @@ const gcpClient = new GCP(config); function populateBucket(createdObjects, callback) { process.stdout.write( `Putting ${createdObjects.length} objects into bucket\n`); - async.mapLimit(createdObjects, 10, - (object, moveOn) => { - makeGcpRequest({ - method: 'PUT', - bucket: bucketName, - objectKey: object, - authCredentials: config.credentials, - }, err => { - moveOn(err); - }); - }, err => { - if (err) { - process.stdout - .write(`err putting objects ${err.code}\n`); + async.mapLimit( + createdObjects, + 10, + async object => { + const command = new PutObjectCommand({ + Bucket: bucketName, + Key: object, + }); + await gcpClient.send(command); + }, + err => { + if (err) { + process.stdout + .write(`err putting objects ${err}\n`); + } + return callback(err); } - return callback(err); - }); + ); } function removeObjects(createdObjects, callback) { process.stdout.write( `Deleting ${createdObjects.length} objects from bucket\n`); - async.mapLimit(createdObjects, 10, - (object, moveOn) => { - makeGcpRequest({ - method: 'DELETE', - bucket: bucketName, - objectKey: object, - authCredentials: config.credentials, - }, err => moveOn(err)); - }, err => { - if (err) { - process.stdout - .write(`err deleting objects ${err.code}\n`); + async.mapLimit( + createdObjects, + 10, + async object => { + const command = new DeleteObjectCommand({ + Bucket: bucketName, + Key: object, + }); + await gcpClient.send(command); + }, + err => { + if (err) { + process.stdout + .write(`err deleting objects ${err}\n`); + } + return callback(err); } - return callback(err); - }); + ); } describe('GCP: GET Bucket', function testSuite() { this.timeout(180000); - before(done => { - gcpRequestRetry({ - method: 'PUT', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - after(done => { - gcpRequestRetry({ - method: 'DELETE', - bucket: bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); describe('without existing bucket', () => { - it('should return 404 and NoSuchBucket', done => { + it('should return 404 and NoSuchBucket', async () => { const badBucketName = `nonexistingbucket-${genUniqID()}`; - gcpClient.getBucket({ - Bucket: badBucketName, - }, err => { + try { + const command = new HeadBucketCommand({ + Bucket: badBucketName, + }); + await gcpClient.send(command); + assert.fail('Expected NoSuchBucket error, but got success'); + } catch (err) { assert(err); - assert.strictEqual(err.$metadata?.httpStatusCode, 404); - assert.strictEqual(err.name, 'NoSuchBucket'); - return done(); - }); + const statusCode = err.$metadata && err.$metadata.httpStatusCode; + assert.strictEqual(statusCode, 404); + const errorName = err.name === 'NotFound' ? 'NoSuchBucket' : err.name; + assert.strictEqual(errorName, 'NoSuchBucket'); + } }); - it('should return 200', done => { - gcpClient.listObjects({ + it('should return 200', async () => { + const command = new ListObjectsCommand({ Bucket: bucketName, - }, (err, res) => { - assert.equal(err, null, `Expected success, but got ${err}`); - assert.strictEqual(res.$metadata?.httpStatusCode, 200); - return done(); }); + const res = await gcpClient.send(command); + assert.strictEqual(res.$metadata?.httpStatusCode, 200); }); }); @@ -119,27 +121,22 @@ describe('GCP: GET Bucket', function testSuite() { after(done => removeObjects(createdObjects, done)); - it(`should list all ${smallSize} created objects`, done => { - gcpClient.listObjects({ + it(`should list all ${smallSize} created objects`, async () => { + const command = new ListObjectsCommand({ Bucket: bucketName, - }, (err, res) => { - assert.equal(err, null, `Expected success, but got ${err}`); - assert.strictEqual(res.Contents.length, smallSize); - return done(); }); + const res = await gcpClient.send(command); + assert.strictEqual(res.Contents.length, smallSize); }); describe('with MaxKeys at 10', () => { - it('should list MaxKeys number of objects', done => { - gcpClient.listObjects({ + it('should list MaxKeys number of objects', async () => { + const command = new ListObjectsCommand({ Bucket: bucketName, MaxKeys: 10, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got ${err}`); - assert.strictEqual(res.Contents.length, 10); - return done(); }); + const res = await gcpClient.send(command); + assert.strictEqual(res.Contents.length, 10); }); }); }); @@ -152,15 +149,12 @@ describe('GCP: GET Bucket', function testSuite() { after(done => removeObjects(createdObjects, done)); - it('should list at max 1000 of objects created', done => { - gcpClient.listObjects({ + it('should list at max 1000 of objects created', async () => { + const command = new ListObjectsCommand({ Bucket: bucketName, - }, (err, res) => { - assert.equal(err, null, `Expected success, but got ${err}`); - assert.strictEqual(res.Contents.length, - listingHardLimit); - return done(); }); + const res = await gcpClient.send(command); + assert.strictEqual(res.Contents.length, listingHardLimit); }); describe('with MaxKeys at 1001', () => { @@ -175,17 +169,13 @@ describe('GCP: GET Bucket', function testSuite() { // // Actual behavior: it returns a list longer than 1000 objects when // max-keys is greater than 1000 - it.skip('should list at max 1000, ignoring MaxKeys', done => { - gcpClient.listObjects({ + it.skip('should list at max 1000, ignoring MaxKeys', async () => { + const command = new ListObjectsCommand({ Bucket: bucketName, MaxKeys: 1001, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got ${err}`); - assert.strictEqual(res.Contents.length, - listingHardLimit); - return done(); }); + const res = await gcpClient.send(command); + assert.strictEqual(res.Contents.length, listingHardLimit); }); }); }); diff --git a/tests/functional/raw-node/test/GCP/bucket/getVersioning.js b/tests/functional/raw-node/test/GCP/bucket/getVersioning.js index 3a3bc7c9e2..bcce1416a0 100644 --- a/tests/functional/raw-node/test/GCP/bucket/getVersioning.js +++ b/tests/functional/raw-node/test/GCP/bucket/getVersioning.js @@ -1,106 +1,64 @@ const assert = require('assert'); -const async = require('async'); const arsenal = require('arsenal'); +const { + PutBucketVersioningCommand, + GetBucketVersioningCommand, + CreateBucketCommand, + DeleteBucketCommand, +} = require('@aws-sdk/client-s3'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); const credentialOne = 'gcpbackend'; const verEnabledObj = 'Enabled'; const verDisabledObj = 'Suspended'; -const xmlEnable = - '' + - '' + - 'Enabled' + - ''; -const xmlDisable = - '' + - '' + - 'Suspended' + - ''; describe('GCP: GET Bucket Versioning', () => { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.bucketName = `somebucket-${genUniqID()}`; - gcpRequestRetry({ - method: 'PUT', - bucket: this.currentTest.bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err.code}\n`); - } - return done(err); - }); + await gcpRetry( + gcpClient, + new CreateBucketCommand({ + Bucket: this.currentTest.bucketName, + }), + ); }); - afterEach(function afterFn(done) { - gcpRequestRetry({ - method: 'DELETE', - bucket: this.currentTest.bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err.code}\n`); - } - return done(err); - }); + afterEach(async function afterFn() { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ + Bucket: this.currentTest.bucketName, + }), + ); }); - it('should verify bucket versioning is enabled', function testFn(done) { - return async.waterfall([ - next => makeGcpRequest({ - method: 'PUT', - bucket: this.test.bucketName, - authCredentials: config.credentials, - queryObj: { versioning: '' }, - requestBody: xmlEnable, - }, err => { - if (err) { - process.stdout.write(`err in setting versioning ${err.code}`); - } - return next(err); - }), - next => { - gcpClient.getBucketVersioning({ - Bucket: this.test.bucketName, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - assert.deepStrictEqual(res.Status, verEnabledObj); - return next(); - }); - }, - ], err => done(err)); + it('should verify bucket versioning is enabled', async function testFn() { + await gcpClient.send(new PutBucketVersioningCommand({ + Bucket: this.test.bucketName, + VersioningConfiguration: { Status: 'Enabled' }, + })); + + const res = await gcpClient.send(new GetBucketVersioningCommand({ + Bucket: this.test.bucketName, + })); + assert.deepStrictEqual(res.Status, verEnabledObj); }); - it('should verify bucket versioning is disabled', function testFn(done) { - return async.waterfall([ - next => makeGcpRequest({ - method: 'PUT', - bucket: this.test.bucketName, - authCredentials: config.credentials, - queryObj: { versioning: '' }, - requestBody: xmlDisable, - }, err => { - if (err) { - process.stdout.write(`err in setting versioning ${err}`); - } - return next(err); - }), - next => gcpClient.getBucketVersioning({ - Bucket: this.test.bucketName, - }, (err, res) => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - assert.deepStrictEqual(res.Status, verDisabledObj); - return next(); - }), - ], err => done(err)); + it('should verify bucket versioning is disabled', async function testFn() { + await gcpClient.send(new PutBucketVersioningCommand({ + Bucket: this.test.bucketName, + VersioningConfiguration: { Status: 'Suspended' }, + })); + + const res = await gcpClient.send(new GetBucketVersioningCommand({ + Bucket: this.test.bucketName, + })); + assert.deepStrictEqual(res.Status, verDisabledObj); }); }); diff --git a/tests/functional/raw-node/test/GCP/bucket/head.js b/tests/functional/raw-node/test/GCP/bucket/head.js index f9346c3f96..1a62a1bc8f 100644 --- a/tests/functional/raw-node/test/GCP/bucket/head.js +++ b/tests/functional/raw-node/test/GCP/bucket/head.js @@ -1,9 +1,13 @@ const assert = require('assert'); const arsenal = require('arsenal'); const { GCP } = arsenal.storage.data.external.GCP; -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); +const { + CreateBucketCommand, + DeleteBucketCommand, +} = require('@aws-sdk/client-s3'); const credentialOne = 'gcpbackend'; @@ -12,66 +16,58 @@ describe('GCP: HEAD Bucket', () => { const gcpClient = new GCP(config); describe('without existing bucket', () => { - beforeEach(function beforeFn(done) { + beforeEach(function beforeFn() { this.currentTest.bucketName = `somebucket-${genUniqID()}`; - return done(); }); - it('should return 404', function testFn(done) { - gcpClient.headBucket({ - Bucket: this.test.bucketName, - }, err => { + it('should return 404', async function testFn() { + const badBucketName = this.test.bucketName; + try { + await new Promise((resolve, reject) => { + gcpClient.headBucket({ Bucket: badBucketName }, + (err, res) => (err ? reject(err) : resolve(res))); + }); + assert.fail('Expected 404 error, but got success'); + } catch (err) { assert(err); assert.strictEqual(err.$metadata?.httpStatusCode, 404); - return done(); - }); + } }); }); describe('with existing bucket', () => { - beforeEach(function beforeFn(done) { + beforeEach(async function beforeFn() { this.currentTest.bucketName = `somebucket-${genUniqID()}`; process.stdout .write(`Creating test bucket ${this.currentTest.bucketName}\n`); - gcpRequestRetry({ - method: 'PUT', - bucket: this.currentTest.bucketName, - authCredentials: config.credentials, - }, 0, (err, res) => { - if (err) { - return done(err); - } - this.currentTest.bucketObj = { - MetaVersionId: res.headers['x-goog-metageneration'], - }; - return done(); - }); + await gcpRetry( + gcpClient, + new CreateBucketCommand({ + Bucket: this.currentTest.bucketName, + }), + ); }); - afterEach(function afterFn(done) { - gcpRequestRetry({ - method: 'DELETE', - bucket: this.currentTest.bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout - .write(`err deleting bucket: ${err.code}\n`); - } - return done(err); + afterEach(async function afterFn() { + const cmd = new DeleteBucketCommand({ + Bucket: this.currentTest.bucketName, }); + await gcpClient.send(cmd); }); - it('should get bucket information', function testFn(done) { - gcpClient.headBucket({ - Bucket: this.test.bucketName, - }, (err, res) => { - assert.equal(err, null, `Expected success, but got ${err}`); - const { $metadata, ...data } = res; - assert.strictEqual($metadata.httpStatusCode, 200); - assert.deepStrictEqual(this.test.bucketObj, data); - return done(); + it('should get bucket information', async function testFn() { + const res = await new Promise((resolve, reject) => { + gcpClient.headBucket({ + Bucket: this.test.bucketName, + }, (err, data) => (err ? reject(err) : resolve(data))); }); + const { $metadata, ...data } = res; + assert.strictEqual($metadata?.httpStatusCode, 200); + // Ensure MetaVersionId is present and non-empty + assert.ok( + typeof data.MetaVersionId === 'string' + && data.MetaVersionId.length > 0 + ); }); }); }); diff --git a/tests/functional/raw-node/test/GCP/bucket/putVersioning.js b/tests/functional/raw-node/test/GCP/bucket/putVersioning.js index c8151e21c4..43549a0af2 100644 --- a/tests/functional/raw-node/test/GCP/bucket/putVersioning.js +++ b/tests/functional/raw-node/test/GCP/bucket/putVersioning.js @@ -1,110 +1,64 @@ const assert = require('assert'); -const async = require('async'); const arsenal = require('arsenal'); -const xml2js = require('xml2js'); +const { + PutBucketVersioningCommand, + GetBucketVersioningCommand, + CreateBucketCommand, + DeleteBucketCommand, +} = require('@aws-sdk/client-s3'); const { GCP } = arsenal.storage.data.external.GCP; -const { makeGcpRequest } = require('../../../utils/makeRequest'); -const { gcpRequestRetry, genUniqID } = require('../../../utils/gcpUtils'); +const { genUniqID, gcpRetry } = require('../../../utils/gcpUtils'); const { getRealAwsConfig } = require('../../../../aws-node-sdk/test/support/awsConfig'); const credentialOne = 'gcpbackend'; -const verEnabledObj = { VersioningConfiguration: { Status: ['Enabled'] } }; -const verDisabledObj = { VersioningConfiguration: { Status: ['Suspended'] } }; - -function resParseAndAssert(xml, compareObj, callback) { - return xml2js.parseString(xml, (err, res) => { - if (err) { - process.stdout.write(`err in parsing response ${err}\n`); - return callback(err); - } - assert.deepStrictEqual(res, compareObj); - return callback(); - }); -} +const verEnabledStatus = 'Enabled'; +const verDisabledStatus = 'Suspended'; +const bucketName = `somebucket-${genUniqID()}`; describe('GCP: PUT Bucket Versioning', () => { const config = getRealAwsConfig(credentialOne); const gcpClient = new GCP(config); - beforeEach(function beforeFn(done) { - this.currentTest.bucketName = `somebucket-${genUniqID()}`; - gcpRequestRetry({ - method: 'PUT', - bucket: this.currentTest.bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in creating bucket ${err}\n`); - } - return done(err); - }); + before(async () => { + await gcpRetry( + gcpClient, + new CreateBucketCommand({ Bucket: bucketName }), + ); }); - afterEach(function afterFn(done) { - gcpRequestRetry({ - method: 'DELETE', - bucket: this.currentTest.bucketName, - authCredentials: config.credentials, - }, 0, err => { - if (err) { - process.stdout.write(`err in deleting bucket ${err}\n`); - } - return done(err); - }); + after(async () => { + await gcpRetry( + gcpClient, + new DeleteBucketCommand({ Bucket: bucketName }), + ); }); - it('should enable bucket versioning', function testFn(done) { - return async.waterfall([ - next => gcpClient.putBucketVersioning({ - Bucket: this.test.bucketName, - VersioningConfiguration: { - Status: 'Enabled', - }, - }, err => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - return next(); - }), - next => makeGcpRequest({ - method: 'GET', - bucket: this.test.bucketName, - authCredentials: config.credentials, - queryObj: { versioning: '' }, - }, (err, res) => { - if (err) { - process.stdout.write(`err in retrieving bucket ${err}`); - return next(err); - } - return resParseAndAssert(res.body, verEnabledObj, next); - }), - ], err => done(err)); + it('should enable bucket versioning', async () => { + await gcpClient.send(new PutBucketVersioningCommand({ + Bucket: bucketName, + VersioningConfiguration: { + Status: 'Enabled', + }, + })); + + const res = await gcpClient.send(new GetBucketVersioningCommand({ + Bucket: bucketName, + })); + assert.strictEqual(res.Status, verEnabledStatus); }); - it('should disable bucket versioning', function testFn(done) { - return async.waterfall([ - next => gcpClient.putBucketVersioning({ - Bucket: this.test.bucketName, - VersioningConfiguration: { - Status: 'Suspended', - }, - }, err => { - assert.equal(err, null, - `Expected success, but got err ${err}`); - return next(); - }), - next => makeGcpRequest({ - method: 'GET', - bucket: this.test.bucketName, - authCredentials: config.credentials, - queryObj: { versioning: '' }, - }, (err, res) => { - if (err) { - process.stdout.write(`err in retrieving bucket ${err}`); - return next(err); - } - return resParseAndAssert(res.body, verDisabledObj, next); - }), - ], err => done(err)); + it('should disable bucket versioning', async () => { + await gcpClient.send(new PutBucketVersioningCommand({ + Bucket: bucketName, + VersioningConfiguration: { + Status: 'Suspended', + }, + })); + + const res = await gcpClient.send(new GetBucketVersioningCommand({ + Bucket: bucketName, + })); + assert.strictEqual(res.Status, verDisabledStatus); }); }); From 4a1e77c653e616af2f0356b0f8a2d2d7bc2930ad Mon Sep 17 00:00:00 2001 From: Maha Benzekri Date: Sun, 1 Feb 2026 21:39:31 +0100 Subject: [PATCH 4/4] bump arsenal to 8.3.0 Issue: CLDSRV-826 --- package.json | 2 +- yarn.lock | 1520 ++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 1115 insertions(+), 407 deletions(-) diff --git a/package.json b/package.json index eecec97612..30ea128e9d 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@azure/storage-blob": "^12.28.0", "@hapi/joi": "^17.1.1", "@smithy/node-http-handler": "^3.0.0", - "arsenal": "git+https://github.com/scality/Arsenal#8.3.0-preview.1", + "arsenal": "git+https://github.com/scality/Arsenal#8.3.0", "async": "2.6.4", "bucketclient": "scality/bucketclient#8.2.7", "bufferutil": "^4.0.8", diff --git a/yarn.lock b/yarn.lock index a96d49881a..16fb29ac6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -151,48 +151,93 @@ "@smithy/util-utf8" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/client-cognito-identity@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.919.0.tgz#3564dcea70d2ae116d0143c497565bd3de1f26c5" - integrity sha512-lUmPZZ0orVbIDjSKEPkNdip9qxRAoqVAmWu+DD+3BuGpkI1pmFXL0JEcf95C51b1YfZeIY97t5g+KgZeDg65hg== +"@aws-sdk/client-cognito-identity@3.975.0": + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.975.0.tgz#f6494616cb1f298f8ed195db8d55c6aa62cad0e9" + integrity sha512-HjPnxHB74FaeLSce+/B2n3H7FJ23lC5D4M2FnHhHdiuvGa8etFrsF12mxC8i635huARHJkqLLbLF2U39xX6AJA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/credential-provider-node" "3.919.0" - "@aws-sdk/middleware-host-header" "3.914.0" - "@aws-sdk/middleware-logger" "3.914.0" - "@aws-sdk/middleware-recursion-detection" "3.919.0" - "@aws-sdk/middleware-user-agent" "3.916.0" - "@aws-sdk/region-config-resolver" "3.914.0" - "@aws-sdk/types" "3.914.0" - "@aws-sdk/util-endpoints" "3.916.0" - "@aws-sdk/util-user-agent-browser" "3.914.0" - "@aws-sdk/util-user-agent-node" "3.916.0" - "@smithy/config-resolver" "^4.4.0" - "@smithy/core" "^3.17.1" - "@smithy/fetch-http-handler" "^5.3.4" - "@smithy/hash-node" "^4.2.3" - "@smithy/invalid-dependency" "^4.2.3" - "@smithy/middleware-content-length" "^4.2.3" - "@smithy/middleware-endpoint" "^4.3.5" - "@smithy/middleware-retry" "^4.4.5" - "@smithy/middleware-serde" "^4.2.3" - "@smithy/middleware-stack" "^4.2.3" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/node-http-handler" "^4.4.3" - "@smithy/protocol-http" "^5.3.3" - "@smithy/smithy-client" "^4.9.1" - "@smithy/types" "^4.8.0" - "@smithy/url-parser" "^4.2.3" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/credential-provider-node" "^3.972.1" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.2" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.21.1" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.11" + "@smithy/middleware-retry" "^4.4.27" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.10.12" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" "@smithy/util-base64" "^4.3.0" "@smithy/util-body-length-browser" "^4.2.0" "@smithy/util-body-length-node" "^4.2.1" - "@smithy/util-defaults-mode-browser" "^4.3.4" - "@smithy/util-defaults-mode-node" "^4.2.6" - "@smithy/util-endpoints" "^3.2.3" - "@smithy/util-middleware" "^4.2.3" - "@smithy/util-retry" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.26" + "@smithy/util-defaults-mode-node" "^4.2.29" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-cognito-identity@3.978.0": + version "3.978.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.978.0.tgz#0a00a8fa66311f6fbcc8b12516e6c53572e3372a" + integrity sha512-vMmeOu1/Rbd29CSQp2bE3my+smbq7PciZshVaPMTfEDFlAr8myYiqcqk1l8fyRpzswjw6TWmVZmld27pfp8enw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/credential-provider-node" "^3.972.2" + "@aws-sdk/middleware-host-header" "^3.972.2" + "@aws-sdk/middleware-logger" "^3.972.2" + "@aws-sdk/middleware-recursion-detection" "^3.972.2" + "@aws-sdk/middleware-user-agent" "^3.972.4" + "@aws-sdk/region-config-resolver" "^3.972.2" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.2" + "@aws-sdk/util-user-agent-node" "^3.972.2" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" @@ -242,68 +287,68 @@ "@smithy/util-waiter" "^4.2.5" tslib "^2.6.2" -"@aws-sdk/client-kms@^3.901.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.919.0.tgz#d814fde40359451cce422e1edbce045518651e4f" - integrity sha512-v+RpwfczmI23274Nnx8hM2jbUZE+Sk1T/y3EV3jPdRCAhRtJd7ne9ZzCzPW5HkBQZFWkzP6zGPrsnMTzUE/q/Q== +"@aws-sdk/client-kms@^3.975.0": + version "3.978.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.978.0.tgz#36f6df642e583e52b4bcf2f9ab49a1a95d81bc87" + integrity sha512-KTCHctiTS4RJ/MeJrI/hbm5F0AhsBayjnzzfYlGAasNIGW3ucwCc2qTZ2QzKHaR3zPyysSQiTDzNUg/RmdfExA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/credential-provider-node" "3.919.0" - "@aws-sdk/middleware-host-header" "3.914.0" - "@aws-sdk/middleware-logger" "3.914.0" - "@aws-sdk/middleware-recursion-detection" "3.919.0" - "@aws-sdk/middleware-user-agent" "3.916.0" - "@aws-sdk/region-config-resolver" "3.914.0" - "@aws-sdk/types" "3.914.0" - "@aws-sdk/util-endpoints" "3.916.0" - "@aws-sdk/util-user-agent-browser" "3.914.0" - "@aws-sdk/util-user-agent-node" "3.916.0" - "@smithy/config-resolver" "^4.4.0" - "@smithy/core" "^3.17.1" - "@smithy/fetch-http-handler" "^5.3.4" - "@smithy/hash-node" "^4.2.3" - "@smithy/invalid-dependency" "^4.2.3" - "@smithy/middleware-content-length" "^4.2.3" - "@smithy/middleware-endpoint" "^4.3.5" - "@smithy/middleware-retry" "^4.4.5" - "@smithy/middleware-serde" "^4.2.3" - "@smithy/middleware-stack" "^4.2.3" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/node-http-handler" "^4.4.3" - "@smithy/protocol-http" "^5.3.3" - "@smithy/smithy-client" "^4.9.1" - "@smithy/types" "^4.8.0" - "@smithy/url-parser" "^4.2.3" + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/credential-provider-node" "^3.972.2" + "@aws-sdk/middleware-host-header" "^3.972.2" + "@aws-sdk/middleware-logger" "^3.972.2" + "@aws-sdk/middleware-recursion-detection" "^3.972.2" + "@aws-sdk/middleware-user-agent" "^3.972.4" + "@aws-sdk/region-config-resolver" "^3.972.2" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.2" + "@aws-sdk/util-user-agent-node" "^3.972.2" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" "@smithy/util-base64" "^4.3.0" "@smithy/util-body-length-browser" "^4.2.0" "@smithy/util-body-length-node" "^4.2.1" - "@smithy/util-defaults-mode-browser" "^4.3.4" - "@smithy/util-defaults-mode-node" "^4.2.6" - "@smithy/util-endpoints" "^3.2.3" - "@smithy/util-middleware" "^4.2.3" - "@smithy/util-retry" "^4.2.3" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/client-s3@^3.901.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.919.0.tgz#bc099c27b8bdebeb2ed61222bbada2dfd8b6f9df" - integrity sha512-UEPH2B9RnsS7Jo/oXe5DGrqQhWvRj6YBkLr7bsAZoYl4Sj1RbwDimiyGbhbuarnX5wCjpwSW860CFmShh/1z5w== +"@aws-sdk/client-s3@^3.908.0": + version "3.917.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.917.0.tgz#835ead98d5a6ddad5662d0f133d377febf43de1e" + integrity sha512-3L73mDCpH7G0koFv3p3WkkEKqC5wn2EznKtNMrJ6hczPIr2Cu6DJz8VHeTZp9wFZLPrIBmh3ZW1KiLujT5Fd2w== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" "@aws-sdk/core" "3.916.0" - "@aws-sdk/credential-provider-node" "3.919.0" + "@aws-sdk/credential-provider-node" "3.917.0" "@aws-sdk/middleware-bucket-endpoint" "3.914.0" "@aws-sdk/middleware-expect-continue" "3.917.0" - "@aws-sdk/middleware-flexible-checksums" "3.919.0" + "@aws-sdk/middleware-flexible-checksums" "3.916.0" "@aws-sdk/middleware-host-header" "3.914.0" "@aws-sdk/middleware-location-constraint" "3.914.0" "@aws-sdk/middleware-logger" "3.914.0" - "@aws-sdk/middleware-recursion-detection" "3.919.0" + "@aws-sdk/middleware-recursion-detection" "3.914.0" "@aws-sdk/middleware-sdk-s3" "3.916.0" "@aws-sdk/middleware-ssec" "3.914.0" "@aws-sdk/middleware-user-agent" "3.916.0" @@ -350,67 +395,65 @@ "@smithy/uuid" "^1.1.0" tslib "^2.6.2" -"@aws-sdk/client-s3@^3.908.0": - version "3.917.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.917.0.tgz#835ead98d5a6ddad5662d0f133d377febf43de1e" - integrity sha512-3L73mDCpH7G0koFv3p3WkkEKqC5wn2EznKtNMrJ6hczPIr2Cu6DJz8VHeTZp9wFZLPrIBmh3ZW1KiLujT5Fd2w== +"@aws-sdk/client-s3@^3.975.0": + version "3.978.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.978.0.tgz#2e54076abae7dab2b0001cec4fd6a0eb046176ec" + integrity sha512-2chs05VbfgRNb5ZEYIwooeHCaL+DjwvrW3ElkslI71ltEqVNdeWvB7hbkLWPPKazV3kjY3H90pLDY8mMqsET+A== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/credential-provider-node" "3.917.0" - "@aws-sdk/middleware-bucket-endpoint" "3.914.0" - "@aws-sdk/middleware-expect-continue" "3.917.0" - "@aws-sdk/middleware-flexible-checksums" "3.916.0" - "@aws-sdk/middleware-host-header" "3.914.0" - "@aws-sdk/middleware-location-constraint" "3.914.0" - "@aws-sdk/middleware-logger" "3.914.0" - "@aws-sdk/middleware-recursion-detection" "3.914.0" - "@aws-sdk/middleware-sdk-s3" "3.916.0" - "@aws-sdk/middleware-ssec" "3.914.0" - "@aws-sdk/middleware-user-agent" "3.916.0" - "@aws-sdk/region-config-resolver" "3.914.0" - "@aws-sdk/signature-v4-multi-region" "3.916.0" - "@aws-sdk/types" "3.914.0" - "@aws-sdk/util-endpoints" "3.916.0" - "@aws-sdk/util-user-agent-browser" "3.914.0" - "@aws-sdk/util-user-agent-node" "3.916.0" - "@aws-sdk/xml-builder" "3.914.0" - "@smithy/config-resolver" "^4.4.0" - "@smithy/core" "^3.17.1" - "@smithy/eventstream-serde-browser" "^4.2.3" - "@smithy/eventstream-serde-config-resolver" "^4.3.3" - "@smithy/eventstream-serde-node" "^4.2.3" - "@smithy/fetch-http-handler" "^5.3.4" - "@smithy/hash-blob-browser" "^4.2.4" - "@smithy/hash-node" "^4.2.3" - "@smithy/hash-stream-node" "^4.2.3" - "@smithy/invalid-dependency" "^4.2.3" - "@smithy/md5-js" "^4.2.3" - "@smithy/middleware-content-length" "^4.2.3" - "@smithy/middleware-endpoint" "^4.3.5" - "@smithy/middleware-retry" "^4.4.5" - "@smithy/middleware-serde" "^4.2.3" - "@smithy/middleware-stack" "^4.2.3" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/node-http-handler" "^4.4.3" - "@smithy/protocol-http" "^5.3.3" - "@smithy/smithy-client" "^4.9.1" - "@smithy/types" "^4.8.0" - "@smithy/url-parser" "^4.2.3" + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/credential-provider-node" "^3.972.2" + "@aws-sdk/middleware-bucket-endpoint" "^3.972.2" + "@aws-sdk/middleware-expect-continue" "^3.972.2" + "@aws-sdk/middleware-flexible-checksums" "^3.972.2" + "@aws-sdk/middleware-host-header" "^3.972.2" + "@aws-sdk/middleware-location-constraint" "^3.972.2" + "@aws-sdk/middleware-logger" "^3.972.2" + "@aws-sdk/middleware-recursion-detection" "^3.972.2" + "@aws-sdk/middleware-sdk-s3" "^3.972.4" + "@aws-sdk/middleware-ssec" "^3.972.2" + "@aws-sdk/middleware-user-agent" "^3.972.4" + "@aws-sdk/region-config-resolver" "^3.972.2" + "@aws-sdk/signature-v4-multi-region" "3.972.0" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.2" + "@aws-sdk/util-user-agent-node" "^3.972.2" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/eventstream-serde-browser" "^4.2.8" + "@smithy/eventstream-serde-config-resolver" "^4.3.8" + "@smithy/eventstream-serde-node" "^4.2.8" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-blob-browser" "^4.2.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/hash-stream-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/md5-js" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" "@smithy/util-base64" "^4.3.0" "@smithy/util-body-length-browser" "^4.2.0" "@smithy/util-body-length-node" "^4.2.1" - "@smithy/util-defaults-mode-browser" "^4.3.4" - "@smithy/util-defaults-mode-node" "^4.2.6" - "@smithy/util-endpoints" "^3.2.3" - "@smithy/util-middleware" "^4.2.3" - "@smithy/util-retry" "^4.2.3" - "@smithy/util-stream" "^4.5.4" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-stream" "^4.5.10" "@smithy/util-utf8" "^4.2.0" - "@smithy/util-waiter" "^4.2.3" - "@smithy/uuid" "^1.1.0" + "@smithy/util-waiter" "^4.2.8" tslib "^2.6.2" "@aws-sdk/client-sso@3.895.0": @@ -501,50 +544,6 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.919.0.tgz#1506a30ea7deab6be468e2025533870d3147109e" - integrity sha512-9DVw/1DCzZ9G7Jofnhpg/XDC3wdJ3NAJdNWY1TrgE5ZcpTM+UTIQMGyaljCv9rgxggutHBgmBI5lP3YMcPk9ZQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/middleware-host-header" "3.914.0" - "@aws-sdk/middleware-logger" "3.914.0" - "@aws-sdk/middleware-recursion-detection" "3.919.0" - "@aws-sdk/middleware-user-agent" "3.916.0" - "@aws-sdk/region-config-resolver" "3.914.0" - "@aws-sdk/types" "3.914.0" - "@aws-sdk/util-endpoints" "3.916.0" - "@aws-sdk/util-user-agent-browser" "3.914.0" - "@aws-sdk/util-user-agent-node" "3.916.0" - "@smithy/config-resolver" "^4.4.0" - "@smithy/core" "^3.17.1" - "@smithy/fetch-http-handler" "^5.3.4" - "@smithy/hash-node" "^4.2.3" - "@smithy/invalid-dependency" "^4.2.3" - "@smithy/middleware-content-length" "^4.2.3" - "@smithy/middleware-endpoint" "^4.3.5" - "@smithy/middleware-retry" "^4.4.5" - "@smithy/middleware-serde" "^4.2.3" - "@smithy/middleware-stack" "^4.2.3" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/node-http-handler" "^4.4.3" - "@smithy/protocol-http" "^5.3.3" - "@smithy/smithy-client" "^4.9.1" - "@smithy/types" "^4.8.0" - "@smithy/url-parser" "^4.2.3" - "@smithy/util-base64" "^4.3.0" - "@smithy/util-body-length-browser" "^4.2.0" - "@smithy/util-body-length-node" "^4.2.1" - "@smithy/util-defaults-mode-browser" "^4.3.4" - "@smithy/util-defaults-mode-node" "^4.2.6" - "@smithy/util-endpoints" "^3.2.3" - "@smithy/util-middleware" "^4.2.3" - "@smithy/util-retry" "^4.2.3" - "@smithy/util-utf8" "^4.2.0" - tslib "^2.6.2" - "@aws-sdk/client-sso@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.930.0.tgz#bc46973b8b622ab5afc4dd2032d64445391154b8" @@ -589,6 +588,50 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/client-sso@3.975.0": + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.975.0.tgz#f22aca83b566fb5ced2c974020c42be60b350782" + integrity sha512-HpgJuleH7P6uILxzJKQOmlHdwaCY+xYC6VgRDzlwVEqU/HXjo4m2gOAyjUbpXlBOCWfGgMUzfBlNJ9z3MboqEQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.2" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.21.1" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.11" + "@smithy/middleware-retry" "^4.4.27" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.10.12" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.26" + "@smithy/util-defaults-mode-node" "^4.2.29" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/client-sts@^3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.930.0.tgz#cf54ea3bfde5dd221ad0d902d8c26067ac58d310" @@ -692,6 +735,52 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/core@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.972.0.tgz#20d9c47fc3ad1bed4c1866eb6f6488bcc5d31754" + integrity sha512-nEeUW2M9F+xdIaD98F5MBcQ4ITtykj3yKbgFZ6J0JtL3bq+Z90szQ6Yy8H/BLPYXTs3V4n9ifnBo8cprRDiE6A== + dependencies: + "@aws-sdk/types" "3.972.0" + "@aws-sdk/xml-builder" "3.972.0" + "@smithy/core" "^3.20.6" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/smithy-client" "^4.10.8" + "@smithy/types" "^4.12.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/core@^3.973.1", "@aws-sdk/core@^3.973.2", "@aws-sdk/core@^3.973.4": + version "3.973.4" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.973.4.tgz#a3c16c4cb40a7a816475839dbdd8f938cc8bb2f0" + integrity sha512-8Rk+kPP74YiR47x54bxYlKZswsaSh0a4XvvRUMLvyS/koNawhsGu/+qSZxREqUeTO+GkKpFvSQIsAZR+deUP+g== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/xml-builder" "^3.972.2" + "@smithy/core" "^3.22.0" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/crc64-nvme@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.0.tgz#c5e6d14428c9fb4e6bb0646b73a0fa68e6007e24" + integrity sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-cognito-identity@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.895.0.tgz#2266eea0e82576604e88ce5db281a98eaaabd69f" @@ -703,15 +792,15 @@ "@smithy/types" "^4.5.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-cognito-identity@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.919.0.tgz#24521fe94fff306fdef61d3c1ea86a72311bdd52" - integrity sha512-ite9bRCBPsD1vJPUvOU7LaWbq1Y8aL5RrHoxY9T3SMHSVnPX2/uZvF/Tzi/P0gkQYzjDGpvtrJRHONROgcWwpw== +"@aws-sdk/credential-provider-cognito-identity@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.2.tgz#5dbdac14772bbaa28e319c7518d6cd32a42f1f52" + integrity sha512-+tX6yfkw3+CpXLl/IoFqGSatbtZMzBcXr9HXPjbaYqCIu80SzfwjgQl8ddFeloTrA1xVPX2+eWOU04nVuACW7w== dependencies: - "@aws-sdk/client-cognito-identity" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/property-provider" "^4.2.3" - "@smithy/types" "^4.8.0" + "@aws-sdk/client-cognito-identity" "3.975.0" + "@aws-sdk/types" "^3.973.1" + "@smithy/property-provider" "^4.2.8" + "@smithy/types" "^4.12.0" tslib "^2.6.2" "@aws-sdk/credential-provider-env@3.894.0": @@ -747,6 +836,17 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-env@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.2.tgz#ae9dab80f2de70b8573eb5cc73693136f54d9eb0" + integrity sha512-wzH1EdrZsytG1xN9UHaK12J9+kfrnd2+c8y0LVoS4O4laEjPoie1qVK3k8/rZe7KOtvULzyMnO3FT4Krr9Z0Dg== + dependencies: + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/types" "^3.973.1" + "@smithy/property-provider" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.894.0": version "3.894.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.894.0.tgz#7f1126d7e6d5f48f12d2ca67b7de07759631549b" @@ -795,6 +895,22 @@ "@smithy/util-stream" "^4.5.6" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@^3.972.3", "@aws-sdk/credential-provider-http@^3.972.4": + version "3.972.4" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.4.tgz#bab20c5fbbe19eed1445d3b76a0cd608d1937767" + integrity sha512-OC7F3ipXV12QfDEWybQGHLzoeHBlAdx/nLzPfHP0Wsabu3JBffu5nlzSaJNf7to9HGtOW8Bpu8NX0ugmDrCbtw== + dependencies: + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/types" "^3.973.1" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/util-stream" "^4.5.10" + tslib "^2.6.2" + "@aws-sdk/credential-provider-ini@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.895.0.tgz#27f0265c1e2b2aeae10b020de048a065ac9840e1" @@ -833,25 +949,6 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.919.0.tgz#39c609ea48ab0039bc1fce5586bdbd8718372071" - integrity sha512-fAWVfh0P54UFbyAK4tmIPh/X3COFAyXYSp8b2Pc1R6GRwDDMvrAigwGJuyZS4BmpPlXij1gB0nXbhM5Yo4MMMA== - dependencies: - "@aws-sdk/core" "3.916.0" - "@aws-sdk/credential-provider-env" "3.916.0" - "@aws-sdk/credential-provider-http" "3.916.0" - "@aws-sdk/credential-provider-process" "3.916.0" - "@aws-sdk/credential-provider-sso" "3.919.0" - "@aws-sdk/credential-provider-web-identity" "3.919.0" - "@aws-sdk/nested-clients" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/credential-provider-imds" "^4.2.3" - "@smithy/property-provider" "^4.2.3" - "@smithy/shared-ini-file-loader" "^4.3.3" - "@smithy/types" "^4.8.0" - tslib "^2.6.2" - "@aws-sdk/credential-provider-ini@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.930.0.tgz#4a93ec9443e481407e7929553d83b296a584c360" @@ -871,6 +968,40 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.2.tgz#4a26aed6af446880cbba8ede95b38a0678697840" + integrity sha512-Jrb8sLm6k8+L7520irBrvCtdLxNtrG7arIxe9TCeMJt/HxqMGJdbIjw8wILzkEHLMIi4MecF2FbXCln7OT1Tag== + dependencies: + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/credential-provider-env" "^3.972.2" + "@aws-sdk/credential-provider-http" "^3.972.3" + "@aws-sdk/credential-provider-login" "^3.972.2" + "@aws-sdk/credential-provider-process" "^3.972.2" + "@aws-sdk/credential-provider-sso" "^3.972.2" + "@aws-sdk/credential-provider-web-identity" "^3.972.2" + "@aws-sdk/nested-clients" "3.975.0" + "@aws-sdk/types" "^3.973.1" + "@smithy/credential-provider-imds" "^4.2.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-login@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.2.tgz#2a022a80950041db4520983568290e57d06399fb" + integrity sha512-mlaw2aiI3DrimW85ZMn3g7qrtHueidS58IGytZ+mbFpsYLK5wMjCAKZQtt7VatLMtSBG/dn/EY4njbnYXIDKeQ== + dependencies: + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/nested-clients" "3.975.0" + "@aws-sdk/types" "^3.973.1" + "@smithy/property-provider" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.895.0.tgz#76dca377418447714544eeceb7423a693ce6c14a" @@ -907,24 +1038,6 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.919.0.tgz#f3f3460090e4cb25c3d70ad9def3535383af7832" - integrity sha512-GL5filyxYS+eZq8ZMQnY5hh79Wxor7Rljo0SUJxZVwEj8cf3zY0MMuwoXU1HQrVabvYtkPDOWSreX8GkIBtBCw== - dependencies: - "@aws-sdk/credential-provider-env" "3.916.0" - "@aws-sdk/credential-provider-http" "3.916.0" - "@aws-sdk/credential-provider-ini" "3.919.0" - "@aws-sdk/credential-provider-process" "3.916.0" - "@aws-sdk/credential-provider-sso" "3.919.0" - "@aws-sdk/credential-provider-web-identity" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/credential-provider-imds" "^4.2.3" - "@smithy/property-provider" "^4.2.3" - "@smithy/shared-ini-file-loader" "^4.3.3" - "@smithy/types" "^4.8.0" - tslib "^2.6.2" - "@aws-sdk/credential-provider-node@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.930.0.tgz#d05e2316bc7796dede919d0b67bbf0005e892480" @@ -943,6 +1056,24 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@^3.972.1", "@aws-sdk/credential-provider-node@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.2.tgz#7f308337fc0674c340878da6c7061caffe03501d" + integrity sha512-Lz1J5IZdTjLYTVIcDP5DVDgi1xlgsF3p1cnvmbfKbjCRhQpftN2e2J4NFfRRvPD54W9+bZ8l5VipPXtTYK7aEg== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.2" + "@aws-sdk/credential-provider-http" "^3.972.3" + "@aws-sdk/credential-provider-ini" "^3.972.2" + "@aws-sdk/credential-provider-process" "^3.972.2" + "@aws-sdk/credential-provider-sso" "^3.972.2" + "@aws-sdk/credential-provider-web-identity" "^3.972.2" + "@aws-sdk/types" "^3.973.1" + "@smithy/credential-provider-imds" "^4.2.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.894.0": version "3.894.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.894.0.tgz#bf779c4d3e6e21e6fb0b6ebbb79a135b4b9341bb" @@ -979,6 +1110,18 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-process@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.2.tgz#15a841b2ed063342878f224cb7bc9b10228a0804" + integrity sha512-NLKLTT7jnUe9GpQAVkPTJO+cs2FjlQDt5fArIYS7h/Iw/CvamzgGYGFRVD2SE05nOHCMwafUSi42If8esGFV+g== + dependencies: + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/types" "^3.973.1" + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.895.0.tgz#e24ecfe1a9194ff87a51c89bbe00df1cd339bcf7" @@ -1007,20 +1150,6 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.919.0.tgz#8eafad76423e33caa8ef746039b5d52c7d5d0d68" - integrity sha512-oN1XG/frOc2K2KdVwRQjLTBLM1oSFJLtOhuV/6g9N0ASD+44uVJai1CF9JJv5GjHGV+wsqAt+/Dzde0tZEXirA== - dependencies: - "@aws-sdk/client-sso" "3.919.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/token-providers" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/property-provider" "^4.2.3" - "@smithy/shared-ini-file-loader" "^4.3.3" - "@smithy/types" "^4.8.0" - tslib "^2.6.2" - "@aws-sdk/credential-provider-sso@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.930.0.tgz#c5242fab9891b1159f0346f644f1e4a2984dfb7b" @@ -1035,6 +1164,20 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.2.tgz#530df0dd80f9be2bdf2a2de8c38578ab71c859e2" + integrity sha512-YpwDn8g3gCGUl61cCV0sRxP2pFIwg+ZsMfWQ/GalSyjXtRkctCMFA+u0yPb/Q4uTfNEiya1Y4nm0C5rIHyPW5Q== + dependencies: + "@aws-sdk/client-sso" "3.975.0" + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/token-providers" "3.975.0" + "@aws-sdk/types" "^3.973.1" + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.895.0.tgz#ae98946cd639258b912eea90a6c82e8dc89a88b8" @@ -1061,19 +1204,6 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.919.0.tgz#e931e1843df2d4195ae1aa866a70eb4e519ad44b" - integrity sha512-Wi7RmyWA8kUJ++/8YceC7U5r4LyvOHGCnJLDHliP8rOC8HLdSgxw/Upeq3WmC+RPw1zyGOtEDRS/caop2xLXEA== - dependencies: - "@aws-sdk/core" "3.916.0" - "@aws-sdk/nested-clients" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/property-provider" "^4.2.3" - "@smithy/shared-ini-file-loader" "^4.3.3" - "@smithy/types" "^4.8.0" - tslib "^2.6.2" - "@aws-sdk/credential-provider-web-identity@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.930.0.tgz#2ef72aa1e524f4aee5d11c29d922412200eb4cec" @@ -1087,6 +1217,19 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-web-identity@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.2.tgz#30d253baee3e4e35dcc15aa9219e18befd3d17bf" + integrity sha512-x9DAiN9Qz+NjJ99ltDiVQ8d511M/tuF/9MFbe2jUgo7HZhD6+x4S3iT1YcP07ndwDUjmzKGmeOEgE24k4qvfdg== + dependencies: + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/nested-clients" "3.975.0" + "@aws-sdk/types" "^3.973.1" + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/credential-providers@^3.864.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.895.0.tgz#fa7b3e3ce1bb76b8b2fd058380a5ad91effe29d4" @@ -1112,29 +1255,30 @@ "@smithy/types" "^4.5.0" tslib "^2.6.2" -"@aws-sdk/credential-providers@^3.901.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.919.0.tgz#89118480cf315162dbf5463ff33c98946dbfd9d6" - integrity sha512-YA7PUZpY2H22UdpSuC+hySUwBDqjVEVvg7uCZ6Wt9ChoDcsiVu7esTK60FETDbHk0yHF5WO1IQyHM8kuSz2DxA== - dependencies: - "@aws-sdk/client-cognito-identity" "3.919.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/credential-provider-cognito-identity" "3.919.0" - "@aws-sdk/credential-provider-env" "3.916.0" - "@aws-sdk/credential-provider-http" "3.916.0" - "@aws-sdk/credential-provider-ini" "3.919.0" - "@aws-sdk/credential-provider-node" "3.919.0" - "@aws-sdk/credential-provider-process" "3.916.0" - "@aws-sdk/credential-provider-sso" "3.919.0" - "@aws-sdk/credential-provider-web-identity" "3.919.0" - "@aws-sdk/nested-clients" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/config-resolver" "^4.4.0" - "@smithy/core" "^3.17.1" - "@smithy/credential-provider-imds" "^4.2.3" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/property-provider" "^4.2.3" - "@smithy/types" "^4.8.0" +"@aws-sdk/credential-providers@^3.975.0": + version "3.978.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.978.0.tgz#49fb888b338c8440f1680d6e1f4d849d279ad856" + integrity sha512-6SrS7Lpkllq19tpuBkSvUdeMLk4RwgU6OklcJ3NmCkIORhf/tFXTKRsSnm3XpZb7FgofCx69eOQUN/7r4xw8UQ== + dependencies: + "@aws-sdk/client-cognito-identity" "3.978.0" + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/credential-provider-cognito-identity" "^3.972.2" + "@aws-sdk/credential-provider-env" "^3.972.2" + "@aws-sdk/credential-provider-http" "^3.972.4" + "@aws-sdk/credential-provider-ini" "^3.972.2" + "@aws-sdk/credential-provider-login" "^3.972.2" + "@aws-sdk/credential-provider-node" "^3.972.2" + "@aws-sdk/credential-provider-process" "^3.972.2" + "@aws-sdk/credential-provider-sso" "^3.972.2" + "@aws-sdk/credential-provider-web-identity" "^3.972.2" + "@aws-sdk/nested-clients" "3.978.0" + "@aws-sdk/types" "^3.973.1" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/credential-provider-imds" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/types" "^4.12.0" tslib "^2.6.2" "@aws-sdk/hash-node@^3.110.0": @@ -1145,14 +1289,14 @@ "@smithy/hash-node" "^1.0.1" tslib "^2.5.0" -"@aws-sdk/lib-storage@^3.937.0": - version "3.937.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.937.0.tgz#105116eb78a9a2b7e1c905c301bc40143f5821da" - integrity sha512-G+AxZX14MaVUT93BGeG17yBC+rR5yOOvE0QLpSViSARjPLI7el1zEEpOzC18OKIchFoM81VfC0xavfNMIp/bfw== +"@aws-sdk/lib-storage@^3.975.0": + version "3.978.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.978.0.tgz#298cf18c7d3ac56f7dcca7d57dfc322a976c00a8" + integrity sha512-SvKpOdmhwI2mk4So73o2CDFWepcLO66p1YnngPPe9lrRl+apePsvyC++kwG2yYOTBVsRtsrvJwNBgPoDTO5itg== dependencies: - "@smithy/abort-controller" "^4.2.5" - "@smithy/middleware-endpoint" "^4.3.12" - "@smithy/smithy-client" "^4.9.8" + "@smithy/abort-controller" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/smithy-client" "^4.11.1" buffer "5.6.0" events "3.3.0" stream-browserify "3.0.0" @@ -1171,6 +1315,19 @@ "@smithy/util-config-provider" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-bucket-endpoint@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.2.tgz#04ab6d109a8ead757a711ee8cb18a1bd65b404da" + integrity sha512-ofuXBnitp9j8t05O4NQVrpMZDECPtUhRIWdLzR35baR5njOIPY7YqNtJE+yELVpSn2m4jt2sV1ezYMBY4/Lo+w== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-arn-parser" "^3.972.2" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + "@smithy/util-config-provider" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/middleware-expect-continue@3.917.0": version "3.917.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.917.0.tgz#f0e0cacad99d048c46cdce8f9dbe47351e59a0f5" @@ -1181,6 +1338,16 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@aws-sdk/middleware-expect-continue@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.2.tgz#3bf62c912de18d9179dac9f192ab8b86f09a6f58" + integrity sha512-d9bBQlGk1T5j5rWfof20M2tErddOSoSLDauP2/yyuXfeOfQRCSBUZNrApSxjJ9Hw+/RDGR/XL+LEOqmXxSlV3A== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/middleware-flexible-checksums@3.916.0": version "3.916.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.916.0.tgz#ecbec3baf54e79dae04f1fd19f21041482928239" @@ -1200,22 +1367,23 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.919.0.tgz#5838166c196be0e5e3ddbd355c905431607a4e25" - integrity sha512-br56Wg1o5hLrMXX2iMjq12Cno/jsx9l2Y0KDI7hD4NFWycKCdsUpI1sjm8Asj18JbrbNWiCeAbFFlzcD8h+4wg== +"@aws-sdk/middleware-flexible-checksums@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.2.tgz#038be2a6acb817cae1b12cd9084f1e5b7a0b38c0" + integrity sha512-GgWVZJdzXzqhXxzNAYB3TnZCj7d5rZNdovqSIV91e97nowHVaExRoyaZ3H/Ydqot7veHGPTl8nBp464zZeLDTQ== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/types" "3.914.0" + "@aws-sdk/core" "^3.973.2" + "@aws-sdk/crc64-nvme" "3.972.0" + "@aws-sdk/types" "^3.973.1" "@smithy/is-array-buffer" "^4.2.0" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/protocol-http" "^5.3.3" - "@smithy/types" "^4.8.0" - "@smithy/util-middleware" "^4.2.3" - "@smithy/util-stream" "^4.5.4" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-stream" "^4.5.10" "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" @@ -1249,6 +1417,16 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/middleware-host-header@^3.972.1", "@aws-sdk/middleware-host-header@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.2.tgz#0d0a7fb4a5c71b4697c8f00d7de975be8146ffcf" + integrity sha512-42hZ8jEXT2uR6YybCzNq9OomqHPw43YIfRfz17biZjMQA4jKSQUaHIl6VvqO2Ddl5904pXg2Yd/ku78S0Ikgog== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/middleware-location-constraint@3.914.0": version "3.914.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.914.0.tgz#ee877bdaa54746f65919fa54685ef392256bfb19" @@ -1258,6 +1436,15 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@aws-sdk/middleware-location-constraint@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.2.tgz#8080605dd95e1103e5e4f42ea2ad2469973de6da" + integrity sha512-pyayzpq+VQiG1o9pEUyr6BXEJ2g2t4JIPdNxDkIHp2AhR63Gy/10WQkXTBOgRnfQ7/aLPLOnjRIWwOPp0CfUlA== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/middleware-logger@3.893.0": version "3.893.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.893.0.tgz#4ecb20ee0771a2f3afdc07c1310b97251d3854e2" @@ -1285,6 +1472,15 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/middleware-logger@^3.972.1", "@aws-sdk/middleware-logger@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.972.2.tgz#132cf8945f27c7f93ba4f1742cefda04d18aff21" + integrity sha512-iUzdXKOgi4JVDDEG/VvoNw50FryRCEm0qAudw12DcZoiNJWl0rN6SYVLcL1xwugMfQncCXieK5UBlG6mhH7iYA== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/middleware-recursion-detection@3.893.0": version "3.893.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.893.0.tgz#9fde6f10e72fcbd8ce4f0eea629c07ca64ce86ba" @@ -1307,17 +1503,6 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.919.0.tgz#6e71f8878562c18e2ed47a8c2cfc57a1a2e75423" - integrity sha512-q3MAUxLQve4rTfAannUCx2q1kAHkBBsxt6hVUpzi63KC4lBLScc1ltr7TI+hDxlfGRWGo54jRegb2SsY9Jm+Mw== - dependencies: - "@aws-sdk/types" "3.914.0" - "@aws/lambda-invoke-store" "^0.1.1" - "@smithy/protocol-http" "^5.3.3" - "@smithy/types" "^4.8.0" - tslib "^2.6.2" - "@aws-sdk/middleware-recursion-detection@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.930.0.tgz#cb36ee33ff3d45f3c899164a6c300a267c0c490f" @@ -1329,6 +1514,17 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/middleware-recursion-detection@^3.972.1", "@aws-sdk/middleware-recursion-detection@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.2.tgz#12de11a9c4327418cf6edc20907813b2ecf4c179" + integrity sha512-/mzlyzJDtngNFd/rAYvqx29a2d0VuiYKN84Y/Mu9mGw7cfMOCyRK+896tb9wV6MoPRHUX7IXuKCIL8nzz2Pz5A== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@aws/lambda-invoke-store" "^0.2.2" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/middleware-retry@^3.374.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.374.0.tgz#2e80bad67338a3bd3c7dd7364e16482b08c9ffda" @@ -1358,6 +1554,46 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/middleware-sdk-s3@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.0.tgz#2b0d89ecad90a90c7f4a3acd75966b9321ed2a66" + integrity sha512-0bcKFXWx+NZ7tIlOo7KjQ+O2rydiHdIQahrq+fN6k9Osky29v17guy68urUKfhTobR6iY6KvxkroFWaFtTgS5w== + dependencies: + "@aws-sdk/core" "3.972.0" + "@aws-sdk/types" "3.972.0" + "@aws-sdk/util-arn-parser" "3.972.0" + "@smithy/core" "^3.20.6" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/smithy-client" "^4.10.8" + "@smithy/types" "^4.12.0" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-stream" "^4.5.10" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@^3.972.4": + version "3.972.4" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.4.tgz#f40f2c4296009e927659def5a1f8d0b1b3ef600b" + integrity sha512-lradfn72Td7lswhZKi86VKRNkDtmQR7bq9shX1kaPK1itjThxfcx7ogXSvMm/0cuqoYGic8UUXQOaK4kpU933g== + dependencies: + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-arn-parser" "^3.972.2" + "@smithy/core" "^3.22.0" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-stream" "^4.5.10" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/middleware-ssec@3.914.0": version "3.914.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.914.0.tgz#4042dfed7a4d4234e37a84bab9d1cd9998a22180" @@ -1367,6 +1603,15 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@aws-sdk/middleware-ssec@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.2.tgz#73620c2401b6a64de25fd9bae1a9028ff3ca28ba" + integrity sha512-HJ3OmQnlQ1es6esrDWnx3nVPhBAN89WaFCzsDcb6oT7TMjBPUfZ5+1BpI7B0Hnme8cc6kp7qc4cgo2plrlROJA== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/middleware-user-agent@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.895.0.tgz#bf1276999ff84a3d53f9f80397033fc1b4bd8f05" @@ -1406,6 +1651,19 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/middleware-user-agent@^3.972.2", "@aws-sdk/middleware-user-agent@^3.972.3", "@aws-sdk/middleware-user-agent@^3.972.4": + version "3.972.4" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.4.tgz#ead729690b467c6c7105e220b71c5c59b0b4edaf" + integrity sha512-6sU8jrSJvY/lqSnU6IYsa8SrCKwOZ4Enl6O4xVJo8RCq9Bdr5Giuw2eUaJAk9GPcpr4OFcmSFv3JOLhpKGeRZA== + dependencies: + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.972.0" + "@smithy/core" "^3.22.0" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/nested-clients@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.895.0.tgz#b11c26eb5d2b09a2f6c1901bc73084e76ff8d849" @@ -1494,50 +1752,6 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.919.0.tgz#69ba4a2984b042a092fbb33988fabac6e922f6ff" - integrity sha512-5D9OQsMPkbkp4KHM7JZv/RcGCpr3E1L7XX7U9sCxY+sFGeysltoviTmaIBXsJ2IjAJbBULtf0G/J+2cfH5OP+w== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.916.0" - "@aws-sdk/middleware-host-header" "3.914.0" - "@aws-sdk/middleware-logger" "3.914.0" - "@aws-sdk/middleware-recursion-detection" "3.919.0" - "@aws-sdk/middleware-user-agent" "3.916.0" - "@aws-sdk/region-config-resolver" "3.914.0" - "@aws-sdk/types" "3.914.0" - "@aws-sdk/util-endpoints" "3.916.0" - "@aws-sdk/util-user-agent-browser" "3.914.0" - "@aws-sdk/util-user-agent-node" "3.916.0" - "@smithy/config-resolver" "^4.4.0" - "@smithy/core" "^3.17.1" - "@smithy/fetch-http-handler" "^5.3.4" - "@smithy/hash-node" "^4.2.3" - "@smithy/invalid-dependency" "^4.2.3" - "@smithy/middleware-content-length" "^4.2.3" - "@smithy/middleware-endpoint" "^4.3.5" - "@smithy/middleware-retry" "^4.4.5" - "@smithy/middleware-serde" "^4.2.3" - "@smithy/middleware-stack" "^4.2.3" - "@smithy/node-config-provider" "^4.3.3" - "@smithy/node-http-handler" "^4.4.3" - "@smithy/protocol-http" "^5.3.3" - "@smithy/smithy-client" "^4.9.1" - "@smithy/types" "^4.8.0" - "@smithy/url-parser" "^4.2.3" - "@smithy/util-base64" "^4.3.0" - "@smithy/util-body-length-browser" "^4.2.0" - "@smithy/util-body-length-node" "^4.2.1" - "@smithy/util-defaults-mode-browser" "^4.3.4" - "@smithy/util-defaults-mode-node" "^4.2.6" - "@smithy/util-endpoints" "^3.2.3" - "@smithy/util-middleware" "^4.2.3" - "@smithy/util-retry" "^4.2.3" - "@smithy/util-utf8" "^4.2.0" - tslib "^2.6.2" - "@aws-sdk/nested-clients@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.930.0.tgz#b91274aac140243f3581990560d72a8a93a16b03" @@ -1582,6 +1796,94 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@aws-sdk/nested-clients@3.975.0": + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.975.0.tgz#566d4508dfd2b83e86a829670d9219d307f6f1a5" + integrity sha512-OkeFHPlQj2c/Y5bQGkX14pxhDWUGUFt3LRHhjcDKsSCw6lrxKcxN3WFZN0qbJwKNydP+knL5nxvfgKiCLpTLRA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.2" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.21.1" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.11" + "@smithy/middleware-retry" "^4.4.27" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.10.12" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.26" + "@smithy/util-defaults-mode-node" "^4.2.29" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@3.978.0": + version "3.978.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.978.0.tgz#f149fc9a1812dd33d659688469b2587f11efa389" + integrity sha512-FyFiPp1SPt2JnspHlPO0LJyRwfYLBA27ToAoJAsbJIcd/Ytt9mFkRQ4kqUJQwnSl5JpdYzotNRqoRFCmx3uUfA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "^3.973.4" + "@aws-sdk/middleware-host-header" "^3.972.2" + "@aws-sdk/middleware-logger" "^3.972.2" + "@aws-sdk/middleware-recursion-detection" "^3.972.2" + "@aws-sdk/middleware-user-agent" "^3.972.4" + "@aws-sdk/region-config-resolver" "^3.972.2" + "@aws-sdk/types" "^3.973.1" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.2" + "@aws-sdk/util-user-agent-node" "^3.972.2" + "@smithy/config-resolver" "^4.4.6" + "@smithy/core" "^3.22.0" + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/hash-node" "^4.2.8" + "@smithy/invalid-dependency" "^4.2.8" + "@smithy/middleware-content-length" "^4.2.8" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-retry" "^4.4.29" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.28" + "@smithy/util-defaults-mode-node" "^4.2.31" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@aws-sdk/protocol-http@^3.374.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.374.0.tgz#e35e76096b995bbed803897a9f4587d11ca34088" @@ -1623,6 +1925,17 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/region-config-resolver@^3.972.1", "@aws-sdk/region-config-resolver@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.2.tgz#962dc4099a3c43248724746dc2faa0d43499c374" + integrity sha512-/7vRBsfmiOlg2X67EdKrzzQGw5/SbkXb7ALHQmlQLkZh8qNgvS2G2dDC6NtF3hzFlpP3j2k+KIEtql/6VrI6JA== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/config-resolver" "^4.4.6" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/s3-request-presigner@^3.901.0": version "3.917.0" resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.917.0.tgz#b68a257ad40c0694c868f8c6b92440a06ae8d197" @@ -1649,6 +1962,18 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@aws-sdk/signature-v4-multi-region@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.972.0.tgz#159662f1f0b26fc178ef1c8c92cbd37e79ddbdc0" + integrity sha512-2udiRijmjpN81Pvajje4TsjbXDZNP6K9bYUanBYH8hXa/tZG5qfGCySD+TyX0sgDxCQmEDMg3LaQdfjNHBDEgQ== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.972.0" + "@aws-sdk/types" "3.972.0" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/signature-v4@^3.374.0": version "3.374.0" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.374.0.tgz#bd727f4c392acb81bc667aa4cfceeba608250771" @@ -1683,19 +2008,6 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" -"@aws-sdk/token-providers@3.919.0": - version "3.919.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.919.0.tgz#37ee099d64b19c4cb769c99b933e6e08f9180c00" - integrity sha512-6aFv4lzXbfbkl0Pv37Us8S/ZkqplOQZIEgQg7bfMru7P96Wv2jVnDGsEc5YyxMnnRyIB90naQ5JgslZ4rkpknw== - dependencies: - "@aws-sdk/core" "3.916.0" - "@aws-sdk/nested-clients" "3.919.0" - "@aws-sdk/types" "3.914.0" - "@smithy/property-provider" "^4.2.3" - "@smithy/shared-ini-file-loader" "^4.3.3" - "@smithy/types" "^4.8.0" - tslib "^2.6.2" - "@aws-sdk/token-providers@3.930.0": version "3.930.0" resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.930.0.tgz#b793a4b91391722f5e1950e65a50dd2943ad279f" @@ -1709,6 +2021,19 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/token-providers@3.975.0": + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.975.0.tgz#57d41c54fe8cf296816f2142de0c32f4c79b2bff" + integrity sha512-AWQt64hkVbDQ+CmM09wnvSk2mVyH4iRROkmYkr3/lmUtFNbE2L/fnw26sckZnUcFCsHPqbkQrcsZAnTcBLbH4w== + dependencies: + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/nested-clients" "3.975.0" + "@aws-sdk/types" "^3.973.0" + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/types@3.893.0": version "3.893.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.893.0.tgz#1afbdb9d62bf86caeac380e3cac11a051076400a" @@ -1733,6 +2058,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/types@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.972.0.tgz#2c8ddf7fa63038da2e27d888c1bd5817b62e30fa" + integrity sha512-U7xBIbLSetONxb2bNzHyDgND3oKGoIfmknrEVnoEU4GUSs+0augUOIn9DIWGUO2ETcRFdsRUnmx9KhPT9Ojbug== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/types@^3.222.0": version "3.734.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.734.0.tgz#af5e620b0e761918282aa1c8e53cac6091d169a2" @@ -1741,6 +2074,14 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" +"@aws-sdk/types@^3.973.0", "@aws-sdk/types@^3.973.1": + version "3.973.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.1.tgz#1b2992ec6c8380c3e74c9bd2c74703e9a807d6e0" + integrity sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/util-arn-parser@3.893.0": version "3.893.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz#fcc9b792744b9da597662891c2422dda83881d8d" @@ -1748,6 +2089,20 @@ dependencies: tslib "^2.6.2" +"@aws-sdk/util-arn-parser@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.0.tgz#24a29435e1d8ad6a3c2282f62521fe9961346c54" + integrity sha512-RM5Mmo/KJ593iMSrALlHEOcc9YOIyOsDmS5x2NLOMdEmzv1o00fcpAkCQ02IGu1eFneBFT7uX0Mpag0HI+Cz2g== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.2.tgz#ef18ba889e8ef35f083f1e962018bc0ce70acef3" + integrity sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg== + dependencies: + tslib "^2.6.2" + "@aws-sdk/util-endpoints@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.895.0.tgz#d3881250cecc40fa9d721a33661c1aaa64aba643" @@ -1781,6 +2136,17 @@ "@smithy/util-endpoints" "^3.2.5" tslib "^2.6.2" +"@aws-sdk/util-endpoints@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.972.0.tgz#0c483aa4853ea3858024bc502454ba395e533cb0" + integrity sha512-6JHsl1V/a1ZW8D8AFfd4R52fwZPnZ5H4U6DS8m/bWT8qad72NvbOFAC7U2cDtFs2TShqUO3TEiX/EJibtY3ijg== + dependencies: + "@aws-sdk/types" "3.972.0" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-endpoints" "^3.2.8" + tslib "^2.6.2" + "@aws-sdk/util-format-url@3.914.0": version "3.914.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.914.0.tgz#6592dd713faa311200fc9ae9295a79618f33e2ca" @@ -1828,6 +2194,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-browser@^3.972.1", "@aws-sdk/util-user-agent-browser@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.2.tgz#f5af782d42aed4c87059406b6f2ddf258fbb9586" + integrity sha512-gz76bUyebPZRxIsBHJUd/v+yiyFzm9adHbr8NykP2nm+z/rFyvQneOHajrUejtmnc5tTBeaDPL4X25TnagRk4A== + dependencies: + "@aws-sdk/types" "^3.973.1" + "@smithy/types" "^4.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-node@3.895.0": version "3.895.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.895.0.tgz#f8bcfff850f2685d10099a7496dc70d6c6525356" @@ -1861,6 +2237,17 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@aws-sdk/util-user-agent-node@^3.972.1", "@aws-sdk/util-user-agent-node@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.2.tgz#cbdb14a2e412b39d7751636133de604ce4727506" + integrity sha512-vnxOc4C6AR7hVbwyFo1YuH0GB6dgJlWt8nIOOJpnzJAWJPkUMPJ9Zv2lnKsSU7TTZbhP2hEO8OZ4PYH59XFv8Q== + dependencies: + "@aws-sdk/middleware-user-agent" "^3.972.3" + "@aws-sdk/types" "^3.973.1" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@aws-sdk/util-utf8-browser@^3.0.0": version "3.259.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" @@ -1895,6 +2282,24 @@ fast-xml-parser "5.2.5" tslib "^2.6.2" +"@aws-sdk/xml-builder@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.0.tgz#8ae8f6f6e0a63d518c8c8ce9f40f3c94d9b67884" + integrity sha512-POaGMcXnozzqBUyJM3HLUZ9GR6OKJWPGJEmhtTnxZXt8B6JcJ/6K3xRJ5H/j8oovVLz8Wg6vFxAHv8lvuASxMg== + dependencies: + "@smithy/types" "^4.12.0" + fast-xml-parser "5.2.5" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.2.tgz#c63a6a788ff398491748908af528c8294c562f65" + integrity sha512-jGOOV/bV1DhkkUhHiZ3/1GZ67cZyOXaDb7d1rYD6ZiXf5V9tBNOcgqXwRRPvrCbYaFRa1pPMFb3ZjqjWpR3YfA== + dependencies: + "@smithy/types" "^4.12.0" + fast-xml-parser "5.2.5" + tslib "^2.6.2" + "@aws/lambda-invoke-store@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f" @@ -1905,6 +2310,11 @@ resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz#2e67f17040b930bde00a79ffb484eb9e77472b06" integrity sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA== +"@aws/lambda-invoke-store@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.3.tgz#f1137f56209ccc69c15f826242cbf37f828617dd" + integrity sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw== + "@azure/abort-controller@^2.0.0", "@azure/abort-controller@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" @@ -2714,6 +3124,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/abort-controller@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.8.tgz#3bfd7a51acce88eaec9a65c3382542be9f3a053a" + integrity sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/chunked-blob-reader-native@^4.2.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz#380266951d746b522b4ab2b16bfea6b451147b41" @@ -2764,6 +3182,18 @@ "@smithy/util-middleware" "^4.2.5" tslib "^2.6.2" +"@smithy/config-resolver@^4.4.6": + version "4.4.6" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.6.tgz#bd7f65b3da93f37f1c97a399ade0124635c02297" + integrity sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ== + dependencies: + "@smithy/node-config-provider" "^4.3.8" + "@smithy/types" "^4.12.0" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-endpoints" "^3.2.8" + "@smithy/util-middleware" "^4.2.8" + tslib "^2.6.2" + "@smithy/core@^3.11.1", "@smithy/core@^3.12.0": version "3.12.0" resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.12.0.tgz#81bb6a2a113e334ddaede9d502ff17ce4d8a2cc6" @@ -2812,18 +3242,18 @@ "@smithy/uuid" "^1.1.0" tslib "^2.6.2" -"@smithy/core@^3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.18.5.tgz#c304d185e2335cbef9b39431a53a67c84972c27f" - integrity sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw== +"@smithy/core@^3.20.6", "@smithy/core@^3.21.1", "@smithy/core@^3.22.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.22.0.tgz#bf5ea9233e2be1d8681d06c8ed3c31966711dc83" + integrity sha512-6vjCHD6vaY8KubeNw2Fg3EK0KLGQYdldG4fYgQmA0xSW0dJ8G2xFhSOdrlUakWVoP5JuWHtFODg3PNd/DN3FDA== dependencies: - "@smithy/middleware-serde" "^4.2.6" - "@smithy/protocol-http" "^5.3.5" - "@smithy/types" "^4.9.0" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" "@smithy/util-base64" "^4.3.0" "@smithy/util-body-length-browser" "^4.2.0" - "@smithy/util-middleware" "^4.2.5" - "@smithy/util-stream" "^4.5.6" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-stream" "^4.5.10" "@smithy/util-utf8" "^4.2.0" "@smithy/uuid" "^1.1.0" tslib "^2.6.2" @@ -2861,6 +3291,17 @@ "@smithy/url-parser" "^4.2.5" tslib "^2.6.2" +"@smithy/credential-provider-imds@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.8.tgz#b2f4bf759ab1c35c0dd00fa3470263c749ebf60f" + integrity sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw== + dependencies: + "@smithy/node-config-provider" "^4.3.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + tslib "^2.6.2" + "@smithy/eventstream-codec@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-1.1.0.tgz#bfe1308ba84ff3db3e79dc1ced8231c52ac0fc36" @@ -2881,6 +3322,16 @@ "@smithy/util-hex-encoding" "^4.2.0" tslib "^2.6.2" +"@smithy/eventstream-codec@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.8.tgz#2f431f4bac22e40aa6565189ea350c6fcb5efafd" + integrity sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.12.0" + "@smithy/util-hex-encoding" "^4.2.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-browser@^4.2.3": version "4.2.3" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.3.tgz#57fb9c10daac12647a0b97ef04330d706cbe9494" @@ -2890,6 +3341,15 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@smithy/eventstream-serde-browser@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.8.tgz#04e2e1fad18e286d5595fbc0bff22e71251fca38" + integrity sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw== + dependencies: + "@smithy/eventstream-serde-universal" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-config-resolver@^4.3.3": version "4.3.3" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.3.tgz#ca1a7d272ae939aee303da40aa476656d785f75f" @@ -2898,6 +3358,14 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@smithy/eventstream-serde-config-resolver@^4.3.8": + version "4.3.8" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.8.tgz#b913d23834c6ebf1646164893e1bec89dffe4f3b" + integrity sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-node@^4.2.3": version "4.2.3" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.3.tgz#f1b33bb576bf7222b6bd6bc2ad845068ccf53f16" @@ -2907,6 +3375,15 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@smithy/eventstream-serde-node@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.8.tgz#5f2dfa2cbb30bf7564c8d8d82a9832e9313f5243" + integrity sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A== + dependencies: + "@smithy/eventstream-serde-universal" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/eventstream-serde-universal@^4.2.3": version "4.2.3" resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.3.tgz#86194daa2cd2496e413723465360d80f32ad7252" @@ -2916,6 +3393,15 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@smithy/eventstream-serde-universal@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.8.tgz#a62b389941c28a8c3ab44a0c8ba595447e0258a7" + integrity sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ== + dependencies: + "@smithy/eventstream-codec" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/fetch-http-handler@^5.2.1": version "5.2.1" resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz#fe284a00f1b3a35edf9fba454d287b7f74ef20af" @@ -2949,6 +3435,17 @@ "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" +"@smithy/fetch-http-handler@^5.3.9": + version "5.3.9" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.9.tgz#edfc9e90e0c7538c81e22e748d62c0066cc91d58" + integrity sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA== + dependencies: + "@smithy/protocol-http" "^5.3.8" + "@smithy/querystring-builder" "^4.2.8" + "@smithy/types" "^4.12.0" + "@smithy/util-base64" "^4.3.0" + tslib "^2.6.2" + "@smithy/hash-blob-browser@^4.2.4": version "4.2.4" resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.4.tgz#c7226d2ba2a394acf6e90510d08f7c3003f516d1" @@ -2959,6 +3456,16 @@ "@smithy/types" "^4.8.0" tslib "^2.6.2" +"@smithy/hash-blob-browser@^4.2.9": + version "4.2.9" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.9.tgz#4f8e19b12b5a1000b7292b30f5ee237d32216af3" + integrity sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg== + dependencies: + "@smithy/chunked-blob-reader" "^5.2.0" + "@smithy/chunked-blob-reader-native" "^4.2.1" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/hash-node@^1.0.1": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-1.1.0.tgz#a8da64fa4b2e2c64185df92897165c8113b499b2" @@ -2999,6 +3506,16 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@smithy/hash-node@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.8.tgz#c21eb055041716cd492dda3a109852a94b6d47bb" + integrity sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA== + dependencies: + "@smithy/types" "^4.12.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@smithy/hash-stream-node@^4.2.3": version "4.2.3" resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.3.tgz#8ddae1f5366513cbbec3acb6f54e3ec1b332db88" @@ -3008,6 +3525,15 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@smithy/hash-stream-node@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.8.tgz#d541a31c714ac9c85ae9fec91559e81286707ddb" + integrity sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w== + dependencies: + "@smithy/types" "^4.12.0" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@smithy/invalid-dependency@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz#2511335ff889944701c7d2a3b1e4a4d6fe9ddfab" @@ -3032,6 +3558,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/invalid-dependency@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.8.tgz#c578bc6d5540c877aaed5034b986b5f6bd896451" + integrity sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/is-array-buffer@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-1.1.0.tgz#29948072da2b57575aa9898cda863932e842ab11" @@ -3076,6 +3610,15 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@smithy/md5-js@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.8.tgz#d354dbf9aea7a580be97598a581e35eef324ce22" + integrity sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ== + dependencies: + "@smithy/types" "^4.12.0" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@smithy/middleware-content-length@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz#eaea7bd14c7a0b64aef87b8c372c2a04d7b9cb72" @@ -3103,6 +3646,15 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/middleware-content-length@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.8.tgz#82c1df578fa70fe5800cf305b8788b9d2836a3e4" + integrity sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A== + dependencies: + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^4.2.3", "@smithy/middleware-endpoint@^4.2.4": version "4.2.4" resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.4.tgz#d815d27b7869a66ee97b41932053ca5d5ec6315e" @@ -3131,20 +3683,6 @@ "@smithy/util-middleware" "^4.2.5" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.3.12": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz#97c432eec17398277f626b8d2abff9278b89d2ac" - integrity sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A== - dependencies: - "@smithy/core" "^3.18.5" - "@smithy/middleware-serde" "^4.2.6" - "@smithy/node-config-provider" "^4.3.5" - "@smithy/shared-ini-file-loader" "^4.4.0" - "@smithy/types" "^4.9.0" - "@smithy/url-parser" "^4.2.5" - "@smithy/util-middleware" "^4.2.5" - tslib "^2.6.2" - "@smithy/middleware-endpoint@^4.3.5": version "4.3.5" resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.5.tgz#c22f82f83f0b5cc6c0866a2a87b65bc2e79af352" @@ -3159,6 +3697,20 @@ "@smithy/util-middleware" "^4.2.3" tslib "^2.6.2" +"@smithy/middleware-endpoint@^4.4.11", "@smithy/middleware-endpoint@^4.4.12": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.12.tgz#910c9f1cc738d104225d69f702bd28cd2a976eb0" + integrity sha512-9JMKHVJtW9RysTNjcBZQHDwB0p3iTP6B1IfQV4m+uCevkVd/VuLgwfqk5cnI4RHcp4cPwoIvxQqN4B1sxeHo8Q== + dependencies: + "@smithy/core" "^3.22.0" + "@smithy/middleware-serde" "^4.2.9" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + "@smithy/url-parser" "^4.2.8" + "@smithy/util-middleware" "^4.2.8" + tslib "^2.6.2" + "@smithy/middleware-retry@^1.0.3": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-1.1.0.tgz#084f70df112f22b5bfa0de8faaa14a5dcf22149e" @@ -3187,6 +3739,21 @@ "@smithy/uuid" "^1.0.0" tslib "^2.6.2" +"@smithy/middleware-retry@^4.4.27", "@smithy/middleware-retry@^4.4.29": + version "4.4.29" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.29.tgz#b8f3d6e46924e7496cd107e14b238df5ef9e80b4" + integrity sha512-bmTn75a4tmKRkC5w61yYQLb3DmxNzB8qSVu9SbTYqW6GAL0WXO2bDZuMAn/GJSbOdHEdjZvWxe+9Kk015bw6Cg== + dependencies: + "@smithy/node-config-provider" "^4.3.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/service-error-classification" "^4.2.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-retry" "^4.2.8" + "@smithy/uuid" "^1.1.0" + tslib "^2.6.2" + "@smithy/middleware-retry@^4.4.5": version "4.4.5" resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.5.tgz#5bdb6ba1be6a97272b79fdac99db40c5e7ab81e0" @@ -3244,13 +3811,13 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/middleware-serde@^4.2.6": - version "4.2.6" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.6.tgz#7e710f43206e13a8c081a372b276e7b2c51bff5b" - integrity sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ== +"@smithy/middleware-serde@^4.2.9": + version "4.2.9" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.9.tgz#fd9d9b02b265aef67c9a30f55c2a5038fc9ca791" + integrity sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ== dependencies: - "@smithy/protocol-http" "^5.3.5" - "@smithy/types" "^4.9.0" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" tslib "^2.6.2" "@smithy/middleware-stack@^4.1.1": @@ -3277,6 +3844,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/middleware-stack@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.8.tgz#4fa9cfaaa05f664c9bb15d45608f3cb4f6da2b76" + integrity sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/node-config-provider@^4.2.2": version "4.2.2" resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz#ede9ac2f689cfdf26815a53fadf139e6aa77bdbb" @@ -3307,6 +3882,16 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/node-config-provider@^4.3.8": + version "4.3.8" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.8.tgz#85a0683448262b2eb822f64c14278d4887526377" + integrity sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg== + dependencies: + "@smithy/property-provider" "^4.2.8" + "@smithy/shared-ini-file-loader" "^4.4.3" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/node-http-handler@^3.0.0": version "3.3.3" resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" @@ -3351,6 +3936,17 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/node-http-handler@^4.4.8": + version "4.4.8" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.8.tgz#298cc148c812b9a79f0ebd75e82bdab9e6d0bbcd" + integrity sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg== + dependencies: + "@smithy/abort-controller" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/querystring-builder" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/property-provider@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.1.1.tgz#6e11ae6729840314afed05fd6ab48f62c654116b" @@ -3375,6 +3971,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/property-provider@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.8.tgz#6e37b30923d2d31370c50ce303a4339020031472" + integrity sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/protocol-http@^1.1.0", "@smithy/protocol-http@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.2.0.tgz#a554e4dabb14508f0bc2cdef9c3710e2b294be04" @@ -3459,6 +4063,15 @@ "@smithy/util-uri-escape" "^4.2.0" tslib "^2.6.2" +"@smithy/querystring-builder@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.8.tgz#2fa72d29eb1844a6a9933038bbbb14d6fe385e93" + integrity sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw== + dependencies: + "@smithy/types" "^4.12.0" + "@smithy/util-uri-escape" "^4.2.0" + tslib "^2.6.2" + "@smithy/querystring-parser@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz#21b861439b2db16abeb0a6789b126705fa25eea1" @@ -3483,6 +4096,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/querystring-parser@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.8.tgz#aa3f2456180ce70242e89018d0b1ebd4782a6347" + integrity sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/service-error-classification@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-1.1.0.tgz#264dd432ae513b3f2ad9fc6f461deda8c516173c" @@ -3509,6 +4130,13 @@ dependencies: "@smithy/types" "^4.9.0" +"@smithy/service-error-classification@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.8.tgz#6d89dbad4f4978d7b75a44af8c18c22455a16cdc" + integrity sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ== + dependencies: + "@smithy/types" "^4.12.0" + "@smithy/shared-ini-file-loader@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz#e4717242686bf611bd1a5d6f79870abe480c1c99" @@ -3533,6 +4161,14 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/shared-ini-file-loader@^4.4.3": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.3.tgz#6054215ecb3a6532b13aa49a9fbda640b63be50e" + integrity sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/signature-v4@^1.0.1": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-1.1.0.tgz#e85309995c2475d39598a4f56e68b7ed856bdfa6" @@ -3617,6 +4253,18 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" +"@smithy/smithy-client@^4.10.12", "@smithy/smithy-client@^4.10.8", "@smithy/smithy-client@^4.11.1": + version "4.11.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.11.1.tgz#8203e620da22e7f7218597a60193ef5a53325c41" + integrity sha512-SERgNg5Z1U+jfR6/2xPYjSEHY1t3pyTHC/Ma3YQl6qWtmiL42bvNId3W/oMUWIwu7ekL2FMPdqAmwbQegM7HeQ== + dependencies: + "@smithy/core" "^3.22.0" + "@smithy/middleware-endpoint" "^4.4.12" + "@smithy/middleware-stack" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/types" "^4.12.0" + "@smithy/util-stream" "^4.5.10" + tslib "^2.6.2" "@smithy/smithy-client@^4.6.3", "@smithy/smithy-client@^4.6.4": version "4.6.4" resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.6.4.tgz#3a66bb71c91dadf1806adab664ba2e164a1139ab" @@ -3656,19 +4304,6 @@ "@smithy/util-stream" "^4.5.6" tslib "^2.6.2" -"@smithy/smithy-client@^4.9.8": - version "4.9.8" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.9.8.tgz#a6845215c982cd6331f485c5d7f23bc0b4f498f3" - integrity sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA== - dependencies: - "@smithy/core" "^3.18.5" - "@smithy/middleware-endpoint" "^4.3.12" - "@smithy/middleware-stack" "^4.2.5" - "@smithy/protocol-http" "^5.3.5" - "@smithy/types" "^4.9.0" - "@smithy/util-stream" "^4.5.6" - tslib "^2.6.2" - "@smithy/types@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@smithy/types/-/types-1.2.0.tgz#9dc65767b0ee3d6681704fcc67665d6fc9b6a34e" @@ -3745,6 +4380,15 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/url-parser@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.8.tgz#b44267cd704abe114abcd00580acdd9e4acc1177" + integrity sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA== + dependencies: + "@smithy/querystring-parser" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/util-base64@^4.1.0": version "4.1.0" resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.1.0.tgz#5965026081d9aef4a8246f5702807570abe538b2" @@ -3856,6 +4500,16 @@ bowser "^2.11.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-browser@^4.3.26", "@smithy/util-defaults-mode-browser@^4.3.28": + version "4.3.28" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.28.tgz#36903b2c5ae11d41b1bb3e1f899a062389feb8ff" + integrity sha512-/9zcatsCao9h6g18p/9vH9NIi5PSqhCkxQ/tb7pMgRFnqYp9XUOyOlGPDMHzr8n5ih6yYgwJEY2MLEobUgi47w== + dependencies: + "@smithy/property-provider" "^4.2.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/util-defaults-mode-browser@^4.3.4": version "4.3.4" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.4.tgz#ed96651c32ac0de55b066fcb07a296837373212f" @@ -3902,6 +4556,19 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/util-defaults-mode-node@^4.2.29", "@smithy/util-defaults-mode-node@^4.2.31": + version "4.2.31" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.31.tgz#edb1297274e334af44783f4a3c78d2e890b328bb" + integrity sha512-JTvoApUXA5kbpceI2vuqQzRjeTbLpx1eoa5R/YEZbTgtxvIB7AQZxFJ0SEyfCpgPCyVV9IT7we+ytSeIB3CyWA== + dependencies: + "@smithy/config-resolver" "^4.4.6" + "@smithy/credential-provider-imds" "^4.2.8" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/smithy-client" "^4.11.1" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/util-defaults-mode-node@^4.2.6": version "4.2.6" resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.6.tgz#01b7ff4605f6f981972083fee22d036e5dc4be38" @@ -3942,6 +4609,15 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/util-endpoints@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.8.tgz#5650bda2adac989ff2e562606088c5de3dcb1b36" + integrity sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw== + dependencies: + "@smithy/node-config-provider" "^4.3.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/util-hex-encoding@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-1.1.0.tgz#b5ba919aa076a3fd5e93e368e34ae2b732fa2090" @@ -4052,6 +4728,15 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/util-retry@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.8.tgz#23f3f47baf0681233fd0c37b259e60e268c73b11" + integrity sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg== + dependencies: + "@smithy/service-error-classification" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/util-stream@^4.3.2": version "4.3.2" resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.3.2.tgz#7ce40c266b1e828d73c27e545959cda4f42fd61f" @@ -4066,6 +4751,20 @@ "@smithy/util-utf8" "^4.1.0" tslib "^2.6.2" +"@smithy/util-stream@^4.5.10": + version "4.5.10" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.10.tgz#3a7b56f0bdc3833205f80fea67d8e76756ea055b" + integrity sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g== + dependencies: + "@smithy/fetch-http-handler" "^5.3.9" + "@smithy/node-http-handler" "^4.4.8" + "@smithy/types" "^4.12.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + "@smithy/util-stream@^4.5.4": version "4.5.4" resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.4.tgz#bfc60e2714c2065b8e7e91ca921cc31c73efdbd4" @@ -4180,6 +4879,15 @@ "@smithy/types" "^4.9.0" tslib "^2.6.2" +"@smithy/util-waiter@^4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.8.tgz#35d7bd8b2be7a2ebc12d8c38a0818c501b73e928" + integrity sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg== + dependencies: + "@smithy/abort-controller" "^4.2.8" + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + "@smithy/uuid@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.0.0.tgz#a0fd3aa879d57e2f2fd6a7308deee864a412e1cf" @@ -4640,14 +5348,14 @@ arraybuffer.prototype.slice@^1.0.4: optionalDependencies: ioctl "^2.0.2" -"arsenal@git+https://github.com/scality/Arsenal#8.3.0-preview.1": - version "8.3.0-preview.1" - resolved "git+https://github.com/scality/Arsenal#00033b55fc22d8e58ab38211842fc0ccf41b9766" +"arsenal@git+https://github.com/scality/Arsenal#8.3.0": + version "8.3.0" + resolved "git+https://github.com/scality/Arsenal#7c6c73a01c37e241e0e054edbdc9e3a379c16a77" dependencies: - "@aws-sdk/client-kms" "^3.901.0" - "@aws-sdk/client-s3" "^3.901.0" - "@aws-sdk/credential-providers" "^3.901.0" - "@aws-sdk/lib-storage" "^3.937.0" + "@aws-sdk/client-kms" "^3.975.0" + "@aws-sdk/client-s3" "^3.975.0" + "@aws-sdk/credential-providers" "^3.975.0" + "@aws-sdk/lib-storage" "^3.975.0" "@azure/identity" "^4.13.0" "@azure/storage-blob" "^12.28.0" "@js-sdsl/ordered-set" "^4.4.2"