diff --git a/lib/Config.js b/lib/Config.js
index 70dfc682bf..376abceec5 100644
--- a/lib/Config.js
+++ b/lib/Config.js
@@ -545,23 +545,7 @@ function bucketNotifAssert(bucketNotifConfig) {
}
function parseIntegrityChecks(config) {
- const integrityChecks = {
- 'bucketPutACL': true,
- 'bucketPutCors': true,
- 'bucketPutEncryption': true,
- 'bucketPutLifecycle': true,
- 'bucketPutNotification': true,
- 'bucketPutObjectLock': true,
- 'bucketPutPolicy': true,
- 'bucketPutReplication': true,
- 'bucketPutVersioning': true,
- 'bucketPutWebsite': true,
- 'multiObjectDelete': true,
- 'objectPutACL': true,
- 'objectPutLegalHold': true,
- 'objectPutTagging': true,
- 'objectPutRetention': true,
- };
+ const integrityChecks = {};
if (config && config.integrityChecks) {
for (const method in integrityChecks) {
diff --git a/lib/api/api.js b/lib/api/api.js
index 058e63c2e6..16e3fc5448 100644
--- a/lib/api/api.js
+++ b/lib/api/api.js
@@ -301,15 +301,20 @@ const api = {
}
const buff = Buffer.concat(post, bodyLength);
+ return validateMethodChecksumNoChunking(request, buff, log)
+ .then(error => {
+ if (error) {
+ return next(error);
+ }
- const err = validateMethodChecksumNoChunking(request, buff, log);
- if (err) {
- return next(err);
- }
-
- // Convert array of post buffers into one string
- request.post = buff.toString();
- return next(null, userInfo, authorizationResults, streamingV4Params, infos);
+ // Convert array of post buffers into one string
+ request.post = buff.toString();
+ return next(null, userInfo, authorizationResults, streamingV4Params, infos);
+ })
+ .catch(error => {
+ log.error('error validating checksums', { error });
+ next(error);
+ });
});
return undefined;
},
diff --git a/lib/api/apiUtils/integrity/validateChecksums.js b/lib/api/apiUtils/integrity/validateChecksums.js
index 36864604cf..75d2abfa78 100644
--- a/lib/api/apiUtils/integrity/validateChecksums.js
+++ b/lib/api/apiUtils/integrity/validateChecksums.js
@@ -1,60 +1,258 @@
const crypto = require('crypto');
+const { Crc32 } = require('@aws-crypto/crc32');
+const { Crc32c } = require('@aws-crypto/crc32c');
+const { CrtCrc64Nvme } = require('@aws-sdk/crc64-nvme-crt');
const { errors: ArsenalErrors } = require('arsenal');
const { config } = require('../../../Config');
+const checksumedMethods = Object.freeze({
+ 'completeMultipartUpload': true,
+ 'multiObjectDelete': true,
+ 'bucketPutACL': true,
+ 'bucketPutCors': true,
+ 'bucketPutEncryption': true,
+ 'bucketPutLifecycle': true,
+ 'bucketPutLogging': true,
+ 'bucketPutNotification': true,
+ 'bucketPutPolicy': true,
+ 'bucketPutReplication': true,
+ 'bucketPutTagging': true,
+ 'bucketPutVersioning': true,
+ 'bucketPutWebsite': true,
+ 'objectPutACL': true,
+ 'objectPutLegalHold': true,
+ 'bucketPutObjectLock': true, // PutObjectLockConfiguration
+ 'objectPutRetention': true,
+ 'objectPutTagging': true,
+ 'objectRestore': true,
+});
+
const ChecksumError = Object.freeze({
MD5Mismatch: 'MD5Mismatch',
+ MD5Invalid: 'MD5Invalid',
+ XAmzMismatch: 'XAmzMismatch',
MissingChecksum: 'MissingChecksum',
+ AlgoNotSupported: 'AlgoNotSupported',
+ AlgoNotSupportedSDK: 'AlgoNotSupportedSDK',
+ MultipleChecksumTypes: 'MultipleChecksumTypes',
+ MissingCorresponding: 'MissingCorresponding',
+ InvalidAlgoValue: 'InvalidAlgoValue',
});
+const algorithms = {
+ 'crc64nvme': {
+ 'digest': async data => {
+ const input = Buffer.isBuffer(data) ? data : Buffer.from(data);
+ const crc = new CrtCrc64Nvme();
+ crc.update(input);
+ const result = await crc.digest();
+ return Buffer.from(result).toString('base64');
+ },
+ 'checkExpected': expected => {
+ if (typeof expected !== 'string') {
+ return false;
+ }
+ return expected.length === 12;
+ },
+ },
+ 'crc32': {
+ 'digest': data => {
+ const input = Buffer.isBuffer(data) ? data : Buffer.from(data);
+ return uint32ToBase64(new Crc32().update(input).digest() >>> 0);
+ },
+ 'checkExpected': expected => {
+ if (typeof expected !== 'string') {
+ return false;
+ }
+ return expected.length === 8;
+ },
+ },
+ 'crc32c': {
+ 'digest': data => {
+ const input = Buffer.isBuffer(data) ? data : Buffer.from(data);
+ return uint32ToBase64(new Crc32c().update(input).digest() >>> 0);
+ },
+ 'checkExpected': expected => {
+ if (typeof expected !== 'string') {
+ return false;
+ }
+ return expected.length === 8;
+ },
+ },
+ 'sha1': {
+ 'digest': data => {
+ const input = Buffer.isBuffer(data) ? data : Buffer.from(data);
+ return crypto.createHash('sha1').update(input).digest('base64');
+ },
+ 'checkExpected': expected => {
+ if (typeof expected !== 'string') {
+ return false;
+ }
+ return expected.length === 28;
+ },
+ },
+ 'sha256': {
+ 'digest': data => {
+ const input = Buffer.isBuffer(data) ? data : Buffer.from(data);
+ return crypto.createHash('sha256').update(input).digest('base64');
+ },
+ 'checkExpected': expected => {
+ if (typeof expected !== 'string') {
+ return false;
+ }
+ return expected.length === 44;
+ },
+ }
+};
+
+function uint32ToBase64(num) {
+ const buf = Buffer.alloc(4);
+ buf.writeUInt32BE(num, 0);
+ return buf.toString('base64');
+}
+
+async function validateXAmzChecksums(headers, body) {
+ const checksumHeaders = Object.keys(headers).filter(header => header.startsWith('x-amz-checksum-'));
+ const xAmzCheckumCnt = checksumHeaders.length;
+ if (xAmzCheckumCnt > 1) {
+ return { error: ChecksumError.MultipleChecksumTypes, details: { algorithms: checksumHeaders } };
+ }
+
+ if (xAmzCheckumCnt === 0 && 'x-amz-sdk-checksum-algorithm' in headers) {
+ return {
+ error: ChecksumError.MissingCorresponding,
+ details: { expected: headers['x-amz-sdk-checksum-algorithm'] }
+ };
+ } else if (xAmzCheckumCnt === 0) {
+ return { error: ChecksumError.MissingChecksum, details: null };
+ }
+
+ // No x-amz-sdk-checksum-algorithm we expect one x-amz-checksum-[crc64nvme, crc32, crc32C, sha1, sha256].
+ const algo = checksumHeaders[0].split('-')[3];
+ if (typeof algo !== 'string') {
+ return { error: ChecksumError.AlgoNotSupported, details: { algorithm: algo } };
+ }
+
+ if (algo in algorithms === false) {
+ return { error: ChecksumError.AlgoNotSupported, details: { algorithm: algo } };;
+ }
+
+ const expected = headers[`x-amz-checksum-${algo}`];
+ if (!algorithms[algo].checkExpected(expected)) {
+ return { error: ChecksumError.InvalidAlgoValue, details: { algorithm: algo, expected } };
+ }
+
+ const calculated = await algorithms[algo].digest(body);
+ if (expected !== calculated) {
+ return { error: ChecksumError.XAmzMismatch, details: { algorithm: algo, calculated, expected } };
+ }
+
+ // AWS checks x-amz-checksum- first and then x-amz-sdk-checksum-algorithm
+ if ('x-amz-sdk-checksum-algorithm' in headers) {
+ const sdkAlgo = headers['x-amz-sdk-checksum-algorithm'];
+ if (typeof sdkAlgo !== 'string') {
+ return { error: ChecksumError.AlgoNotSupportedSDK, details: { algorithm: sdkAlgo } };
+ }
+
+ const sdkLowerAlgo = sdkAlgo.toLowerCase();
+ if (sdkLowerAlgo in algorithms === false) {
+ return { error: ChecksumError.AlgoNotSupportedSDK, details: { algorithm: sdkAlgo } };
+ }
+
+ // If AWS there is a mismatch, AWS returns the same error as if the algo was invalid.
+ if (sdkLowerAlgo !== algo) {
+ return { error: ChecksumError.AlgoNotSupportedSDK, details: { algorithm: sdkAlgo } };
+ }
+ }
+
+ return null;
+}
+
/**
* validateChecksumsNoChunking - Validate the checksums of a request.
* @param {object} headers - http headers
* @param {Buffer} body - http request body
* @return {object} - error
*/
-function validateChecksumsNoChunking(headers, body) {
- if (headers && 'content-md5' in headers) {
+async function validateChecksumsNoChunking(headers, body) {
+ if (!headers) {
+ return { error: ChecksumError.MissingChecksum, details: null };
+ }
+
+ let md5Present = false;
+ if ('content-md5' in headers) {
+ if (typeof headers['content-md5'] !== 'string') {
+ return { error: ChecksumError.MD5Invalid, details: { expected: headers['content-md5'] } };
+ }
+
+ if (headers['content-md5'].length !== 24) {
+ return { error: ChecksumError.MD5Invalid, details: { expected: headers['content-md5'] } };
+ }
+
const md5 = crypto.createHash('md5').update(body).digest('base64');
if (md5 !== headers['content-md5']) {
return { error: ChecksumError.MD5Mismatch, details: { calculated: md5, expected: headers['content-md5'] } };
}
+ md5Present = true;
+ }
+
+ const err = await validateXAmzChecksums(headers, body);
+ if (err && err.error === ChecksumError.MissingChecksum && md5Present) {
+ // Don't return MissingChecksum if MD5 is present.
return null;
}
- return { error: ChecksumError.MissingChecksum, details: null };
+ return err;
}
-function defaultValidationFunc(request, body, log) {
- const err = validateChecksumsNoChunking(request.headers, body);
- if (err && err.error !== ChecksumError.MissingChecksum) {
+async function defaultValidationFunc(request, body, log) {
+ const err = await validateChecksumsNoChunking(request.headers, body);
+ if (!err) {
+ return null;
+ }
+
+ if (err.error !== ChecksumError.MissingChecksum) {
log.debug('failed checksum validation', { method: request.apiMethod }, err);
- return ArsenalErrors.BadDigest;
}
- return null;
+ switch (err.error) {
+ case ChecksumError.MissingChecksum:
+ return null;
+ case ChecksumError.XAmzMismatch: {
+ const algoUpper = err.details.algorithm.toUpperCase();
+ return ArsenalErrors.BadDigest.customizeDescription(
+ `The ${algoUpper} you specified did not match the calculated checksum.`
+ );
+ }
+ case ChecksumError.AlgoNotSupported:
+ return ArsenalErrors.InvalidRequest.customizeDescription(
+ 'The algorithm type you specified in x-amz-checksum- header is invalid.'
+ );
+ case ChecksumError.AlgoNotSupportedSDK:
+ return ArsenalErrors.InvalidRequest.customizeDescription(
+ 'Value for x-amz-sdk-checksum-algorithm header is invalid.'
+ );
+ case ChecksumError.MissingCorresponding:
+ return ArsenalErrors.InvalidRequest.customizeDescription(
+ 'x-amz-sdk-checksum-algorithm specified, but no corresponding x-amz-checksum-* ' +
+ 'or x-amz-trailer headers were found.'
+ );
+ case ChecksumError.MultipleChecksumTypes:
+ return ArsenalErrors.InvalidRequest.customizeDescription(
+ 'Expecting a single x-amz-checksum- header. Multiple checksum Types are not allowed.'
+ );
+ case ChecksumError.InvalidAlgoValue:
+ return ArsenalErrors.InvalidRequest.customizeDescription(
+ `Value for x-amz-checksum-${err.details.algorithm} header is invalid.`
+ );
+ case ChecksumError.MD5Invalid:
+ return ArsenalErrors.InvalidDigest;
+ default:
+ return ArsenalErrors.BadDigest;
+ }
}
-const methodValidationFunc = Object.freeze({
- 'bucketPutACL': defaultValidationFunc,
- 'bucketPutCors': defaultValidationFunc,
- 'bucketPutEncryption': defaultValidationFunc,
- 'bucketPutLifecycle': defaultValidationFunc,
- 'bucketPutNotification': defaultValidationFunc,
- 'bucketPutObjectLock': defaultValidationFunc,
- 'bucketPutPolicy': defaultValidationFunc,
- 'bucketPutReplication': defaultValidationFunc,
- 'bucketPutVersioning': defaultValidationFunc,
- 'bucketPutWebsite': defaultValidationFunc,
- // TODO: DeleteObjects requires a checksum. Should return an error if ChecksumError.MissingChecksum.
- 'multiObjectDelete': defaultValidationFunc,
- 'objectPutACL': defaultValidationFunc,
- 'objectPutLegalHold': defaultValidationFunc,
- 'objectPutTagging': defaultValidationFunc,
- 'objectPutRetention': defaultValidationFunc,
-});
-
/**
* validateMethodChecksumsNoChunking - Validate the checksums of a request.
* @param {object} request - http request
@@ -62,14 +260,13 @@ const methodValidationFunc = Object.freeze({
* @param {object} log - logger
* @return {object} - error
*/
-function validateMethodChecksumNoChunking(request, body, log) {
- if (config.integrityChecks[request.apiMethod]) {
- const validationFunc = methodValidationFunc[request.apiMethod];
- if (!validationFunc) {
- return null;
- }
+async function validateMethodChecksumNoChunking(request, body, log) {
+ if (config.integrityChecks[request.apiMethod] === false) {
+ return null;
+ }
- return validationFunc(request, body, log);
+ if (request.apiMethod in checksumedMethods) {
+ return await defaultValidationFunc(request, body, log);
}
return null;
@@ -79,4 +276,5 @@ module.exports = {
ChecksumError,
validateChecksumsNoChunking,
validateMethodChecksumNoChunking,
+ checksumedMethods,
};
diff --git a/package.json b/package.json
index 28ce78cdd2..8ceba83c7f 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,9 @@
"@aws-sdk/protocol-http": "^3.374.0",
"@aws-sdk/s3-request-presigner": "^3.901.0",
"@aws-sdk/signature-v4": "^3.374.0",
+ "@aws-crypto/crc32": "^5.2.0",
+ "@aws-crypto/crc32c": "^5.2.0",
+ "@aws-sdk/crc64-nvme-crt": "^3.989.0",
"@azure/storage-blob": "^12.28.0",
"@hapi/joi": "^17.1.1",
"@smithy/node-http-handler": "^3.0.0",
diff --git a/tests/functional/raw-node/test/xAmzChecksum.js b/tests/functional/raw-node/test/xAmzChecksum.js
new file mode 100644
index 0000000000..521efc7994
--- /dev/null
+++ b/tests/functional/raw-node/test/xAmzChecksum.js
@@ -0,0 +1,319 @@
+const assert = require('assert');
+const HttpRequestAuthV4 = require('../utils/HttpRequestAuthV4');
+
+const bucket = 'xxx';
+const objectKey = 'key';
+const objData = Buffer.alloc(1, 'a');
+
+const authCredentials = {
+ accessKey: 'accessKey1',
+ secretKey: 'verySecretKey1',
+};
+
+const itSkipIfAWS = process.env.AWS_ON_AIR ? it.skip : it;
+
+describe('Test x-amz-checksums', () => {
+ const algos = [
+ { name: 'CRC32', objDataDigest: '6Le+Qw==', validWrong: 'AAAAAA==' },
+ { name: 'CRC32C', objDataDigest: 'wdBDMA==', validWrong: 'AAAAAA==' },
+ { name: 'CRC64NVME', objDataDigest: 'jC+ERbTL/Dw=', validWrong: 'AAAAAAAAAAA=' },
+ { name: 'SHA1', objDataDigest: 'hvfkN/qlp/zhXR3cuerq6jd2Z7g=', validWrong: 'AAAAAAAAAAAAAAAAAAAAAAAAAAA=' },
+ {
+ name: 'SHA256', objDataDigest: 'ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=',
+ validWrong: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
+ },
+ ];
+ const methods = [
+ {
+ Name: 'CompleteMultipartupload',
+ Query: 'uploadId=77a4ce46b9bf4ea69d9e0cc3f0bb1aae',
+ Key: objectKey,
+ HTTPMethod: 'POST',
+ },
+ {
+ Name: 'DeleteObjects',
+ Query: 'delete',
+ Key: '',
+ HTTPMethod: 'POST',
+ },
+ {
+ Name: 'PutBucketACL',
+ Query: 'acl',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketACL',
+ Query: 'cors',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketEncryption',
+ Query: 'encryption',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketLifecycke',
+ Query: 'lifecycle',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketLogging',
+ Query: 'logging',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketNotification',
+ Query: 'notification',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketPolicy',
+ Query: 'policy',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketReplication',
+ Query: 'replication',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketTagging',
+ Query: 'tagging',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketVersioning',
+ Query: 'versioning',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutBucketWebsite',
+ Query: 'website',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutObjectACL',
+ Query: 'acl',
+ Key: objectKey,
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutObjectLegalHold',
+ Query: 'legal-hold',
+ Key: objectKey,
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutObjectLockConfiguration',
+ Query: 'object-lock',
+ Key: '',
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutObjectRetention',
+ Query: 'retention',
+ Key: objectKey,
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'PutObjectTagging',
+ Query: 'tagging',
+ Key: objectKey,
+ HTTPMethod: 'PUT',
+ },
+ {
+ Name: 'RestoreObject',
+ Query: 'restore',
+ Key: objectKey,
+ HTTPMethod: 'POST',
+ },
+ ];
+
+ const doTest = (headers, method, resHTTPStatus, errMsgs, done) => {
+ const url = `http://localhost:8000/${bucket}/${method.Key}?${method.Query}`;
+ const req = new HttpRequestAuthV4(
+ url,
+ Object.assign(
+ {
+ method: method.HTTPMethod,
+ headers: {
+ 'x-amz-content-sha256': 'ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=',
+ 'content-length': objData.length,
+ ...headers,
+ },
+ },
+ authCredentials
+ ),
+ res => {
+ let data = '';
+ res.on('data', chunk => {
+ data += chunk;
+ });
+ res.on('end', () => {
+ assert.strictEqual(res.statusCode, resHTTPStatus);
+ for (const errMsg of errMsgs) {
+ assert(data.includes(errMsg), `missing ${errMsg} in "${data}"`);
+ }
+ done();
+ });
+ }
+ );
+
+ req.on('error', err => {
+ assert.ifError(err);
+ });
+
+
+ req.once('drain', () => {
+ req.end();
+ });
+
+ req.write(objData, err => {
+ assert.ifError(err);
+ req.end();
+ });
+ };
+
+ for (const algo of algos) {
+ for (const method of methods) {
+ itSkipIfAWS(
+ `${method.Name} should respond BadDigest ` +
+ `with invalid x-amz-checksum-${algo.name.toLowerCase()}`, done => {
+ const headers = {
+ [`x-amz-checksum-${algo.name.toLowerCase()}`]: algo.validWrong,
+ };
+ doTest(headers, method, 400, ['BadDigest'], done);
+ });
+ }
+ }
+
+ itSkipIfAWS('should respond InvalidRequest with multiple x-amz-checksum-', done => {
+ const headers = {
+ [`x-amz-checksum-${algos[0].name.toLowerCase()}`]: algos[0].objDataDigest,
+ [`x-amz-checksum-${algos[1].name.toLowerCase()}`]: algos[1].objDataDigest,
+ };
+ doTest(
+ headers,
+ methods[0],
+ 400,
+ ['InvalidRequest', 'Expecting a single x-amz-checksum- header. Multiple checksum Types are not allowed.'],
+ done,
+ );
+ });
+
+ itSkipIfAWS('should respond InvalidRequest with if invalid x-amz-checksum- algorithm', done => {
+ const headers = {
+ ['x-amz-checksum-BAD']: algos[0].objDataDigest,
+ };
+ doTest(
+ headers,
+ methods[0],
+ 400,
+ ['InvalidRequest', 'The algorithm type you specified in x-amz-checksum- header is invalid'],
+ done,
+ );
+ });
+
+ itSkipIfAWS(
+ 'should respond InvalidRequest if the value of x-amz-sdk-checksum-algorithm is invalid', done => {
+ const headers = {
+ 'x-amz-sdk-checksum-algorithm': 'BAD',
+ [`x-amz-checksum-${algos[0].name.toLowerCase()}`]: algos[0].objDataDigest,
+ };
+ doTest(
+ headers,
+ methods[0],
+ 400,
+ ['InvalidRequest', 'Value for x-amz-sdk-checksum-algorithm header is invalid.'],
+ done,
+ );
+ });
+
+ itSkipIfAWS('should respond InvalidRequest with if invalid x-amz-checksum- value', done => {
+ const headers = {
+ ['x-amz-checksum-sha256']: 'BAD',
+ };
+ doTest(
+ headers,
+ methods[0],
+ 400,
+ ['InvalidRequest', 'Value for x-amz-checksum-sha256 header is invalid.'],
+ done,
+ );
+ });
+
+ itSkipIfAWS(
+ 'should respond InvalidRequest with if missing x-amz-checksum- for x-amz-sdk-checksum-algorithm ', done => {
+ const headers = {
+ 'x-amz-sdk-checksum-algorithm': 'SHA1',
+ };
+ doTest(
+ headers,
+ methods[0],
+ 400,
+ ['InvalidRequest', 'x-amz-sdk-checksum-algorithm specified, but no corresponding x-amz-checksum-* ' +
+ 'or x-amz-trailer headers were found.'],
+ done,
+ );
+ });
+
+ for (const algo of algos) {
+ for (const method of methods) {
+ itSkipIfAWS(
+ `${method.Name} should not respond BadDigest if ` +
+ `x-amz-checksum-${algo.name.toLowerCase()} is correct`, done => {
+ const url = `http://localhost:8000/${bucket}/${method.Key}?${method.Query}`;
+ const req = new HttpRequestAuthV4(
+ url,
+ Object.assign(
+ {
+ method: method.HTTPMethod,
+ headers: {
+ 'x-amz-content-sha256': 'ypeBEsobvcr6wjGzmiPcTaeG7/gUfE5yuYB3ha/uSLs=',
+ 'content-length': objData.length,
+ 'x-amz-sdk-checksum-algorithm': algo.name,
+ [`x-amz-checksum-${algo.name.toLowerCase()}`]: algo.objDataDigest,
+ },
+ },
+ authCredentials
+ ),
+ res => {
+ let data = '';
+ res.on('data', chunk => {
+ data += chunk;
+ });
+ res.on('end', () => {
+ assert(!data.includes('BadDigest'));
+ done();
+ });
+ }
+ );
+
+ req.on('error', err => {
+ assert.ifError(err);
+ });
+
+
+ req.once('drain', () => {
+ req.end();
+ });
+
+ req.write(objData, err => {
+ assert.ifError(err);
+ req.end();
+ });
+ });
+ }
+ }
+});
diff --git a/tests/unit/Config.js b/tests/unit/Config.js
index 37afe8a542..f032dd91a3 100644
--- a/tests/unit/Config.js
+++ b/tests/unit/Config.js
@@ -920,7 +920,7 @@ describe('Config', () => {
});
describe('parse integrity checks', () => {
- it('should replace default values with new values', () => {
+ it('should insert values into integrityCheck object', () => {
const newConfig = {
integrityChecks: {
'bucketPutACL': false,
@@ -933,11 +933,15 @@ describe('Config', () => {
'bucketPutReplication': false,
'bucketPutVersioning': false,
'bucketPutWebsite': false,
+ 'bucketPutLogging': false,
+ 'bucketPutTagging': false,
'multiObjectDelete': false,
'objectPutACL': false,
'objectPutLegalHold': false,
'objectPutTagging': false,
'objectPutRetention': false,
+ 'objectRestore': false,
+ 'completeMultipartUpload': false,
},
};
diff --git a/tests/unit/api/api.js b/tests/unit/api/api.js
index 78626bd651..a64c120b7b 100644
--- a/tests/unit/api/api.js
+++ b/tests/unit/api/api.js
@@ -138,7 +138,7 @@ describe('api.callApiMethod', () => {
it(`should return BadDigest for ${method} when bad MD5 checksum is provided`, done => {
const body = '';
const headers = {
- 'content-md5': 'badchecksum123=', // Invalid MD5
+ 'content-md5': '1B2M2Y8AsgTpgAmY7PhCfg==', // Wrong MD5
'content-length': body.length.toString()
};
@@ -160,6 +160,32 @@ describe('api.callApiMethod', () => {
});
});
+ methodsWithChecksumValidation.forEach(method => {
+ it(`should return InvalidDigest for ${method} when invalid MD5 checksum is provided`, done => {
+ const body = '';
+ const headers = {
+ 'content-md5': 'x', // Invalid MD5
+ 'content-length': body.length.toString()
+ };
+
+ const requestWithBody = new DummyRequest({
+ headers,
+ query: {},
+ socket: { remoteAddress: '127.0.0.1', destroy: sandbox.stub() }
+ }, body);
+
+ sandbox.stub(api, method).callsFake(() => {
+ done(new Error(`${method} was called despite bad checksum`));
+ });
+
+ api.callApiMethod(method, requestWithBody, response, log, err => {
+ assert(err, `Expected error for ${method} with bad checksum`);
+ assert(err.is.InvalidDigest, `Expected InvalidDigest error for ${method}, got: ${err.code}`);
+ done();
+ });
+ });
+ });
+
methodsWithChecksumValidation.forEach(method => {
it(`should succeed for ${method} when correct MD5 checksum is provided`, done => {
const body = '';
diff --git a/tests/unit/api/apiUtils/integrity/validateChecksums.js b/tests/unit/api/apiUtils/integrity/validateChecksums.js
index b3f2d89b99..9a7d5ce1c6 100644
--- a/tests/unit/api/apiUtils/integrity/validateChecksums.js
+++ b/tests/unit/api/apiUtils/integrity/validateChecksums.js
@@ -2,35 +2,35 @@ const assert = require('assert');
const crypto = require('crypto');
const sinon = require('sinon');
-const { validateChecksumsNoChunking, ChecksumError, validateMethodChecksumNoChunking } =
+const { validateChecksumsNoChunking, ChecksumError, validateMethodChecksumNoChunking, checksumedMethods } =
require('../../../../../lib/api/apiUtils/integrity/validateChecksums');
const { errors: ArsenalErrors } = require('arsenal');
const { config } = require('../../../../../lib/Config');
-describe('validateChecksumsNoChunking', () => {
+describe('validateChecksumsNoChunking MD5', () => {
describe('with valid Content-MD5 header', () => {
- it('should return null when MD5 matches the body content', () => {
+ it('should return null when MD5 matches the body content', async () => {
const body = 'Hello, World!';
const expectedMd5 = crypto.createHash('md5').update(body, 'utf8').digest('base64');
const headers = {
'content-md5': expectedMd5
};
- const result = validateChecksumsNoChunking(headers, body);
+ const result = await validateChecksumsNoChunking(headers, body);
assert.strictEqual(result, null);
});
});
describe('with MD5 mismatch', () => {
- it('should return MD5Mismatch error when checksums do not match', () => {
+ it('should return MD5Mismatch error when checksums do not match', async () => {
const body = 'Hello, World!';
- const wrongMd5 = 'wrongchecksum123=';
+ const wrongMd5 = '1B2M2Y8AsgTpgAmY7PhCfg==';
const expectedMd5 = crypto.createHash('md5').update(body, 'utf8').digest('base64');
const headers = {
'content-md5': wrongMd5
};
- const result = validateChecksumsNoChunking(headers, body);
+ const result = await validateChecksumsNoChunking(headers, body);
assert.strictEqual(result.error, ChecksumError.MD5Mismatch);
assert.strictEqual(result.details.calculated, expectedMd5);
assert.strictEqual(result.details.expected, wrongMd5);
@@ -38,89 +38,245 @@ describe('validateChecksumsNoChunking', () => {
});
describe('without Content-MD5 header', () => {
- it('should return MissingChecksum error when no content-md5 header is present', () => {
+ it('should return MissingChecksum error when no content-md5 header is present', async () => {
const body = 'Hello, World!';
const headers = {};
- const result = validateChecksumsNoChunking(headers, body);
+ const result = await validateChecksumsNoChunking(headers, body);
assert.strictEqual(result.error, ChecksumError.MissingChecksum);
assert.strictEqual(result.details, null);
});
- it('should return MissingChecksum error when headers object is undefined', () => {
+ it('should return MissingChecksum error when headers object is undefined', async () => {
const body = 'Hello, World!';
const headers = undefined;
- const result = validateChecksumsNoChunking(headers, body);
+ const result = await validateChecksumsNoChunking(headers, body);
assert.strictEqual(result.error, ChecksumError.MissingChecksum);
assert.strictEqual(result.details, null);
});
-
- it('should return MD5Mismatch error when content-md5 header is undefined', () => {
+
+ it('should return MD5Invalid error when content-md5 header is undefined', async () => {
const body = 'Hello, World!';
const headers = {
'content-type': 'application/json',
'content-md5': undefined
};
- const calculatedMD5 = crypto.createHash('md5').update(body, 'utf8').digest('base64');
- const result = validateChecksumsNoChunking(headers, body);
- assert.strictEqual(result.error, ChecksumError.MD5Mismatch);
- assert.strictEqual(result.details.calculated, calculatedMD5);
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.MD5Invalid);
assert.strictEqual(result.details.expected, undefined);
});
- it('should return MD5Mismatch error when content-md5 header is null', () => {
+ it('should return MD5Invalid error when content-md5 header is null', async () => {
const body = 'Hello, World!';
const headers = {
'content-type': 'application/json',
'content-md5': null
};
- const calculatedMD5 = crypto.createHash('md5').update(body, 'utf8').digest('base64');
- const result = validateChecksumsNoChunking(headers, body);
- assert.strictEqual(result.error, ChecksumError.MD5Mismatch);
- assert.strictEqual(result.details.calculated, calculatedMD5);
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.MD5Invalid);
assert.strictEqual(result.details.expected, null);
});
- it('should return MD5Mismatch error when content-md5 header is empty string', () => {
+ it('should return MD5Invalid error when content-md5 header is empty string', async () => {
const body = 'Hello, World!';
const headers = {
'content-type': 'application/json',
'content-md5': ''
};
- const calculatedMD5 = crypto.createHash('md5').update(body, 'utf8').digest('base64');
- const result = validateChecksumsNoChunking(headers, body);
- assert.strictEqual(result.error, ChecksumError.MD5Mismatch);
- assert.strictEqual(result.details.calculated, calculatedMD5);
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.MD5Invalid);
assert.strictEqual(result.details.expected, '');
});
});
});
+describe('validateChecksumsNoChunking CRC32, CRC32C, SHA1, SHA256, CRC64NVME', () => {
+ const algos = [
+ { name: 'crc32', data: 'crc32 data', digest: 'xCSBHA==', invalid: 'x', validWrong: 'AAAAAA==' },
+ { name: 'crc32c', data: 'crc32c data', digest: 'oEjFGQ==', invalid: 'x', validWrong: 'AAAAAA==' },
+ {
+ name: 'sha1', data: 'sha1 data', digest: 'roREeoJPb6jNZz8PPT+/KtdXm0o=', invalid: 'x',
+ validWrong: 'AAAAAAAAAAAAAAAAAAAAAAAAAAA='
+ },
+ {
+ name: 'sha256', data: 'sha256 data',
+ digest: 'jS/UevcoKxbM33kmPFujS72ior/9/i374VmGvbTAwAc=', invalid: 'x',
+ validWrong: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='
+ },
+ {
+ name: 'crc64nvme', data: 'crc64nvme data', digest: 'Tpz+dGVqyhg=', invalid: 'x',
+ validWrong: 'AAAAAAAAAAA='
+ },
+ ];
+
+ for (const algo of algos) {
+ it(`should return Mismatch error when wrong x-amz-checksum-${algo.name}`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ [`x-amz-checksum-${algo.name}`]: algo.validWrong,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.XAmzMismatch);
+ assert.strictEqual(result.details.calculated, algo.digest);
+ assert.strictEqual(result.details.expected, algo.validWrong);
+ });
+ }
+
+ for (const algo of algos) {
+ it(`should return InvalidValue error when invalid x-amz-checksum-${algo.name}`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ [`x-amz-checksum-${algo.name}`]: algo.invalid,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.InvalidAlgoValue);
+ assert.strictEqual(result.details.algorithm, algo.name);
+ assert.strictEqual(result.details.expected, algo.invalid);
+ });
+ }
+
+ for (const algo of algos) {
+ it(`should return null when x-amz-checksum-${algo.name} match`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ [`x-amz-checksum-${algo.name}`]: algo.digest,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.ifError(result);
+ });
+ }
+
+ for (const algo of algos) {
+ it(`should return error if missing corresponding x-amz-checksum-${algo.name}`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-sdk-checksum-algorithm': algo.name,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.MissingCorresponding);
+ assert.strictEqual(result.details.expected, algo.name);
+ });
+ }
+
+ for (const algo of algos) {
+ it(`should return Mismatch error when wrong x-amz-checksum-${algo.name} x-amz-sdk-checksum case`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-sdk-checksum-algorithm': algo.name,
+ [`x-amz-checksum-${algo.name}`]: algo.validWrong,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.strictEqual(result.error, ChecksumError.XAmzMismatch);
+ assert.strictEqual(result.details.calculated, algo.digest);
+ assert.strictEqual(result.details.expected, algo.validWrong);
+ });
+ }
+
+ for (const algo of algos) {
+ it(`should return null when x-amz-checksum-${algo.name} match x-amz-sdk-checksum case`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-sdk-checksum-algorithm': algo.name,
+ [`x-amz-checksum-${algo.name}`]: algo.digest,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.ifError(result);
+ });
+ }
+
+ for (const algo of algos) {
+ it(`should return null when x-amz-checksum-${algo.name} match, x-amz-sdk-checksum uppercase`, async () => {
+ const body = algo.data;
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-sdk-checksum-algorithm': algo.name.toUpperCase(),
+ [`x-amz-checksum-${algo.name}`]: algo.digest,
+ };
+ const result = await validateChecksumsNoChunking(headers, body);
+ assert.ifError(result);
+ });
+ }
+
+ it('should return error MultipleChecksumTypes if multiple x-amz-checksum- present', async () => {
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-checksum-sha1': '',
+ 'x-amz-checksum-sha256': '',
+ };
+ const result = await validateChecksumsNoChunking(headers, undefined);
+ assert.strictEqual(result.error, ChecksumError.MultipleChecksumTypes);
+ assert.deepStrictEqual(result.details.algorithms, ['x-amz-checksum-sha1', 'x-amz-checksum-sha256']);
+ });
+
+ for (const algo of algos) {
+ it('should return error AlgoNotSupported if x-amz-sdk-checksum-algorithm algo not supported', async () => {
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-sdk-checksum-algorithm': 'BAD',
+ [`x-amz-checksum-${algo.name}`]: algo.digest,
+ };
+ const result = await validateChecksumsNoChunking(headers, algo.data);
+ assert.strictEqual(result.error, ChecksumError.AlgoNotSupportedSDK);
+ assert.strictEqual(result.details.algorithm, 'BAD');
+ });
+ }
+
+ for (const algo of algos) {
+ it('should return error AlgoNotSupported if x-amz-sdk-checksum-algorithm not a string', async () => {
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-sdk-checksum-algorithm': 1234,
+ [`x-amz-checksum-${algo.name}`]: algo.digest,
+ };
+ const result = await validateChecksumsNoChunking(headers, algo.data);
+ assert.strictEqual(result.error, ChecksumError.AlgoNotSupportedSDK);
+ assert.strictEqual(result.details.algorithm, 1234);
+ });
+ }
+
+ it('should return error AlgoNotSupported if x-amz-checksum- algo not supported', async () => {
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-checksum-BAD': 'DIGEST',
+ };
+ const result = await validateChecksumsNoChunking(headers, undefined);
+ assert.strictEqual(result.error, ChecksumError.AlgoNotSupported);
+ assert.strictEqual(result.details.algorithm, 'BAD');
+ });
+
+ it('should return error AlgoNotSupported if x-amz-checksum- algo is not a string', async () => {
+ const headers = {
+ 'content-type': 'application/json',
+ 'x-amz-checksum-1234': 1234,
+ };
+ const result = await validateChecksumsNoChunking(headers, undefined);
+ assert.strictEqual(result.error, ChecksumError.AlgoNotSupported);
+ assert.strictEqual(result.details.algorithm, '1234');
+ });
+
+ it('should return error MissingChecksum if no x-amz-checksum- header', async () => {
+ const headers = {
+ 'content-type': 'application/json',
+ };
+ const result = await validateChecksumsNoChunking(headers, undefined);
+ assert.strictEqual(result.error, ChecksumError.MissingChecksum);
+ assert.strictEqual(result.details, null);
+ });
+});
+
describe('validateMethodChecksumNoChunking', () => {
let sandbox;
let originalIntegrityChecks;
-
- const supportedMethods = [
- 'bucketPutACL',
- 'bucketPutCors',
- 'bucketPutEncryption',
- 'bucketPutLifecycle',
- 'bucketPutNotification',
- 'bucketPutObjectLock',
- 'bucketPutPolicy',
- 'bucketPutReplication',
- 'bucketPutVersioning',
- 'bucketPutWebsite',
- 'multiObjectDelete',
- 'objectPutACL',
- 'objectPutLegalHold',
- 'objectPutTagging',
- 'objectPutRetention'
- ];
beforeEach(() => {
sandbox = sinon.createSandbox();
@@ -133,12 +289,12 @@ describe('validateMethodChecksumNoChunking', () => {
});
describe('when checksum mismatches', () => {
- supportedMethods.forEach(method => {
- it(`should return BadDigest error for ${method} when checksum mismatch`, () => {
+ Object.keys(checksumedMethods).forEach(method => {
+ it(`should return BadDigest error for ${method} when checksum mismatch`, async () => {
config.integrityChecks[method] = true;
-
+
const body = 'Hello, World!';
- const wrongMd5 = 'wrongchecksum123=';
+ const wrongMd5 = '1B2M2Y8AsgTpgAmY7PhCfg==';
const request = {
apiMethod: method,
headers: {
@@ -147,19 +303,42 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.deepStrictEqual(result, ArsenalErrors.BadDigest, 'Expected BadDigest error');
assert(log.debug.calledOnce);
});
});
});
+ describe('when checksum mismatches', () => {
+ Object.keys(checksumedMethods).forEach(method => {
+ it(`should return InvalidDigest error for ${method} when checksum mismatch`, async () => {
+ config.integrityChecks[method] = true;
+
+ const body = 'Hello, World!';
+ const wrongMd5 = 'wrongchecksum123=';
+ const request = {
+ apiMethod: method,
+ headers: {
+ 'content-md5': wrongMd5
+ }
+ };
+ const log = { debug: sandbox.stub() };
+
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
+ assert.deepStrictEqual(result, ArsenalErrors.InvalidDigest, 'Expected BadDigest error');
+ assert(log.debug.calledOnce);
+ });
+ });
+ });
+
describe('when no checksum is provided', () => {
- supportedMethods.forEach(method => {
- it(`should return null for ${method} when no checksum is provided`, () => {
+ Object.keys(checksumedMethods).forEach(method => {
+ it(`should return null for ${method} when no checksum is provided`, async () => {
config.integrityChecks[method] = true;
-
+
const body = 'Hello, World!';
const request = {
apiMethod: method,
@@ -167,8 +346,8 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.strictEqual(result, null);
assert(log.debug.notCalled);
});
@@ -176,10 +355,10 @@ describe('validateMethodChecksumNoChunking', () => {
});
describe('when checksum matches', () => {
- supportedMethods.forEach(method => {
- it(`should return null for ${method} when checksum matches`, () => {
+ Object.keys(checksumedMethods).forEach(method => {
+ it(`should return null for ${method} when checksum matches`, async () => {
config.integrityChecks[method] = true;
-
+
const body = 'Hello, World!';
const correctMd5 = crypto.createHash('md5').update(body, 'utf8').digest('base64');
const request = {
@@ -190,8 +369,8 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.strictEqual(result, null);
assert(log.debug.notCalled);
});
@@ -199,10 +378,10 @@ describe('validateMethodChecksumNoChunking', () => {
});
describe('when method is disabled in config', () => {
- supportedMethods.forEach(method => {
- it(`should return null for ${method} when disabled, even with checksum mismatch`, () => {
+ Object.keys(checksumedMethods).forEach(method => {
+ it(`should return null for ${method} when disabled, even with checksum mismatch`, async () => {
config.integrityChecks[method] = false;
-
+
const body = 'Hello, World!';
const wrongMd5 = 'wrongchecksum123=';
const request = {
@@ -213,8 +392,8 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.strictEqual(result, null);
assert(log.debug.notCalled);
});
@@ -222,10 +401,10 @@ describe('validateMethodChecksumNoChunking', () => {
});
describe('when method is not in validation function mapping', () => {
- it('should return null for unsupported method even when enabled in config', () => {
+ it('should return null for unsupported method even when enabled in config', async () => {
const unsupportedMethod = 'someUnsupportedMethod';
config.integrityChecks[unsupportedMethod] = true;
-
+
const body = 'Hello, World!';
const wrongMd5 = 'wrongchecksum123=';
const request = {
@@ -236,15 +415,15 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.strictEqual(result, null);
assert(log.debug.notCalled);
});
});
describe('edge cases', () => {
- it('should return null when request has no apiMethod', () => {
+ it('should return null when request has no apiMethod', async () => {
const body = 'Hello, World!';
const request = {
headers: {
@@ -253,12 +432,12 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.strictEqual(result, null);
});
- it('should return null when request apiMethod is undefined in config', () => {
+ it('should return null when request apiMethod is undefined in config', async () => {
const body = 'Hello, World!';
const request = {
apiMethod: 'nonExistentMethod',
@@ -268,8 +447,8 @@ describe('validateMethodChecksumNoChunking', () => {
};
const log = { debug: sandbox.stub() };
- const result = validateMethodChecksumNoChunking(request, body, log);
-
+ const result = await validateMethodChecksumNoChunking(request, body, log);
+
assert.strictEqual(result, null);
});
});
diff --git a/yarn.lock b/yarn.lock
index 71f1438d19..603a5fe84b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -19,7 +19,7 @@
"@aws-sdk/types" "^3.222.0"
tslib "^1.11.1"
-"@aws-crypto/crc32@5.2.0":
+"@aws-crypto/crc32@5.2.0", "@aws-crypto/crc32@^5.2.0":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1"
integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==
@@ -28,7 +28,7 @@
"@aws-sdk/types" "^3.222.0"
tslib "^2.6.2"
-"@aws-crypto/crc32c@5.2.0":
+"@aws-crypto/crc32c@5.2.0", "@aws-crypto/crc32c@^5.2.0":
version "5.2.0"
resolved "https://registry.yarnpkg.com/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz#4e34aab7f419307821509a98b9b08e84e0c1917e"
integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==
@@ -773,6 +773,36 @@
"@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
+"@aws-sdk/core@^3.973.13":
+ version "3.973.13"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.973.13.tgz#9a6d62be67d6f7e907cf21b18785bef131595228"
+ integrity sha512-eCFiLyBhJR7c/i8hZOETdzj2wsLFzi2L/w9/jajOgwmGqO8xrUExqkTZqdjROkwU62owqeqSuw4sIzlCv1E/ww==
+ dependencies:
+ "@aws-sdk/types" "^3.973.2"
+ "@aws-sdk/xml-builder" "^3.972.6"
+ "@smithy/core" "^3.23.4"
+ "@smithy/node-config-provider" "^4.3.9"
+ "@smithy/property-provider" "^4.2.9"
+ "@smithy/protocol-http" "^5.3.9"
+ "@smithy/signature-v4" "^5.3.9"
+ "@smithy/smithy-client" "^4.11.7"
+ "@smithy/types" "^4.12.1"
+ "@smithy/util-base64" "^4.3.1"
+ "@smithy/util-middleware" "^4.2.9"
+ "@smithy/util-utf8" "^4.2.1"
+ tslib "^2.6.2"
+
+"@aws-sdk/crc64-nvme-crt@^3.989.0":
+ version "3.997.0"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme-crt/-/crc64-nvme-crt-3.997.0.tgz#a4c4cd66c2b74c962b6dfec2c875b0a8f20344df"
+ integrity sha512-CbJZJWq3XwAjq+Ui8a1rjUhzKcRu/zBvjN/x/WctHvmDCkY+1JP5DrEIrRRIrkGzGMQo7V+WY4MyQIpA6kz9mA==
+ dependencies:
+ "@aws-sdk/crc64-nvme" "^3.972.1"
+ "@aws-sdk/crt-loader" "^3.972.12"
+ "@smithy/types" "^4.12.1"
+ "@smithy/util-utf8" "^4.2.1"
+ 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"
@@ -781,6 +811,14 @@
"@smithy/types" "^4.12.0"
tslib "^2.6.2"
+"@aws-sdk/crc64-nvme@^3.972.1":
+ version "3.972.1"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.1.tgz#c32bd754b8d0240e68d8768e0332b5512360114c"
+ integrity sha512-CmT9RrQol36hUdvp4dk+BRV47JBRIE+I46yAOKyb/SoMH7mKOBwk6jUpFZhF8B+LCnWnefnM6jT/WsfQ5M1kCQ==
+ dependencies:
+ "@smithy/types" "^4.12.1"
+ 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"
@@ -1281,6 +1319,15 @@
"@smithy/types" "^4.12.0"
tslib "^2.6.2"
+"@aws-sdk/crt-loader@^3.972.12":
+ version "3.972.12"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/crt-loader/-/crt-loader-3.972.12.tgz#611c7ad9ad0314581e1a6daaa2a973f4f0fd20e9"
+ integrity sha512-/QiXRpHciU5gVchd0+C09SyN0WWZp7NS+cJXHU6YkuZtdfjRdgtuaZxJY0IJkkxsWamAzR8IWBVhoLd+Kc1CFA==
+ dependencies:
+ "@aws-sdk/util-user-agent-node" "^3.972.12"
+ aws-crt "^1.24.0"
+ tslib "^2.6.2"
+
"@aws-sdk/hash-node@^3.110.0":
version "3.374.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.374.0.tgz#fad2ddb51ae7091b91ed1308836fe3385d128f9e"
@@ -1651,6 +1698,19 @@
"@smithy/types" "^4.9.0"
tslib "^2.6.2"
+"@aws-sdk/middleware-user-agent@^3.972.13":
+ version "3.972.13"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.13.tgz#03df64182ce3c10331ff107e9947b9132c2777a0"
+ integrity sha512-p1kVYbzBxRmhuOHoL/ANJPCedqUxnVgkEjxPoxt5pQv/yzppHM7aBWciYEE9TZY59M421D3GjLfZIZBoEFboVQ==
+ dependencies:
+ "@aws-sdk/core" "^3.973.13"
+ "@aws-sdk/types" "^3.973.2"
+ "@aws-sdk/util-endpoints" "^3.996.1"
+ "@smithy/core" "^3.23.4"
+ "@smithy/protocol-http" "^5.3.9"
+ "@smithy/types" "^4.12.1"
+ 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"
@@ -2082,6 +2142,14 @@
"@smithy/types" "^4.12.0"
tslib "^2.6.2"
+"@aws-sdk/types@^3.973.2":
+ version "3.973.2"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.2.tgz#4d46878bbff7dd5ccd162394943baa8004098f3a"
+ integrity sha512-maTZwGsALtnAw4TJr/S6yERAosTwPduu0XhUV+SdbvRZtCOgSgk1ttL2R0XYzvkYSpvbtJocn77tBXq2AKglBw==
+ dependencies:
+ "@smithy/types" "^4.12.1"
+ 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"
@@ -2147,6 +2215,17 @@
"@smithy/util-endpoints" "^3.2.8"
tslib "^2.6.2"
+"@aws-sdk/util-endpoints@^3.996.1":
+ version "3.996.1"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.996.1.tgz#1fd0f3800c899f80be067318795301b85412484d"
+ integrity sha512-7cJyd+M5i0IoqWkJa1KFx8KNCGIx+Ywu+lT53KpqX7ReVwz03DCKUqvZ/y65vdKwo9w9/HptSAeLDluO5MpGIg==
+ dependencies:
+ "@aws-sdk/types" "^3.973.2"
+ "@smithy/types" "^4.12.1"
+ "@smithy/url-parser" "^4.2.9"
+ "@smithy/util-endpoints" "^3.2.9"
+ 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"
@@ -2248,7 +2327,18 @@
"@smithy/types" "^4.12.0"
tslib "^2.6.2"
-"@aws-sdk/util-utf8-browser@^3.0.0":
+"@aws-sdk/util-user-agent-node@^3.972.12":
+ version "3.972.12"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.12.tgz#81e4281ab19b4d547b773e06b89bd08c6534c857"
+ integrity sha512-c1n3wBK6te+Vd9qU86nF8AsYuiBsxLn0AADGWyFX7vEADr3btaAg5iPQT6GYj6rvzSOEVVisvaAatOWInlJUbQ==
+ dependencies:
+ "@aws-sdk/middleware-user-agent" "^3.972.13"
+ "@aws-sdk/types" "^3.973.2"
+ "@smithy/node-config-provider" "^4.3.9"
+ "@smithy/types" "^4.12.1"
+ tslib "^2.6.2"
+
+"@aws-sdk/util-utf8-browser@^3.0.0", "@aws-sdk/util-utf8-browser@^3.259.0":
version "3.259.0"
resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff"
integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==
@@ -2300,6 +2390,15 @@
fast-xml-parser "5.2.5"
tslib "^2.6.2"
+"@aws-sdk/xml-builder@^3.972.6":
+ version "3.972.6"
+ resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.6.tgz#a88b3f1894cffe62046bd748357eaf4f26544377"
+ integrity sha512-YrXu+UnfC8IdARa4ZkrpcyuRmA/TVgYW6Lcdtvi34NQgRjM1hTirNirN+rGb+s/kNomby8oJiIAu0KNbiZC7PA==
+ dependencies:
+ "@smithy/types" "^4.12.1"
+ fast-xml-parser "5.3.6"
+ 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"
@@ -2889,6 +2988,20 @@
dependencies:
"@hapi/hoek" "^11.0.2"
+"@httptoolkit/websocket-stream@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@httptoolkit/websocket-stream/-/websocket-stream-6.0.1.tgz#8d732f1509860236276f6b0759db4cc9859bbb62"
+ integrity sha512-A0NOZI+Glp3Xgcz6Na7i7o09+/+xm2m0UCU8gdtM2nIv6/cjLmhMZMqehSpTlgbx9omtLmV8LVqOskPEyWnmZQ==
+ dependencies:
+ "@types/ws" "*"
+ duplexify "^3.5.1"
+ inherits "^2.0.1"
+ isomorphic-ws "^4.0.1"
+ readable-stream "^2.3.3"
+ safe-buffer "^5.1.2"
+ ws "*"
+ xtend "^4.0.0"
+
"@humanfs/core@^0.19.1":
version "0.19.1"
resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
@@ -3143,6 +3256,14 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/abort-controller@^4.2.10":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.10.tgz#bd688ed62cbd5c85cc933cd6c60c8ef05fb2e5ee"
+ integrity sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/abort-controller@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.3.tgz#4615da3012b580ac3d1f0ee7b57ed7d7880bb29b"
@@ -3293,6 +3414,22 @@
"@smithy/uuid" "^1.1.0"
tslib "^2.6.2"
+"@smithy/core@^3.23.4", "@smithy/core@^3.23.6":
+ version "3.23.6"
+ resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.23.6.tgz#90de5fe442a9f529bd893b20ba0d8a8373a99ad3"
+ integrity sha512-4xE+0L2NrsFKpEVFlFELkIHQddBvMbQ41LRIP74dGCXnY1zQ9DgksrBcRBDJT+iOzGy4VEJIeU3hkUK5mn06kg==
+ dependencies:
+ "@smithy/middleware-serde" "^4.2.11"
+ "@smithy/protocol-http" "^5.3.10"
+ "@smithy/types" "^4.13.0"
+ "@smithy/util-base64" "^4.3.1"
+ "@smithy/util-body-length-browser" "^4.2.1"
+ "@smithy/util-middleware" "^4.2.10"
+ "@smithy/util-stream" "^4.5.15"
+ "@smithy/util-utf8" "^4.2.1"
+ "@smithy/uuid" "^1.1.1"
+ tslib "^2.6.2"
+
"@smithy/credential-provider-imds@^4.1.2":
version "4.1.2"
resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz#68662c873dbe812c13159cb2be3c4ba8aeb52149"
@@ -3448,6 +3585,17 @@
"@smithy/util-base64" "^4.1.0"
tslib "^2.6.2"
+"@smithy/fetch-http-handler@^5.3.11":
+ version "5.3.11"
+ resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.11.tgz#2c2f65df2bdbf4989c13a6558e3d43855002ba5d"
+ integrity sha512-wbTRjOxdFuyEg0CpumjZO0hkUl+fetJFqxNROepuLIoijQh51aMBmzFLfoQdwRjxsuuS2jizzIUTjPWgd8pd7g==
+ dependencies:
+ "@smithy/protocol-http" "^5.3.10"
+ "@smithy/querystring-builder" "^4.2.10"
+ "@smithy/types" "^4.13.0"
+ "@smithy/util-base64" "^4.3.1"
+ tslib "^2.6.2"
+
"@smithy/fetch-http-handler@^5.3.4":
version "5.3.4"
resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.4.tgz#af6dd2f63550494c84ef029a5ceda81ef46965d3"
@@ -3636,6 +3784,13 @@
dependencies:
tslib "^2.6.2"
+"@smithy/is-array-buffer@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.1.tgz#10f71c410796cf108c65bb0204a98c15d0131af3"
+ integrity sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==
+ dependencies:
+ tslib "^2.6.2"
+
"@smithy/md5-js@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.3.tgz#a89c324ff61c64c25b4895fa16d9358f7e3cc746"
@@ -3746,6 +3901,20 @@
"@smithy/util-middleware" "^4.2.8"
tslib "^2.6.2"
+"@smithy/middleware-endpoint@^4.4.20":
+ version "4.4.20"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.20.tgz#dea33d0d391a4a8095ab16cf57c8c6dc482f5123"
+ integrity sha512-9W6Np4ceBP3XCYAGLoMCmn8t2RRVzuD1ndWPLBbv7H9CrwM9Bprf6Up6BM9ZA/3alodg0b7Kf6ftBK9R1N04vw==
+ dependencies:
+ "@smithy/core" "^3.23.6"
+ "@smithy/middleware-serde" "^4.2.11"
+ "@smithy/node-config-provider" "^4.3.10"
+ "@smithy/shared-ini-file-loader" "^4.4.5"
+ "@smithy/types" "^4.13.0"
+ "@smithy/url-parser" "^4.2.10"
+ "@smithy/util-middleware" "^4.2.10"
+ 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"
@@ -3828,6 +3997,15 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/middleware-serde@^4.2.11":
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.11.tgz#a60b5b62cf92888e6b3de22d956bdda29263ef45"
+ integrity sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg==
+ dependencies:
+ "@smithy/protocol-http" "^5.3.10"
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/middleware-serde@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.3.tgz#a827e9c4ea9e51c79cca4d6741d582026a8b53eb"
@@ -3863,6 +4041,14 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/middleware-stack@^4.2.10":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.10.tgz#411276f45b78ed4d7d5e3cb2c4136142f456c907"
+ integrity sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/middleware-stack@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.3.tgz#5a315aa9d0fd4faaa248780297c8cbacc31c2eba"
@@ -3897,6 +4083,16 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/node-config-provider@^4.3.10", "@smithy/node-config-provider@^4.3.9":
+ version "4.3.10"
+ resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.10.tgz#bd537206cc3b6d1905fbc174c95f35897d98819b"
+ integrity sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w==
+ dependencies:
+ "@smithy/property-provider" "^4.2.10"
+ "@smithy/shared-ini-file-loader" "^4.4.5"
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/node-config-provider@^4.3.3":
version "4.3.3"
resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.3.tgz#44140a1e6bc666bcf16faf68c35d3dae4ba8cad5"
@@ -3960,6 +4156,17 @@
"@smithy/types" "^4.8.0"
tslib "^2.6.2"
+"@smithy/node-http-handler@^4.4.12":
+ version "4.4.12"
+ resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.12.tgz#6202ec0c41236fc7a8302b1e116aa5cd784c1a19"
+ integrity sha512-zo1+WKJkR9x7ZtMeMDAAsq2PufwiLDmkhcjpWPRRkmeIuOm6nq1qjFICSZbnjBvD09ei8KMo26BWxsu2BUU+5w==
+ dependencies:
+ "@smithy/abort-controller" "^4.2.10"
+ "@smithy/protocol-http" "^5.3.10"
+ "@smithy/querystring-builder" "^4.2.10"
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/node-http-handler@^4.4.5":
version "4.4.5"
resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz#2aea598fdf3dc4e32667d673d48abd4a073665f4"
@@ -3990,6 +4197,14 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/property-provider@^4.2.10", "@smithy/property-provider@^4.2.9":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.10.tgz#06dfc15f407d42b8514b363a83504e7008f12344"
+ integrity sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/property-provider@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.3.tgz#a6c82ca0aa1c57f697464bee496f3fec58660864"
@@ -4038,6 +4253,14 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/protocol-http@^5.3.10", "@smithy/protocol-http@^5.3.9":
+ version "5.3.10"
+ resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.10.tgz#020a0fa6e47396ebceab01296b76990931a93d5a"
+ integrity sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/protocol-http@^5.3.3":
version "5.3.3"
resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.3.tgz#55b35c18bdc0f6d86e78f63961e50ba4ff1c5d73"
@@ -4080,6 +4303,15 @@
"@smithy/util-uri-escape" "^4.1.0"
tslib "^2.6.2"
+"@smithy/querystring-builder@^4.2.10":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.10.tgz#05853f40c19c945784252b22dd6672ec0c2eab1f"
+ integrity sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ "@smithy/util-uri-escape" "^4.2.1"
+ tslib "^2.6.2"
+
"@smithy/querystring-builder@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.3.tgz#ca273ae8c21fce01a52632202679c0f9e2acf41a"
@@ -4115,6 +4347,14 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/querystring-parser@^4.2.10":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.10.tgz#189755d4f99dccb5b48c2cd413aba6baf9e6b636"
+ integrity sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/querystring-parser@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.3.tgz#b6d7d5cd300b4083c62d9bd30915f782d01f503e"
@@ -4204,6 +4444,14 @@
"@smithy/types" "^4.12.0"
tslib "^2.6.2"
+"@smithy/shared-ini-file-loader@^4.4.5":
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.5.tgz#84c29da4a1462e7b6ce21b00c49f8789ae804099"
+ integrity sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug==
+ dependencies:
+ "@smithy/types" "^4.13.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"
@@ -4288,6 +4536,20 @@
"@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
+"@smithy/signature-v4@^5.3.9":
+ version "5.3.10"
+ resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.10.tgz#9517defc0285b9d50f1c8ad17f6f90e72f8b5976"
+ integrity sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA==
+ dependencies:
+ "@smithy/is-array-buffer" "^4.2.1"
+ "@smithy/protocol-http" "^5.3.10"
+ "@smithy/types" "^4.13.0"
+ "@smithy/util-hex-encoding" "^4.2.1"
+ "@smithy/util-middleware" "^4.2.10"
+ "@smithy/util-uri-escape" "^4.2.1"
+ "@smithy/util-utf8" "^4.2.1"
+ 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"
@@ -4301,6 +4563,19 @@
"@smithy/util-stream" "^4.5.10"
tslib "^2.6.2"
+"@smithy/smithy-client@^4.11.7":
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.12.0.tgz#71f01aeaa089867c31a3d6452349cf4fd4c4a9e5"
+ integrity sha512-R8bQ9K3lCcXyZmBnQqUZJF4ChZmtWT5NLi6x5kgWx5D+/j0KorXcA0YcFg/X5TOgnTCy1tbKc6z2g2y4amFupQ==
+ dependencies:
+ "@smithy/core" "^3.23.6"
+ "@smithy/middleware-endpoint" "^4.4.20"
+ "@smithy/middleware-stack" "^4.2.10"
+ "@smithy/protocol-http" "^5.3.10"
+ "@smithy/types" "^4.13.0"
+ "@smithy/util-stream" "^4.5.15"
+ 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"
@@ -4368,6 +4643,13 @@
dependencies:
tslib "^2.6.2"
+"@smithy/types@^4.12.1", "@smithy/types@^4.13.0":
+ version "4.13.0"
+ resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.13.0.tgz#9787297a07ee72ef74d4f7d93c744d10ed664c21"
+ integrity sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==
+ dependencies:
+ tslib "^2.6.2"
+
"@smithy/types@^4.5.0":
version "4.5.0"
resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370"
@@ -4398,6 +4680,15 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/url-parser@^4.2.10", "@smithy/url-parser@^4.2.9":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.10.tgz#9c123e4acd5074cc2f4626fc629762d9dbefca18"
+ integrity sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A==
+ dependencies:
+ "@smithy/querystring-parser" "^4.2.10"
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/url-parser@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.3.tgz#82508f273a3f074d47d0919f7ce08028c6575c2f"
@@ -4443,6 +4734,15 @@
"@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
+"@smithy/util-base64@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.1.tgz#d7acc9fd3e84d1cb6c7a09866f2157457f0005c3"
+ integrity sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==
+ dependencies:
+ "@smithy/util-buffer-from" "^4.2.1"
+ "@smithy/util-utf8" "^4.2.1"
+ tslib "^2.6.2"
+
"@smithy/util-body-length-browser@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz#636bdf4bc878c546627dab4b9b0e4db31b475be7"
@@ -4457,6 +4757,13 @@
dependencies:
tslib "^2.6.2"
+"@smithy/util-body-length-browser@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.1.tgz#2a2763c0df831e6071cdc38636c66fdc1cbbdd7e"
+ integrity sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==
+ dependencies:
+ tslib "^2.6.2"
+
"@smithy/util-body-length-node@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz#646750e4af58f97254a5d5cfeaba7d992f0152ec"
@@ -4511,6 +4818,14 @@
"@smithy/is-array-buffer" "^4.2.0"
tslib "^2.6.2"
+"@smithy/util-buffer-from@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.1.tgz#50342cde6b29a169abdf392c954472a8ec0f3755"
+ integrity sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==
+ dependencies:
+ "@smithy/is-array-buffer" "^4.2.1"
+ tslib "^2.6.2"
+
"@smithy/util-config-provider@^4.1.0":
version "4.1.0"
resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz#6a07d73446c1e9a46d7a3c125f2a9301060bc957"
@@ -4654,6 +4969,15 @@
"@smithy/types" "^4.12.0"
tslib "^2.6.2"
+"@smithy/util-endpoints@^3.2.9":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.3.1.tgz#eeaa1e010c29bdacdd6833e5ef163f868d0f11f6"
+ integrity sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg==
+ dependencies:
+ "@smithy/node-config-provider" "^4.3.10"
+ "@smithy/types" "^4.13.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"
@@ -4682,6 +5006,13 @@
dependencies:
tslib "^2.6.2"
+"@smithy/util-hex-encoding@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.1.tgz#cec87c87492c9bac6b70bb749d3948938d40b81b"
+ integrity sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==
+ dependencies:
+ tslib "^2.6.2"
+
"@smithy/util-middleware@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-1.1.0.tgz#9f186489437ca2ef753c5e1de2930f76fd1edc14"
@@ -4705,6 +5036,14 @@
"@smithy/types" "^4.5.0"
tslib "^2.6.2"
+"@smithy/util-middleware@^4.2.10", "@smithy/util-middleware@^4.2.9":
+ version "4.2.10"
+ resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.10.tgz#41ba94329f010ab34c325ad747480565ade43ad9"
+ integrity sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==
+ dependencies:
+ "@smithy/types" "^4.13.0"
+ tslib "^2.6.2"
+
"@smithy/util-middleware@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.3.tgz#7c73416a6e3d3207a2d34a1eadd9f2b6a9811bd6"
@@ -4801,6 +5140,20 @@
"@smithy/util-utf8" "^4.2.0"
tslib "^2.6.2"
+"@smithy/util-stream@^4.5.15":
+ version "4.5.15"
+ resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.15.tgz#2a8fa6a519d985fe4e7f1d5724142e14be9c68a3"
+ integrity sha512-OlOKnaqnkU9X+6wEkd7mN+WB7orPbCVDauXOj22Q7VtiTkvy7ZdSsOg4QiNAZMgI4OkvNf+/VLUC3VXkxuWJZw==
+ dependencies:
+ "@smithy/fetch-http-handler" "^5.3.11"
+ "@smithy/node-http-handler" "^4.4.12"
+ "@smithy/types" "^4.13.0"
+ "@smithy/util-base64" "^4.3.1"
+ "@smithy/util-buffer-from" "^4.2.1"
+ "@smithy/util-hex-encoding" "^4.2.1"
+ "@smithy/util-utf8" "^4.2.1"
+ 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"
@@ -4857,6 +5210,13 @@
dependencies:
tslib "^2.6.2"
+"@smithy/util-uri-escape@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.1.tgz#93327b2f4327cce46d590d095f79482afdea421d"
+ integrity sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==
+ dependencies:
+ tslib "^2.6.2"
+
"@smithy/util-utf8@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-1.1.0.tgz#b791ab1e3f694374edfe22811e39dd8424a1be69"
@@ -4897,6 +5257,14 @@
"@smithy/util-buffer-from" "^4.2.0"
tslib "^2.6.2"
+"@smithy/util-utf8@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.1.tgz#ef71fdae30b82ba1b94b005ee42c8e6e6315a52c"
+ integrity sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==
+ dependencies:
+ "@smithy/util-buffer-from" "^4.2.1"
+ tslib "^2.6.2"
+
"@smithy/util-waiter@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.3.tgz#4c662009db101bc60aed07815d359e90904caef2"
@@ -4938,6 +5306,13 @@
dependencies:
tslib "^2.6.2"
+"@smithy/uuid@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.1.tgz#cafae26b6a7642752b5d4368e33c5363fe818cf2"
+ integrity sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==
+ dependencies:
+ tslib "^2.6.2"
+
"@socket.io/component-emitter@~3.1.0":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2"
@@ -5004,6 +5379,13 @@
dependencies:
"@types/webidl-conversions" "*"
+"@types/ws@*":
+ version "8.18.1"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
+ integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==
+ dependencies:
+ "@types/node" "*"
+
"@typespec/ts-http-runtime@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.0.tgz#f506ff2170e594a257f8e78aa196088f3a46a22d"
@@ -5479,6 +5861,19 @@ available-typed-arrays@^1.0.7:
dependencies:
possible-typed-array-names "^1.0.0"
+aws-crt@^1.24.0:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/aws-crt/-/aws-crt-1.29.0.tgz#7f204b4494a9b98e8f14ab1250ddc10227544b56"
+ integrity sha512-6DbQlhk4VUr/vr6Fbx9Vvrx9M3WcIpI6yUUfrh5zz1heMJSPXL62QNwx2gozlVN4h1qLIUMw04e8iyPfgXus1g==
+ dependencies:
+ "@aws-sdk/util-utf8-browser" "^3.259.0"
+ "@httptoolkit/websocket-stream" "^6.0.1"
+ axios "^1.12.2"
+ buffer "^6.0.3"
+ crypto-js "^4.2.0"
+ mqtt "^4.3.8"
+ process "^0.11.10"
+
aws-sdk@^2.1005.0, aws-sdk@^2.1691.0:
version "2.1692.0"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1692.0.tgz#9dac5f7bfcc5ab45825cc8591b12753aa7d2902c"
@@ -5513,6 +5908,15 @@ axios@^0.18.0:
follow-redirects "1.5.10"
is-buffer "^2.0.2"
+axios@^1.12.2:
+ version "1.13.5"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43"
+ integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==
+ dependencies:
+ follow-redirects "^1.15.11"
+ form-data "^4.0.5"
+ proxy-from-env "^1.1.0"
+
axios@^1.13.2:
version "1.13.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.4.tgz#15d109a4817fb82f73aea910d41a2c85606076bc"
@@ -5578,6 +5982,15 @@ bintrees@1.0.2:
resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8"
integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==
+bl@^4.0.2:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
bl@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e"
@@ -5676,6 +6089,11 @@ buffer-equal-constant-time@1.0.1:
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
buffer@4.9.2:
version "4.9.2"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
@@ -5701,6 +6119,14 @@ buffer@^5.5.0, buffer@^5.6.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
bufferutil@^4.0.8:
version "4.0.9"
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.9.tgz#6e81739ad48a95cad45a279588e13e95e24a800a"
@@ -5976,6 +6402,14 @@ commander@^2.7.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+commist@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/commist/-/commist-1.1.0.tgz#17811ec6978f6c15ee4de80c45c9beb77cee35d5"
+ integrity sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==
+ dependencies:
+ leven "^2.1.0"
+ minimist "^1.1.0"
+
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -5991,6 +6425,16 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+concat-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
+ integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^3.0.2"
+ typedarray "^0.0.6"
+
content-disposition@0.5.4, content-disposition@^0.5.3:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
@@ -6078,6 +6522,11 @@ crypt@0.0.2, crypt@~0.0.1:
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+crypto-js@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631"
+ integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==
+
d@1, d@^1.0.1, d@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de"
@@ -6323,6 +6772,26 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1:
es-errors "^1.3.0"
gopd "^1.2.0"
+duplexify@^3.5.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+duplexify@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f"
+ integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==
+ dependencies:
+ end-of-stream "^1.4.1"
+ inherits "^2.0.3"
+ readable-stream "^3.1.1"
+ stream-shift "^1.0.2"
+
eastasianwidth@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
@@ -6395,7 +6864,7 @@ encoding@^0.1.13:
dependencies:
iconv-lite "^0.6.2"
-end-of-stream@^1.1.0:
+end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.5"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c"
integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==
@@ -6941,6 +7410,13 @@ fast-xml-parser@5.2.5:
dependencies:
strnum "^2.1.0"
+fast-xml-parser@5.3.6:
+ version "5.3.6"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz#85a69117ca156b1b3c52e426495b6de266cb6a4b"
+ integrity sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==
+ dependencies:
+ strnum "^2.1.2"
+
fast-xml-parser@^5.0.7:
version "5.0.9"
resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.0.9.tgz#5b64c810e70941a9c07b07ead8299841fbb8dd76"
@@ -7056,16 +7532,16 @@ follow-redirects@1.5.10:
dependencies:
debug "=3.1.0"
+follow-redirects@^1.15.11, follow-redirects@^1.15.9:
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
+ integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
+
follow-redirects@^1.15.6:
version "1.15.9"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
-follow-redirects@^1.15.9:
- version "1.15.11"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
- integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
-
for-each@^0.3.3, for-each@^0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47"
@@ -7094,7 +7570,7 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
-form-data@^4.0.4:
+form-data@^4.0.4, form-data@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053"
integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==
@@ -7477,6 +7953,14 @@ he@^1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+help-me@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/help-me/-/help-me-3.0.0.tgz#9803c81b5f346ad2bce2c6a0ba01b82257d319e8"
+ integrity sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==
+ dependencies:
+ glob "^7.1.6"
+ readable-stream "^3.6.0"
+
help-me@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/help-me/-/help-me-5.0.0.tgz#b1ebe63b967b74060027c2ac61f9be12d354a6f6"
@@ -7588,7 +8072,7 @@ ieee754@1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
-ieee754@^1.1.13, ieee754@^1.1.4:
+ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
@@ -7639,7 +8123,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.4:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -8036,7 +8520,7 @@ isarray@0.0.1:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
-isarray@^1.0.0:
+isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
@@ -8056,6 +8540,11 @@ isexe@^3.1.1:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
+isomorphic-ws@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
+ integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
+
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
@@ -8256,6 +8745,11 @@ joycon@^3.1.1:
resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03"
integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==
+js-sdsl@4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711"
+ integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==
+
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -8538,6 +9032,11 @@ levelup@~0.19.0:
semver "~5.1.0"
xtend "~3.0.0"
+leven@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==
+
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
@@ -8737,6 +9236,13 @@ lru-cache@^5.1.1:
dependencies:
yallist "^3.0.2"
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
ltgt@^2.1.2, ltgt@~2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5"
@@ -8921,7 +9427,7 @@ minimatch@^9.0.4, minimatch@^9.0.5:
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
+minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@@ -9074,6 +9580,38 @@ mongodb@^6.17.0, mongodb@^6.20.0:
bson "^6.10.4"
mongodb-connection-string-url "^3.0.2"
+mqtt-packet@^6.8.0:
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-6.10.0.tgz#c8b507832c4152e3e511c0efa104ae4a64cd418f"
+ integrity sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==
+ dependencies:
+ bl "^4.0.2"
+ debug "^4.1.1"
+ process-nextick-args "^2.0.1"
+
+mqtt@^4.3.8:
+ version "4.3.8"
+ resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-4.3.8.tgz#b8cc9a6eb5e4e0cb6eea699f24cd70dd7b228f1d"
+ integrity sha512-2xT75uYa0kiPEF/PE0VPdavmEkoBzMT/UL9moid0rAvlCtV48qBwxD62m7Ld/4j8tSkIO1E/iqRl/S72SEOhOw==
+ dependencies:
+ commist "^1.0.0"
+ concat-stream "^2.0.0"
+ debug "^4.1.1"
+ duplexify "^4.1.1"
+ help-me "^3.0.0"
+ inherits "^2.0.3"
+ lru-cache "^6.0.0"
+ minimist "^1.2.5"
+ mqtt-packet "^6.8.0"
+ number-allocator "^1.0.9"
+ pump "^3.0.0"
+ readable-stream "^3.6.0"
+ reinterval "^1.1.0"
+ rfdc "^1.3.0"
+ split2 "^3.1.0"
+ ws "^7.5.5"
+ xtend "^4.0.2"
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -9293,6 +9831,14 @@ npm-run-all@^4.1.5:
shell-quote "^1.6.1"
string.prototype.padend "^3.0.0"
+number-allocator@^1.0.9:
+ version "1.0.14"
+ resolved "https://registry.yarnpkg.com/number-allocator/-/number-allocator-1.0.14.tgz#1f2e32855498a7740dcc8c78bed54592d930ee4d"
+ integrity sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==
+ dependencies:
+ debug "^4.3.1"
+ js-sdsl "4.3.0"
+
nyc@^15.1.0:
version "15.1.0"
resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02"
@@ -9693,6 +10239,11 @@ proc-log@^5.0.0:
resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8"
integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==
+process-nextick-args@^2.0.1, process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
process-on-spawn@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.1.0.tgz#9d5999ba87b3bf0a8acb05322d69f2f5aa4fb763"
@@ -9700,6 +10251,11 @@ process-on-spawn@^1.0.0:
dependencies:
fromentries "^1.2.0"
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
prom-client@^15.1.3:
version "15.1.3"
resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-15.1.3.tgz#69fa8de93a88bc9783173db5f758dc1c69fa8fc2"
@@ -9875,7 +10431,20 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2"
path-type "^3.0.0"
-readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.2:
+readable-stream@^2.0.0, readable-stream@^2.3.3:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0, readable-stream@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
@@ -9944,6 +10513,11 @@ regexp.prototype.flags@^1.5.3:
gopd "^1.2.0"
set-function-name "^2.0.2"
+reinterval@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7"
+ integrity sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==
+
release-zalgo@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730"
@@ -10021,6 +10595,11 @@ retry@^0.12.0:
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+rfdc@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
+ integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
+
rimraf@^2.6.3:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@@ -10063,6 +10642,11 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, s
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
safe-json-stringify@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd"
@@ -10460,6 +11044,13 @@ spdx-license-ids@^3.0.0:
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3"
integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==
+split2@^3.1.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
+ integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
+ dependencies:
+ readable-stream "^3.0.0"
+
split2@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
@@ -10536,6 +11127,11 @@ stream-browserify@3.0.0:
inherits "~2.0.4"
readable-stream "^3.5.0"
+stream-shift@^1.0.0, stream-shift@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b"
+ integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==
+
stream-to-pull-stream@^1.7.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece"
@@ -10625,6 +11221,13 @@ string_decoder@~0.10.x:
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -10676,6 +11279,11 @@ strnum@^2.1.0:
resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab"
integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==
+strnum@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.2.tgz#a5e00ba66ab25f9cafa3726b567ce7a49170937a"
+ integrity sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==
+
supports-color@^3.1.0:
version "3.2.3"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
@@ -10965,6 +11573,11 @@ typedarray.prototype.slice@^1.0.5:
typed-array-buffer "^1.0.3"
typed-array-byte-offset "^1.0.4"
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
typewise-core@^1.2, typewise-core@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195"
@@ -11096,7 +11709,7 @@ utf8@^3.0.0:
resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==
-util-deprecate@^1.0.1:
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
@@ -11402,6 +12015,16 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
+ws@*:
+ version "8.19.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b"
+ integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==
+
+ws@^7.5.5:
+ version "7.5.10"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9"
+ integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==
+
ws@^8.18.0:
version "8.18.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb"
@@ -11435,7 +12058,7 @@ xmlhttprequest-ssl@~2.1.1:
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz#e9e8023b3f29ef34b97a859f584c5e6c61418e23"
integrity sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==
-xtend@^4.0.2, xtend@~4.0.0:
+xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==