diff --git a/.github/workflows/alerts.yml b/.github/workflows/alerts.yml index c2b89838..403bfa86 100644 --- a/.github/workflows/alerts.yml +++ b/.github/workflows/alerts.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Render and test count-items-cronjob uses: scality/action-prom-render-test@1.0.3 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b9b5f1e1..fc2876e9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,13 +17,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Install Oras run: | @@ -33,7 +33,7 @@ jobs: ORAS_VERSION: 1.2.2 - name: Login to Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -54,7 +54,7 @@ jobs: working-directory: monitoring - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: context: . file: ./Dockerfile diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index 53f513f4..a3c3058a 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -14,12 +14,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@v4 with: languages: javascript, python - name: Build and analyze - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@v4 diff --git a/.github/workflows/dependency-review.yaml b/.github/workflows/dependency-review.yaml index 60307dea..39b15033 100644 --- a/.github/workflows/dependency-review.yaml +++ b/.github/workflows/dependency-review.yaml @@ -10,14 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: 'Dependency Review' - uses: actions/dependency-review-action@v4 - with: - # aws-sdk v2 is intentionally used as a devDependency because the - # fix-missing-replication-permissions script runs inside the vault - # container of older S3C versions (pre-9.5.2) where only v2 is - # available. This low-severity advisory is informational (no patch - # exists, v2 is end-of-life). - allow-ghsas: GHSA-j965-2qgj-vjmq + uses: actions/dependency-review-action@v5.0.0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d0d7d9e6..5ed08a11 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,7 +30,7 @@ jobs: - build steps: - name: Create Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 632edfa8..f23f6faf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,20 +21,20 @@ jobs: packages: write steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up Docker Buildk - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} - name: Build and push MongoDB - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: push: true context: .github/dockerfiles/mongodb @@ -54,16 +54,16 @@ jobs: - 27019:27019 steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Install node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: node-version: '24' cache: 'yarn' - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@v4 - name: Login to Registry - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: registry: ghcr.io username: ${{ github.repository_owner }} @@ -86,11 +86,11 @@ jobs: env: MONGODB_REPLICASET: "127.0.0.1:27018" - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@v7 with: token: ${{ secrets.CODECOV_TOKEN }} - name: "Debug: SSH to runner" - uses: scality/actions/action-ssh-to-runner@1.9.0 + uses: scality/actions/action-ssh-to-runner@1.19.0 continue-on-error: true with: tmate-server-host: ${{ secrets.TMATE_SERVER_HOST }} @@ -103,9 +103,9 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v7 with: go-version: '1.24' cache-dependency-path: BackupRepair/go.mod diff --git a/Clients/CloudserverClient.js b/Clients/CloudserverClient.js index 7fed71be..51a5643c 100644 --- a/Clients/CloudserverClient.js +++ b/Clients/CloudserverClient.js @@ -31,7 +31,7 @@ class Client { const requestHandler = { connectionTimeout: 60000, - requestTimeout: 60000, + socketTimeout: 60000, }; if (isHttps) { requestHandler.httpsAgent = httpAgent; diff --git a/Clients/s3Client.js b/Clients/s3Client.js index 20e953ac..cb7f587e 100644 --- a/Clients/s3Client.js +++ b/Clients/s3Client.js @@ -1,5 +1,5 @@ const { S3Client } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const { ConfiguredRetryStrategy } = require('@smithy/util-retry'); const http = require('http'); const https = require('https'); @@ -39,7 +39,7 @@ const createS3Client = ({ accessKey, secretKey, endpoint }, log) => { // so https will work but there will be no security enforced rejectUnauthorized: false }), - requestTimeout: 60000, + socketTimeout: 60000, }), retryStrategy: new ConfiguredRetryStrategy( AWS_SDK_REQUEST_RETRIES, // maxAttempts diff --git a/CompareRaftMembers/BlockDigestsStorage.js b/CompareRaftMembers/BlockDigestsStorage.js index 0b5181ed..9c3d57fb 100644 --- a/CompareRaftMembers/BlockDigestsStorage.js +++ b/CompareRaftMembers/BlockDigestsStorage.js @@ -1,7 +1,7 @@ const async = require('async'); const stream = require('stream'); -const Level = require('level'); +const { ClassicLevel } = require('classic-level'); const MAX_BATCH_SIZE = 100; const MAX_QUEUE_SIZE = 1000; @@ -21,19 +21,19 @@ class BlockDigestsStorage extends stream.Writable { * @param {string} [params.levelPath] - path to LevelDB database * to write to * @param {string} [params.db] - custom db object, must contain - * the methods "batch" and "close" following levelup's API - + * the promise-based methods "batch" and "close" of classic-level - * currently used for unit tests */ constructor(params) { super({ objectMode: true }); const { levelPath, db } = params; if (levelPath) { - this.db = new Level(params.levelPath); + this.db = new ClassicLevel(params.levelPath); } else { this.db = db; } this.cargo = async.cargo((tasks, cb) => { - this.db.batch(tasks, cb); + this.db.batch(tasks).then(() => cb(), cb); }, MAX_BATCH_SIZE); } @@ -55,10 +55,10 @@ class BlockDigestsStorage extends stream.Writable { _final(callback) { if (this.cargo.idle()) { - this.db.close(callback); + this.db.close().then(() => callback(), callback); } else { this.cargo.drain(() => { - this.db.close(callback); + this.db.close().then(() => callback(), callback); }); } } diff --git a/CompareRaftMembers/DiffStream.js b/CompareRaftMembers/DiffStream.js index fc144824..3e30f397 100644 --- a/CompareRaftMembers/DiffStream.js +++ b/CompareRaftMembers/DiffStream.js @@ -2,6 +2,7 @@ const stream = require('stream'); const BucketStream = require('./BucketStream'); const BlockDigestsStream = require('./BlockDigestsStream'); +const levelReadStream = require('./levelReadStream'); /** * Output differences between the input stream, consisting of @@ -386,7 +387,7 @@ class DiffStream extends stream.Transform { * @return {undefined} */ _createDigestsDbStream(fromItem) { - this.currentDbDigestsStream = this.digestsDb.createReadStream({ + this.currentDbDigestsStream = levelReadStream(this.digestsDb, { gte: fromItem.fullKey, // '0' is the ASCII character following '/': this restricts // the digest's lastKey to be from the current bucket diff --git a/CompareRaftMembers/compareFollowerDbs.js b/CompareRaftMembers/compareFollowerDbs.js index 72cf6c7a..938440d0 100644 --- a/CompareRaftMembers/compareFollowerDbs.js +++ b/CompareRaftMembers/compareFollowerDbs.js @@ -5,12 +5,14 @@ const fs = require('fs'); const path = require('path'); const stream = require('stream'); +const { jsutil } = require('@scality/arsenal'); const { Logger } = require('werelogs'); -const Level = require('level'); +const { ClassicLevel } = require('classic-level'); const DBListStream = require('./DBListStream'); const DiffStreamOplogFilter = require('./DiffStreamOplogFilter'); const KeyValueStreamDiff = require('./KeyValueStreamDiff'); +const levelReadStream = require('./levelReadStream'); const DEFAULT_PARALLEL_SCANS = 4; const DEFAULT_LOG_PROGRESS_INTERVAL = 10; @@ -197,16 +199,36 @@ if (EXCLUDE_FROM_CSEQS) { .pipe(DIFF_OUTPUT_STREAM); } -function compareDbs(dbPair, cb) { - log.info( - 'starting comparison of pair of databases', - { db1: dbPair[0], db2: dbPair[1] }, - ); - const dbListStreams = dbPair.map(dbPath => { - const db = new Level(dbPath); - const dbRawStream = db.createReadStream(); +// classic-level opens lazily: open explicitly so that a missing database fails the scan +function openDb(dbPath, cb) { + const db = new ClassicLevel(dbPath, { createIfMissing: false }); + db.open().then(() => cb(null, db), err => { + log.error('unable to open database', { dbPath, error: (err.cause || err).message }); + cb(err); + }); +} + +function streamDbsDiff(dbs, dbPair, cb) { + // .pipe() does not forward errors: report the first one from any stream + const done = jsutil.once(err => { + if (err) { + log.error( + 'error during comparison of database pair', + { db1: dbPair[0], db2: dbPair[1], error: err.message }, + ); + } else { + log.info('completed scan of database pair', { db1: dbPair[0], db2: dbPair[1] }); + } + cb(err); + }); + const dbListStreams = dbs.map((db, i) => { + const dbPath = dbPair[i]; + const dbRawStream = levelReadStream(db); const dbListStream = new DBListStream({ dbName: path.basename(dbPath) }); - dbRawStream.pipe(dbListStream); + dbRawStream + .on('error', done) + .pipe(dbListStream) + .on('error', done); return dbListStream; }); dbListStreams[0] @@ -224,17 +246,24 @@ function compareDbs(dbPair, cb) { }); } }) - .on('end', () => { - log.info('completed scan of database pair', { db1: dbPair[0], db2: dbPair[1] }); - cb(); - }) - .on('error', err => { - log.error( - 'error from diff stream', - { db1: dbPair[0], db2: dbPair[1], error: err.message }, - ); - cb(err); - }); + .on('end', () => done()) + .on('error', done); +} + +function compareDbs(dbPair, cb) { + log.info( + 'starting comparison of pair of databases', + { db1: dbPair[0], db2: dbPair[1] }, + ); + async.map(dbPair, openDb, (err, dbs) => { + if (err) { + return cb(err); + } + return streamDbsDiff(dbs, dbPair, streamErr => Promise.all(dbs.map(db => db.close())).then( + () => cb(streamErr), + closeErr => cb(streamErr || closeErr), + )); + }); } function main() { diff --git a/CompareRaftMembers/followerDiff.js b/CompareRaftMembers/followerDiff.js index 455ab702..c4f9d262 100644 --- a/CompareRaftMembers/followerDiff.js +++ b/CompareRaftMembers/followerDiff.js @@ -5,12 +5,14 @@ const fs = require('fs'); const path = require('path'); const stream = require('stream'); +const { jsutil } = require('@scality/arsenal'); const { Logger } = require('werelogs'); -const Level = require('level'); +const { ClassicLevel } = require('classic-level'); const DBListStream = require('./DBListStream'); const DiffStream = require('./DiffStream'); const DiffStreamOplogFilter = require('./DiffStreamOplogFilter'); +const levelReadStream = require('./levelReadStream'); const DEFAULT_PARALLEL_SCANS = 4; const DEFAULT_LOG_PROGRESS_INTERVAL = 10; @@ -183,22 +185,40 @@ if (EXCLUDE_FROM_CSEQS) { let digestsDb; if (LISTING_DIGESTS_INPUT_DIR) { - digestsDb = new Level(LISTING_DIGESTS_INPUT_DIR, { createIfMissing: false }); + digestsDb = new ClassicLevel(LISTING_DIGESTS_INPUT_DIR, { createIfMissing: false }); } -function scanDb(dbPath, cb) { - log.info('starting scan of database', { dbPath }); - const db = new Level(dbPath); - const dbRawStream = db.createReadStream(); +// classic-level opens lazily: open explicitly so that a missing database fails the scan +function openDb(dbPath, cb) { + const db = new ClassicLevel(dbPath, { createIfMissing: false }); + db.open().then(() => cb(null, db), err => { + log.error('unable to open database', { dbPath, error: (err.cause || err).message }); + cb(err); + }); +} + +function streamDbDiff(db, dbPath, cb) { + const dbRawStream = levelReadStream(db); const dbListStream = new DBListStream({ dbName: path.basename(dbPath) }); const diffStream = new DiffStream({ bucketdHost: BUCKETD_HOST, bucketdPort: BUCKETD_PORT, digestsDb, }); + // .pipe() does not forward errors: report the first one from any stream + const done = jsutil.once(err => { + if (err) { + log.error('error during scan of database', { dbPath, error: err.message }); + } else { + log.info('completed scan of database', { dbPath }); + } + cb(err); + }); dbRawStream + .on('error', done) .pipe(dbListStream) + .on('error', done) .pipe(diffStream); dbListStream .on('data', () => { @@ -213,23 +233,43 @@ function scanDb(dbPath, cb) { }); } }) - .on('end', () => { - log.info('completed scan of database', { dbPath }); - cb(); - }) - .on('error', err => { - log.error('error from diff stream', { dbPath, error: err.message }); - cb(err); - }); + .on('end', () => done()) + .on('error', done); +} + +function scanDb(dbPath, cb) { + log.info('starting scan of database', { dbPath }); + openDb(dbPath, (err, db) => { + if (err) { + return cb(err); + } + return streamDbDiff(db, dbPath, streamErr => db.close().then( + () => cb(streamErr), + closeErr => cb(streamErr || closeErr), + )); + }); } function main() { log.info('starting scan'); async.series([ + // classic-level opens lazily: open explicitly to fail early on a missing digests database + done => { + if (!digestsDb) { + return done(); + } + return digestsDb.open().then(() => done(), err => { + log.error('unable to open listing digests database', { + path: LISTING_DIGESTS_INPUT_DIR, + error: (err.cause || err).message, + }); + done(err); + }); + }, done => async.eachLimit(DATABASES_LIST, PARALLEL_SCANS, scanDb, done), done => { if (digestsDb) { - digestsDb.close(done); + digestsDb.close().then(() => done(), done); } else { done(); } diff --git a/CompareRaftMembers/levelReadStream.js b/CompareRaftMembers/levelReadStream.js new file mode 100644 index 00000000..34e7a0bb --- /dev/null +++ b/CompareRaftMembers/levelReadStream.js @@ -0,0 +1,32 @@ +const { Readable } = require('stream'); + +// classic-level has no createReadStream(): stream the database entries as +// the { key, value } objects the comparison streams consume. Readable.from() +// would do, but it still emits 'end' when destroyed from a 'data' handler, +// which DiffStream does when it drops a digests stream. +class LevelReadStream extends Readable { + constructor(db, options) { + super({ objectMode: true }); + this.dbIterator = db.iterator(options); + } + + _read() { + this.dbIterator.next().then(entry => { + if (this.destroyed) { + return; + } + if (entry === undefined) { + this.push(null); + } else { + const [key, value] = entry; + this.push({ key, value }); + } + }, err => this.destroy(err)); + } + + _destroy(err, callback) { + this.dbIterator.close().then(() => callback(err), closeErr => callback(err || closeErr)); + } +} + +module.exports = (db, options) => new LevelReadStream(db, options); diff --git a/VerifyReplication/storage/s3.js b/VerifyReplication/storage/s3.js index 60d90c61..141c23cd 100644 --- a/VerifyReplication/storage/s3.js +++ b/VerifyReplication/storage/s3.js @@ -1,5 +1,5 @@ const { S3Client, HeadObjectCommand, ListObjectsV2Command } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const { ConfiguredRetryStrategy } = require('@smithy/util-retry'); const fs = require('fs'); const http = require('http'); @@ -61,7 +61,7 @@ function getClient(params) { requestHandler: new NodeHttpHandler({ httpAgent, httpsAgent, - requestTimeout: httpTimeout || 300000, + socketTimeout: httpTimeout || 300000, }), }; diff --git a/bucketVersionsStats.js b/bucketVersionsStats.js index 146d089a..410c0dca 100644 --- a/bucketVersionsStats.js +++ b/bucketVersionsStats.js @@ -2,7 +2,7 @@ const fs = require('fs'); const { http, https } = require('httpagent'); const { S3Client, ListObjectVersionsCommand } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const { ConfiguredRetryStrategy } = require('@smithy/util-retry'); const { Logger } = require('werelogs'); @@ -109,7 +109,7 @@ const s3 = new S3Client({ requestHandler: new NodeHttpHandler({ httpAgent: agent, httpsAgent: agent, - requestTimeout: 60000, + socketTimeout: 60000, }), retryStrategy: new ConfiguredRetryStrategy( AWS_SDK_REQUEST_RETRIES, diff --git a/cleanupBuckets.js b/cleanupBuckets.js index 8811df2a..fcb177ef 100644 --- a/cleanupBuckets.js +++ b/cleanupBuckets.js @@ -6,7 +6,7 @@ const { ListMultipartUploadsCommand, AbortMultipartUploadCommand, } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const { Logger } = require('werelogs'); const log = new Logger('s3utils::emptyBucket'); diff --git a/cleanupNoncurrentVersions.js b/cleanupNoncurrentVersions.js index 4b2d9193..a23a421d 100644 --- a/cleanupNoncurrentVersions.js +++ b/cleanupNoncurrentVersions.js @@ -3,7 +3,7 @@ const { http, https } = require('httpagent'); const { ObjectMD } = require('@scality/arsenal').models; const { S3Client, ListObjectVersionsCommand, DeleteObjectsCommand } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const { ConfiguredRetryStrategy } = require('@smithy/util-retry'); const { doWhilst, eachSeries, filterLimit } = require('async'); @@ -186,7 +186,7 @@ const s3 = new S3Client({ requestHandler: new NodeHttpHandler({ httpAgent: agent, httpsAgent: agent, - requestTimeout: 60000, + socketTimeout: 60000, }), retryStrategy: new ConfiguredRetryStrategy( AWS_SDK_REQUEST_RETRIES, diff --git a/listObjectsByReplicationStatus.js b/listObjectsByReplicationStatus.js index 8514837f..2bcddbb4 100644 --- a/listObjectsByReplicationStatus.js +++ b/listObjectsByReplicationStatus.js @@ -1,6 +1,6 @@ const async = require('async'); const { S3Client, ListObjectVersionsCommand, HeadObjectCommand } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const http = require('http'); const { Logger } = require('werelogs'); @@ -185,7 +185,7 @@ function listObjectsByReplicationStatus(options) { tls: false, requestHandler: new NodeHttpHandler({ httpAgent: new http.Agent({ keepAlive: true }), - requestTimeout: 60000, + socketTimeout: 60000, }), }); diff --git a/package.json b/package.json index 6741d473..816b5454 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@scality/s3utils", - "version": "1.20.0-preview.1", + "version": "1.20.0", "engines": { "node": ">= 24" }, @@ -8,8 +8,8 @@ "scripts": { "lint": "eslint $(git ls-files '*.js')", "jest": "NODE_OPTIONS='--experimental-vm-modules' jest", - "test:unit": "LOCATION_CONFIG_FILE='tests/conf/locationConfig.json' yarn jest --verbose --logHeapUsage --projects jest.config.js --coverage --coverageDirectory=coverage/unit --testPathPattern='tests/unit/[\\w/-]+\\.[tj]s'", - "test:functional": "LOCATION_CONFIG_FILE='tests/conf/locationConfig.json' yarn jest --verbose --logHeapUsage --projects jest.config.js --coverage --coverageDirectory=coverage/functional --testPathPattern='tests/functional/[\\w/-]+\\.[tj]s'" + "test:unit": "LOCATION_CONFIG_FILE='tests/conf/locationConfig.json' yarn jest --verbose --logHeapUsage --projects jest.config.js --coverage --coverageDirectory=coverage/unit --testPathPatterns='tests/unit/[\\w/-]+\\.[tj]s'", + "test:functional": "LOCATION_CONFIG_FILE='tests/conf/locationConfig.json' yarn jest --verbose --logHeapUsage --projects jest.config.js --coverage --coverageDirectory=coverage/functional --testPathPatterns='tests/functional/[\\w/-]+\\.[tj]s'" }, "repository": { "type": "git", @@ -28,20 +28,18 @@ "homepage": "https://github.com/scality/s3utils#readme", "dependencies": { "@aws-sdk/client-s3": "^3.873.0", - "@aws-sdk/node-http-handler": "^3.374.0", - "@scality/arsenal": "^8.6.0-0", + "@scality/arsenal": "^8.6.0", "@scality/cloudserverclient": "^1.0.8", "@senx/warp10": "^2.0.3", + "@smithy/node-http-handler": "^4.12.1", "@smithy/util-retry": "^4.0.7", "JSONStream": "^1.3.5", "async": "^3.2.6", "bucketclient": "scality/bucketclient#8.3.0", + "classic-level": "^3.0.0", "express": "^5.1.0", - "heapdump": "^0.3.15", "httpagent": "scality/httpagent#1.1.0", - "level": "^9.0.0", "mongodb": "^6.17.0", - "needle": "^3.3.1", "node-rdkafka": "^3.6.1", "node-schedule": "^2.1.1", "prom-client": "^15.1.3", @@ -52,17 +50,13 @@ }, "devDependencies": { "@aws-sdk/client-iam": "^3.962.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "^9.39.0", "@scality/eslint-config-scality": "scality/Guidelines#8.3.0", - "@sinonjs/fake-timers": "^14.0.0", - "aws-sdk": "^2.1692.0", - "eslint": "^9.14.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jest": "^28.11.0", - "jest": "^29.7.0", + "@sinonjs/fake-timers": "^15.4.0", + "eslint": "^9.39.0", + "jest": "^30.5.2", "mongodb-memory-server": "10.1.2", - "randomatic": "^3.1.1", - "sinon": "^19.0.2", - "strip-ansi": "^7.1.0", - "typescript": "^4.9.5" + "sinon": "^22.1.0" } } diff --git a/removeDeleteMarkers.js b/removeDeleteMarkers.js index e41bd95b..e063593c 100644 --- a/removeDeleteMarkers.js +++ b/removeDeleteMarkers.js @@ -9,7 +9,7 @@ const { ListObjectVersionsCommand, DeleteObjectsCommand } = require('@aws-sdk/client-s3'); -const { NodeHttpHandler } = require('@aws-sdk/node-http-handler'); +const { NodeHttpHandler } = require('@smithy/node-http-handler'); const { Logger } = require('werelogs'); const log = new Logger('s3utils::removeDeleteMarkers'); diff --git a/replicationAudit/README.md b/replicationAudit/README.md deleted file mode 100644 index b3a23e2c..00000000 --- a/replicationAudit/README.md +++ /dev/null @@ -1,679 +0,0 @@ -# TL;DR Complete Workflow Example - -Here's a complete example running the two scripts and audit the IAM policies used by CRR. - -Use the fix-missing-replication-permissions.js script (step 7) to correct any missing permissions found by the check script. If the fix script fails with "missing ownerDisplayName", re-run check-replication-permissions.js — this field was added in s3utils 1.17.5. - -From your local machine: copy scripts to the supervisor - -```bash -scp replicationAudit/list-buckets-with-replication.sh root@:/root/ -scp replicationAudit/check-replication-permissions.js root@:/root/ -scp replicationAudit/fix-missing-replication-permissions.js root@:/root/ -``` - -Connect to the supervisor -```bash -ssh root@ -``` - -Then, from the supervisor, go to the federation directory -(by default `/srv/scality/s3/s3-offline/federation`): - -```bash -cd /srv/scality/s3/s3-offline/federation -ENV_DIR=s3config - -# Step 1: Copy scripts to S3 connector node -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m copy \ - -a 'src=/root/list-buckets-with-replication.sh dest=/root/' -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m copy \ - -a 'src=/root/check-replication-permissions.js dest={{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs' -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m copy \ - -a 'src=/root/fix-missing-replication-permissions.js dest={{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs' - -# Step 2: Run list-buckets-with-replication.sh -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'BUCKETD_HOST=$(ss -nlptH "sport = :9000" | awk "{print \$4}"| cut -d: -f1) bash /root/list-buckets-with-replication.sh' - -# Step 3: Find the vault-metadata repd leader IP (port 5300) -ansible -i env/$ENV_DIR/inventory md1-cluster1 -m shell \ - -a 'curl -s http://localhost:5300/_/raft/leader' -# Note both "ip" and "port" values, e.g., {"ip":"10.160.116.162","port":4300} -# On 3-server rings the port may differ per node (4300, 4301, etc.) - -# Step 4: Set the LEADER variable (ip:port) and run the permission check script -# Note: replace ctrctl with docker on RHEL/CentOS 7 -LEADER=: - -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a "cp /root/buckets-with-replication.json {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs && \ - ctrctl exec scality-vault{{ container_name_suffix | default("")}} node /logs/check-replication-permissions.js \ - /logs/buckets-with-replication.json $LEADER /logs/missing.json" - -# Step 5: Retrieve results -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'cat {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/missing.json' \ - | grep -v CHANGED | tee /root/replicationAudit_missing.json - -# Step 6: Fix missing permissions -# Copy admin credentials and missing.json to vault container and run inside it -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m copy \ - -a "src=/srv/scality/s3/s3-offline/federation/env/$ENV_DIR/vault/admin-clientprofile/admin1.json dest={{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs" - -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m copy \ - -a 'src=/root/replicationAudit_missing.json dest={{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/missing.json' - -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'ctrctl exec scality-vault{{ container_name_suffix | default("")}} env NODE_PATH=/home/scality/vault/node_modules node /logs/fix-missing-replication-permissions.js \ - /logs/missing.json localhost /logs/admin1.json /logs/replication-fix-results.json' - -# Retrieve fix results -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'cat {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/replication-fix-results.json' \ - | grep -v CHANGED | tee /root/replicationAudit_fix_results.json - -# Step 7: Re-run check to verify fixes (repeat steps 3-5) - -# Step 8: Clean up remote files -ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'rm -f {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/missing.json \ - {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/check-replication-permissions.js \ - {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/fix-missing-replication-permissions.js \ - {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/buckets-with-replication.json \ - {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/replication-fix-results.json \ - {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/admin1.json \ - /root/list-buckets-with-replication.sh \ - /root/buckets-with-replication.json' -``` - -# Scripts Documentation - -## list-buckets-with-replication.sh - -Lists all buckets with replication enabled across all accounts using the metadata API (bucketd). - -### Prerequisites - -- Access to an S3 connector node (`runners_s3`) with bucketd running -- `curl` and `jq` installed -- Bucketd accessible on port 9000 (default) - -### Usage - -1. Copy the script to the supervisor: - ```bash - scp replicationAudit/list-buckets-with-replication.sh root@:/root/ - ``` - -2. Connect to the supervisor as root and go to the federation directory - (by default `/srv/scality/s3/s3-offline/federation`): - ```bash - ssh root@ - cd /srv/scality/s3/s3-offline/federation - ENV_DIR=s3config - ``` - -3. Copy the script to an S3 connector node: - ```bash - ansible -i env/$ENV_DIR/inventory runners_s3[0] -m copy \ - -a 'src=/root/list-buckets-with-replication.sh dest=/root/' - ``` - -4. Run the script: - ```bash - ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'bash /root/list-buckets-with-replication.sh' - ``` - -5. Retrieve the output file: - ```bash - ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'cat /root/buckets-with-replication.json' - ``` - -### Configuration - -Environment variables can be used to customize behavior: - -| Variable | Default | Description | -|----------|---------|-------------| -| `BUCKETD_HOST` | localhost | Bucketd hostname | -| `BUCKETD_PORT` | 9000 | Bucketd port | -| `BATCH_SIZE` | 10 | Number of parallel curl requests (increase for faster execution) | -| `OUTPUT_FILE` | buckets-with-replication.json | Output file path | - -### Output Format - -The script produces a JSON file with metadata and results: - -```json -{ - "metadata": { - "timestamp": "2026-01-19T10:07:25Z", - "durationSeconds": 2, - "bucketdUrl": "http://localhost:9000", - "counts": { - "totalBucketsScanned": 150, - "bucketsWithReplication": 3, - "bucketsWithoutReplication": 147, - "fetchErrors": 0 - } - }, - "results": [ - { - "bucket": "source-bucket", - "owner": "267390090509", - "ownerDisplayName": "testaccount", - "sourceRole": "arn:aws:iam::267390090509:role/crr-source-role" - } - ] -} -``` - -### How It Works - -1. **Discovers buckets**: Queries `/default/bucket/users..bucket` which contains all bucket names across all accounts -2. **Fetches attributes**: For each bucket, fetches attributes via `/default/attributes/{bucket}` in batches of 10 (with connection reuse) -3. **Filters replication**: Identifies buckets with `replicationConfiguration` containing at least one enabled rule -4. **Extracts metadata**: Outputs bucket name, owner info, and the source role (part before the comma in the role ARN) - -### Example Run - -``` -=== List Buckets with Replication Enabled === -Bucketd: http://localhost:9000 -Batch size: 10 -Output file: buckets-with-replication.json - -Checking bucketd connectivity... -Connected to bucketd - -Step 1: Fetching bucket list... -Found 150 buckets (excluding internal buckets) - -Step 2: Fetching bucket attributes in batches of 10... - Processed 10/150 buckets (batch 1) - Processed 20/150 buckets (batch 2) - ... - -=== Summary === -Total buckets scanned: 150 - With replication: 3 - Without replication: 147 - Fetch errors: 0 -Duration: 2s -Output saved to: buckets-with-replication.json - -Done. -``` - -### Troubleshooting - -**"Cannot connect to bucketd"** -- Ensure you're running on an S3 connector node (`runners_s3`) where bucketd is running -- Check if bucketd is listening: `ss -tlnp | grep 9000` - -**"Found 0 buckets"** -- Verify users..bucket is accessible: `curl -s http://localhost:9000/default/bucket/users..bucket | jq '.Contents[].key'` - -**Script timeout** -- For large deployments, consider running directly on the S3 connector node via interactive SSH - ---- - -## check-replication-permissions.js - -Checks if replication roles have `s3:ReplicateObject` permission by directly -querying Vault metadata via the repd protocol (no vaultclient or credentials -needed). - -### Prerequisites - -- Output from `list-buckets-with-replication.sh` (buckets-with-replication.json) -- Access to an S3 connector node (`runners_s3`) with a container that has Node.js (e.g., vault container) - -### How It Works - -The script is self-contained with inlined functions from MetaData and Vault: - -- **Protocol constants** - from `MetaData/lib/protocol.json` -- **Protocol encoding** - from `MetaData/lib/server/ProtoBuilder.js` -- **Key generation** - from `vault/lib/Indexer.js` - -This ensures portability while using the exact same protocol and key formats as Vault. - -### Usage - -1. First, run `list-buckets-with-replication.sh` to generate the bucket list - (see above) - -2. Copy the script to the supervisor: - - ```bash - scp replicationAudit/check-replication-permissions.js root@:/root/ - ``` - -3. Connect to the supervisor as root (if not already connected) and go to the - federation directory (by default `/srv/scality/s3/s3-offline/federation`): - - ```bash - ssh root@ - cd /srv/scality/s3/s3-offline/federation - ENV_DIR=s3config - ``` - -4. Copy the script to an S3 connector node: - - ```bash - ansible -i env/$ENV_DIR/inventory 'runners_s3[0]' -m copy \ - -a 'src=/root/check-replication-permissions.js dest={{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs' - ``` - -5. Find the vault-metadata repd leader IP: - - ```bash - ansible -i env/$ENV_DIR/inventory md1-cluster1 -m shell \ - -a 'curl -s http://localhost:5300/_/raft/leader' - ``` - - This returns JSON like `{"ip":"10.160.116.162","port":4300}` - use both `ip` - and `port` values. On 3-server rings the port may differ per node (4300, 4301, etc.). - - **Note:** Vault metadata uses port 5300 for admin. - -6. Copy files to `/var/tmp` (mounted in vault container) and run the script: - - ```bash - LEADER=: - - ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a "cp /root/buckets-with-replication.json {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs && \ - ctrctl exec scality-vault{{ container_name_suffix | default("")}} node /logs/check-replication-permissions.js \ - /logs/buckets-with-replication.json $LEADER /logs/missing.json" - ``` - -8. Retrieve the output: - - ```bash - ansible -i env/$ENV_DIR/inventory runners_s3[0] -m shell \ - -a 'cat {{ env_host_logs}}/scality-vault{{ container_name_suffix | default("")}}/logs/missing.json' - ``` - -### Command Line Arguments - -``` -node check-replication-permissions.js [input-file] [leader-ip[:port]] [output-file] [--include-policies] -``` - -| Argument | Default | Description | -|----------|---------|-------------| -| `input-file` | /root/buckets-with-replication.json | Input JSON from list script | -| `leader-ip[:port]` | 127.0.0.1:4300 | Vault-metadata repd leader IP and optional port (default 4300) | -| `output-file` | /root/missing-replication-permissions.json | Output file path | -| `--include-policies` | (not set) | Include full policy documents in output | - -### Output Format - -> **Breaking change (since 1.17.5):** The output now includes `ownerDisplayName` -> in each result entry. This field is required by -> `fix-missing-replication-permissions.js` to identify accounts without an -> extra API call. If you ran `check-replication-permissions.js` on version -> 1.17.4 or earlier, **re-run it** to produce an output that -> `fix-missing-replication-permissions.js` can consume. - -The script produces a JSON file with metadata and results. The `results` array -contains **only buckets missing the `s3:ReplicateObject` permission**. - -**Default output (compact):** - -```json -{ - "metadata": { - "timestamp": "2026-01-19T15:27:11.557Z", - "durationMs": 24, - "durationHuman": "0.0s", - "repdLeader": "10.160.112.179:4300", - "inputFile": "/tmp/buckets.json", - "counts": { - "totalBuckets": 6, - "bucketsOk": 3, - "bucketsMissingPermission": 3, - "bucketsSkipped": 0, - "bucketsWithErrors": 0, - "uniqueRolesChecked": 2 - } - }, - "results": [ - { - "bucket": "bucket-old-1", - "ownerDisplayName": "testaccount", - "sourceRole": "arn:aws:iam::267390090509:role/crr-role-outdated", - "policies": [ - { - "name": "crr-policy-outdated", - "path": "/", - "allowsReplicateObject": false - } - ] - } - ] -} -``` - -**With `--include-policies` (full policy documents):** - -```json -{ - "metadata": { - "timestamp": "2026-01-19T15:27:11.557Z", - "durationMs": 24, - "durationHuman": "0.0s", - "repdLeader": "10.160.112.179:4300", - "inputFile": "/tmp/buckets.json", - "counts": { - "totalBuckets": 6, - "bucketsOk": 3, - "bucketsMissingPermission": 3, - "bucketsSkipped": 0, - "bucketsWithErrors": 0, - "uniqueRolesChecked": 2 - } - }, - "results": [ - { - "bucket": "bucket-old-1", - "sourceRole": "arn:aws:iam::267390090509:role/crr-role-outdated", - "policies": [ - { - "name": "crr-policy-outdated", - "path": "/", - "allowsReplicateObject": false, - "document": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObjectVersion", "s3:GetObjectVersionAcl"], - "Resource": ["arn:aws:s3:::bucket-old-1/*"] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket", "s3:GetReplicationConfiguration"], - "Resource": ["arn:aws:s3:::bucket-old-1"] - } - ] - } - } - ] - } - ] -} -``` - -In this example, the policy is missing `s3:ReplicateObject` - it only has -`s3:GetObjectVersion` and `s3:GetObjectVersionAcl`. - -**Fields:** - -- `bucket`: Source bucket name with replication enabled -- `sourceRole`: The IAM role ARN configured for replication -- `error`: (optional) Error message if role lookup failed -- `policies`: Array of all policies attached to the role, each containing: - - `name`: Policy name - - `path`: Policy path (e.g., `/` or `/custom/path/`) - - `allowsReplicateObject`: Whether this policy grants `s3:ReplicateObject` - (always false in output since we only output missing permissions) - - `document`: (only with `--include-policies`) Full IAM policy document for analysis - -### Script Logic - -1. **Connects to repd**: TCP connection to vault-metadata repd (default port 4300, configurable via `ip:port` argument) -2. **For each bucket's replication role**: - - Get role ID: `linkRoleArn(arn)` → role ID - - List attached policies: `policyByRoleId(accountId, roleId, '', '')` - - Get each policy: `policyByName(accountId, policyName)` -3. **Check permissions**: Evaluates if any policy allows `s3:ReplicateObject` -4. **Output**: Only buckets missing the required permission - -### Vault Metadata Key Schema - -The script queries the `vaultdb` database using these key patterns: - -| Purpose | Key Pattern | Example | -|---------|-------------|---------| -| Role by ARN | `roleArn:{arn}` | `roleArn:arn:aws:iam::123:role/MyRole` | -| Role data | `linkAccount:{id}:roleId:{roleId}` | `linkAccount:123:roleId:AROAXXX` | -| Policies | `linkAccount:{id}:roleId:{roleId}:policy:{path}` | `...policy:/my-policy` | -| Policy content | `accountId:{id}:policyName:{name}` | `accountId:123:policyName:my-policy` | - -### Example Run - -``` -=== Check Replication Role Permissions === -Input: /tmp/buckets.json -Output: /tmp/missing.json -Repd: 10.160.112.172:4300 - -Processing 6 buckets... - -[1/6] bucket-new-1 -> OK -[2/6] bucket-new-2 -> OK -[3/6] bucket-new-3 -> OK -[4/6] bucket-old-1 -> MISSING: s3:ReplicateObject -[5/6] bucket-old-2 -> MISSING: s3:ReplicateObject -[6/6] bucket-old-3 -> MISSING: s3:ReplicateObject - -=== Summary === -Total checked: 6 -Missing permission: 3 -Output saved to: /tmp/missing.json -``` - -### Troubleshooting - -**"Role not found in vault"** - -- The role ARN in the bucket's replication configuration doesn't exist in vault -- The role may have been deleted after replication was configured - -**"No policies attached to role"** - -- The role exists but has no managed policies attached -- Attach a policy with `s3:ReplicateObject` permission to the role - -**"Missing s3:ReplicateObject"** - -- The role has policies but none grant `s3:ReplicateObject` on the source bucket -- Review the policy documents in the output to see what permissions are granted -- Ensure the policy has: - - Action: `s3:ReplicateObject` (or `s3:*` or `s3:Replicate*`) - - Resource: matching the source bucket ARN (e.g., `arn:aws:s3:::bucket-name/*`) - -**Connection timeout or refused** - -- Ensure you're connecting to the correct repd leader IP **and port** -- On 3-server rings, the leader port may not be 4300 (e.g. 4301, 4302) -- Find the leader: `curl -s http://localhost:5300/_/raft/leader` — use both `ip` and `port` from the response -- The script must run inside a container that can reach repd on the leader port - -**Script timeout** - -- For many buckets, run directly on the S3 connector node via interactive SSH - ---- - -## fix-missing-replication-permissions.js - -Reads the output of `check-replication-permissions.js` and creates IAM policies -with `s3:ReplicateObject` for roles that are missing it. - -The script applies **minimal changes**: one policy per bucket, with an explicit -Statement ID (`AllowReplicateObjectAuditFix`) so the policies are easily -identifiable later. Using one policy per bucket makes re-runs truly idempotent: -if the policy already exists, its document is guaranteed to be identical. - -### Prerequisites - -- Output from `check-replication-permissions.js` (missing.json) -- Vault admin credentials (`admin1.json` with `accessKey` and `secretKeyValue`). - Found on the supervisor at: - ``` - /srv/scality/s3/s3-offline/federation/env//vault/admin-clientprofile/admin1.json - ``` -- The script runs inside the vault container (`scality-vault`), which has `vaultclient` and `aws-sdk` pre-installed - -### Usage - -```bash -node fix-missing-replication-permissions.js [output-file] [options] -``` - -| Argument | Default | Description | -|----------|---------|-------------| -| `input-file` | (required) | Path to missing.json from check script | -| `vault-host` | (required) | Vault admin host (use `localhost` when running inside the vault container) | -| `admin-config` | (required) | Path to admin credentials JSON | -| `output-file` | replication-fix-results.json | Output file path | -| `--iam-port ` | 8600 | Vault admin and IAM API port | -| `--https` | (not set) | Use HTTPS to connect to Vault | -| `--dry-run` | (not set) | Show what would be done without making changes | - -### How It Works - -1. **Reads** the missing permissions file and enriches each entry with parsed role fields -2. **Maps** account IDs to names using `ownerDisplayName` from the input (no API call) -3. For each bucket entry (grouped by account for credential reuse): - - **Generates** a temporary access key via vault admin API (15-minute auto-expiry) - - **Creates** one IAM policy per bucket with `s3:ReplicateObject` - - **Attaches** the policy to the role - - **Deletes** the temporary access key (falls back to auto-expiry on failure) -4. **Writes** results to the output file - -### Policy Created - -For each bucket, the script creates a policy named -`s3-replication-audit-fix-`: - -```json -{ - "Version": "2012-10-17", - "Statement": [{ - "Sid": "AllowReplicateObjectAuditFix", - "Effect": "Allow", - "Action": "s3:ReplicateObject", - "Resource": "arn:aws:s3:::bucket-old-1/*" - }] -} -``` - -### Output Format - -```json -{ - "metadata": { - "timestamp": "2026-02-23T20:35:00.000Z", - "durationMs": 65, - "inputFile": "missing.json", - "dryRun": false, - "counts": { - "totalBucketsProcessed": 3, - "totalBucketsFixed": 3, - "policiesCreated": 3, - "policiesAttached": 3, - "keysCreated": 1, - "keysDeleted": 1, - "errors": 0 - } - }, - "fixes": [ - { - "accountId": "267390090509", - "accountName": "testaccount", - "roleName": "crr-role-outdated", - "roleArn": "arn:aws:iam::267390090509:role/crr-role-outdated", - "policyName": "s3-replication-audit-fix-bucket-old-1", - "policyArn": "arn:aws:iam::267390090509:policy/s3-replication-audit-fix-bucket-old-1", - "bucket": "bucket-old-1", - "status": "success" - }, - { - "accountId": "267390090509", - "accountName": "testaccount", - "roleName": "crr-role-outdated", - "roleArn": "arn:aws:iam::267390090509:role/crr-role-outdated", - "policyName": "s3-replication-audit-fix-bucket-old-2", - "policyArn": "arn:aws:iam::267390090509:policy/s3-replication-audit-fix-bucket-old-2", - "bucket": "bucket-old-2", - "status": "success" - } - ], - "errors": [] -} -``` - -### Example Run - -``` -=== Fix Missing Replication Permissions === -Input: missing.json -Output: replication-fix-results.json -Vault/IAM: 13.50.166.21:8600 - -Processing 3 bucket(s) - -[1/3] Bucket "bucket-old-1" — role "crr-role-outdated" — account "testaccount" - Created policy "s3-replication-audit-fix-bucket-old-1" - Attached policy to role "crr-role-outdated" -[2/3] Bucket "bucket-old-2" — role "crr-role-outdated" — account "testaccount" - Created policy "s3-replication-audit-fix-bucket-old-2" - Attached policy to role "crr-role-outdated" -[3/3] Bucket "bucket-old-3" — role "crr-role-outdated" — account "testaccount" - Created policy "s3-replication-audit-fix-bucket-old-3" - Attached policy to role "crr-role-outdated" -Deleted temp key for account "testaccount" (267390090509) - -=== Summary === -Buckets processed: 3 -Buckets fixed: 3 -Policies created: 3 -Policies attached: 3 -Keys created: 1 -Keys deleted: 1 -Errors: 0 -Duration: 0.7s -Output saved to: replication-fix-results.json - -Done. -``` - -### Idempotency - -The script is safe to run multiple times: - -- Each bucket has its own policy, so if it already exists the document is - guaranteed to be identical — `EntityAlreadyExists` is a true no-op -- Attaching an already-attached policy is a no-op in IAM -- Temporary access keys auto-expire after 15 minutes even if deletion fails - -### Troubleshooting - -**"No ownerDisplayName found for account"** - -- The input file is missing `ownerDisplayName`. Re-run `check-replication-permissions.js` - to generate a fresh output that includes this field. - -**"Failed to generate temp key"** - -- Verify admin credentials in the config file -- Ensure vault admin API is reachable on the specified host and port - -**IAM operation errors** - -- Check that the IAM port is correct (default 8600, may differ per deployment) -- Verify the role still exists in vault - -**"Failed to delete temp key"** - -- Non-critical: the key auto-expires after 15 minutes -- The error is logged but does not prevent other operations diff --git a/replicationAudit/check-replication-permissions.js b/replicationAudit/check-replication-permissions.js deleted file mode 100644 index 16407051..00000000 --- a/replicationAudit/check-replication-permissions.js +++ /dev/null @@ -1,495 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable no-console */ -/** - * check-replication-permissions.js - * - * Checks if replication roles have s3:ReplicateObject permission - * by querying Vault metadata directly via repd protocol. - * - * Usage: node check-replication-permissions.js [input-file] [leader-ip[:port]] [output-file] - * - * How it connects to vault metadata: - * - * Vault metadata has no HTTP frontend (no bucketd). This script connects - * directly to repd (the raft-based metadata store) using a simple - * protocol: 4-byte length prefix + JSON payload. The default repd port - * is 4300 but can be overridden via the leader-ip argument (e.g. - * 10.0.0.1:4301). - */ - -const net = require('net'); -const fs = require('fs'); - -// =========================================================================== -// Configuration -// =========================================================================== - -/** Parse a leader address string into { ip, port } */ -function parseLeaderAddress(address) { - if (!address) { - return { ip: '127.0.0.1', port: 4300 }; - } - const [ip, portStr] = address.split(':'); - return { ip, port: portStr ? parseInt(portStr, 10) : 4300 }; -} - -const parsedLeader = parseLeaderAddress(process.argv[3]); - -const CONFIG = { - inputFile: process.argv[2] || '/root/buckets-with-replication.json', - leaderIp: parsedLeader.ip, - outputFile: process.argv[4] || '/root/missing-replication-permissions.json', - repdPort: parsedLeader.port, - dbName: 'vaultdb', - includePolicies: process.argv.includes('--include-policies'), - requestTimeoutMs: 10000, -}; - -// =========================================================================== -// Logging -// =========================================================================== -function log(message) { - console.error(message); -} - -function logProgress(current, total, bucket, status) { - process.stderr.write(`[${current}/${total}] ${bucket} -> ${status}\n`); -} - -// =========================================================================== -// Protocol constants and encoding -// [FROM MetaData/lib/protocol.json and MetaData/lib/server/ProtoBuilder.js] -// -// Messages are framed as: [4-byte length][JSON payload] -// =========================================================================== -const PROTOCOL = { - FROM_REPD: 1, - TYPE_REQUEST: 1, - METHOD_GET: 2, - METHOD_LIST: 4, - HEADER_SIZE: 4, // 32-bit big-endian integer for message length -}; - -function encodeMessage(payload) { - const json = JSON.stringify(payload); - const jsonLength = Buffer.byteLength(json); - const buffer = Buffer.allocUnsafe(PROTOCOL.HEADER_SIZE + jsonLength); - buffer.writeInt32BE(jsonLength); - buffer.write(json, PROTOCOL.HEADER_SIZE); - return buffer; -} - -function tryReadMessage(buffer) { - if (buffer.length < PROTOCOL.HEADER_SIZE) { - return null; - } - - const jsonLength = buffer.readUInt32BE(0); - const totalLength = PROTOCOL.HEADER_SIZE + jsonLength; - - if (buffer.length < totalLength) { - return null; - } - - return { - data: JSON.parse(buffer.slice(PROTOCOL.HEADER_SIZE, totalLength).toString()), - remaining: buffer.slice(totalLength), - }; -} - -// =========================================================================== -// Vault database key generation -// [FROM vault/lib/Indexer.js] -// =========================================================================== -const VaultKeys = { - /** Get key for looking up role by ARN */ - roleByArn(roleArn) { - return `roleArn:${roleArn}`; - }, - - /** Get key prefix for policies attached to a role */ - policiesByRole(accountId, roleId) { - return `linkAccount:${accountId}:roleId:${roleId}:policy:`; - }, - - /** Get key for looking up policy by name */ - policyByName(accountId, policyName) { - return `accountId:${accountId}:policyName:${policyName}`; - }, - - /** Get range limits for prefix-based listing */ - getRangeLimits(prefix) { - const end = prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1); - return [prefix, end]; - }, - - /** Extract policy path and name from a policiesByRole key */ - extractPolicyFromKey(key) { - const policyPart = key.split(':policy:')[1] || ''; - const lastSlash = policyPart.lastIndexOf('/'); - - if (lastSlash === -1) { - return { path: '/', name: policyPart }; - } - - return { - path: policyPart.substring(0, lastSlash + 1), - name: policyPart.substring(lastSlash + 1), - }; - }, -}; - -// =========================================================================== -// Repd Client -// =========================================================================== -class RepdClient { - constructor(host, port, dbName) { - this.host = host; - this.port = port; - this.dbName = dbName; - this.client = null; - this.requestId = 0; - this.receiveBuffer = Buffer.alloc(0); - this.pendingCallback = null; - } - - connect() { - return new Promise((resolve, reject) => { - this.client = net.connect(this.port, this.host); - this.client.on('connect', resolve); - this.client.on('error', reject); - this.client.on('data', chunk => this.handleData(chunk)); - }); - } - - handleData(chunk) { - this.receiveBuffer = Buffer.concat([this.receiveBuffer, chunk]); - - const message = tryReadMessage(this.receiveBuffer); - if (message && this.pendingCallback) { - this.receiveBuffer = message.remaining; - const callback = this.pendingCallback; - this.pendingCallback = null; - callback(null, message.data); - } - } - - sendRequest(method, params) { - return new Promise((resolve, reject) => { - this.pendingCallback = (err, response) => { - if (err) { - reject(err); - } else { - resolve(response); - } - }; - - const request = { - from: PROTOCOL.FROM_REPD, - type: PROTOCOL.TYPE_REQUEST, - logUids: `check-${Date.now()}`, - repd: { - method, - id: ++this.requestId, - db: this.dbName, - ...params, - }, - }; - - this.client.write(encodeMessage(request)); - - setTimeout(() => { - if (this.pendingCallback) { - this.pendingCallback = null; - reject(new Error('Request timeout')); - } - }, CONFIG.requestTimeoutMs); - }); - } - - async get(key) { - const response = await this.sendRequest(PROTOCOL.METHOD_GET, { key }); - return response.repd?.data; - } - - async list(keyStart, keyEnd) { - const response = await this.sendRequest(PROTOCOL.METHOD_LIST, { - parameters: { - gte: keyStart, - lte: keyEnd, - keys: true, - values: true, - maxKeys: 1000, - }, - }); - return response.repd?.data || []; - } - - close() { - if (this.client) { - this.client.end(); - } - } -} - -// =========================================================================== -// Permission checking helpers -// =========================================================================== - -/** Extract account ID from a role ARN */ -function getAccountIdFromArn(arn) { - return arn.split(':')[4]; -} - -/** Check if a policy action matches s3:ReplicateObject */ -function isReplicateAction(action) { - return action === '*' - || action === 's3:*' - || action === 's3:Replicate*' - || action === 's3:ReplicateObject'; -} - -/** Check if a policy resource matches the bucket */ -function isMatchingResource(resource, bucketArn) { - return resource === '*' - || resource === 'arn:aws:s3:::*' - || resource === 'arn:aws:s3:::*/*' - || resource === bucketArn - || resource === `${bucketArn}/*`; -} - -/** Check if a policy document grants s3:ReplicateObject for a bucket */ -function policyAllowsReplication(policyDoc, bucketName) { - const bucketArn = `arn:aws:s3:::${bucketName}`; - const statements = [].concat(policyDoc.Statement || []); - - for (const statement of statements) { - if (statement.Effect !== 'Allow') { - continue; - } - - const actions = [].concat(statement.Action || []); - const hasReplicateAction = actions.some(isReplicateAction); - if (!hasReplicateAction) { - continue; - } - - const resources = [].concat(statement.Resource || []); - const hasMatchingResource = resources.some(r => isMatchingResource(r, bucketArn)); - if (hasMatchingResource) { - return true; - } - } - - return false; -} - -/** Extract the current policy document from stored policy data */ -function extractPolicyDocument(policyData) { - const policy = JSON.parse(policyData); - const defaultVersion = policy.defaultVersion || 1; - const version = (policy.versions || []).find(v => v.id === defaultVersion); - return version?.doc || {}; -} - -// =========================================================================== -// Core logic -// =========================================================================== - -/** - * Check if a bucket's replication role has s3:ReplicateObject permission - */ -async function checkBucketPermissions(repdClient, bucket, sourceRole) { - const accountId = getAccountIdFromArn(sourceRole); - const result = { - bucket, - sourceRole, - policies: [], - }; - - // Get role ID from ARN - const roleKey = VaultKeys.roleByArn(sourceRole); - const roleId = await repdClient.get(roleKey); - - if (!roleId) { - return { - hasPermission: false, - result: { ...result, error: 'Role not found in vault' }, - }; - } - - // List policies attached to the role - const policyKeyPrefix = VaultKeys.policiesByRole(accountId, roleId); - const [keyStart, keyEnd] = VaultKeys.getRangeLimits(policyKeyPrefix); - const policyLinks = await repdClient.list(keyStart, keyEnd); - - if (policyLinks.length === 0) { - return { - hasPermission: false, - result: { ...result, error: 'No policies attached to role' }, - }; - } - - // Check each attached policy - let hasPermission = false; - - for (const link of policyLinks) { - const { name: policyName, path: policyPath } = VaultKeys.extractPolicyFromKey(link.key); - const policyKey = VaultKeys.policyByName(accountId, policyName); - const policyData = await repdClient.get(policyKey); - - if (!policyData) { - continue; - } - - try { - const policyDoc = extractPolicyDocument(policyData); - const allowsReplication = policyAllowsReplication(policyDoc, bucket); - - const policyInfo = { - name: policyName, - path: policyPath, - allowsReplicateObject: allowsReplication, - }; - if (CONFIG.includePolicies) { - policyInfo.document = policyDoc; - } - result.policies.push(policyInfo); - - if (allowsReplication) { - hasPermission = true; - } - } catch (e) { - result.policies.push({ name: policyName, error: 'Failed to parse policy' }); - } - } - - return { hasPermission, result }; -} - -/** Build the output object with metadata and results */ -function buildOutput(buckets, results, stats, rolesChecked, startTime) { - const durationMs = Date.now() - startTime; - - return { - metadata: { - timestamp: new Date().toISOString(), - durationMs, - durationHuman: `${(durationMs / 1000).toFixed(1)}s`, - repdLeader: `${CONFIG.leaderIp}:${CONFIG.repdPort}`, - inputFile: CONFIG.inputFile, - counts: { - totalBuckets: buckets.length, - bucketsOk: stats.ok, - bucketsMissingPermission: stats.missing, - bucketsSkipped: stats.skipped, - bucketsWithErrors: stats.errors, - uniqueRolesChecked: rolesChecked.size, - }, - }, - results, - }; -} - -/** Print summary to stderr */ -function printSummary(bucketCount, stats, rolesChecked, durationHuman) { - log('\n=== Summary ==='); - log(`Total checked: ${bucketCount}`); - log(` OK: ${stats.ok}`); - log(` Missing permission: ${stats.missing}`); - log(` Skipped (no role): ${stats.skipped}`); - log(` Errors: ${stats.errors}`); - log(`Unique roles checked: ${rolesChecked.size}`); - log(`Duration: ${durationHuman}`); -} - -// =========================================================================== -// Main -// =========================================================================== -async function main() { - const startTime = Date.now(); - - log('=== Check Replication Role Permissions ==='); - log(`Input: ${CONFIG.inputFile}`); - log(`Output: ${CONFIG.outputFile}`); - log(`Repd: ${CONFIG.leaderIp}:${CONFIG.repdPort}`); - log(''); - - // Read input file - const inputData = JSON.parse(fs.readFileSync(CONFIG.inputFile, 'utf8')); - const buckets = inputData.results || inputData; // Support both old and new format - log(`Processing ${buckets.length} buckets...\n`); - - // Connect to repd - const repdClient = new RepdClient(CONFIG.leaderIp, CONFIG.repdPort, CONFIG.dbName); - await repdClient.connect(); - - const stats = { - ok: 0, - missing: 0, - skipped: 0, - errors: 0, - }; - const rolesChecked = new Set(); - const results = []; - - // Process each bucket - for (let i = 0; i < buckets.length; i++) { - const { bucket, sourceRole, ownerDisplayName } = buckets[i]; - - if (!sourceRole) { - logProgress(i + 1, buckets.length, bucket, 'SKIP (no role)'); - stats.skipped++; - continue; - } - - rolesChecked.add(sourceRole); - - try { - const { hasPermission, result } = await checkBucketPermissions(repdClient, bucket, sourceRole); - - if (hasPermission) { - logProgress(i + 1, buckets.length, bucket, 'OK'); - stats.ok++; - } else { - const reason = result.error || 's3:ReplicateObject'; - logProgress(i + 1, buckets.length, bucket, `MISSING: ${reason}`); - results.push({ ...result, ownerDisplayName }); - stats.missing++; - } - } catch (e) { - logProgress(i + 1, buckets.length, bucket, `ERROR: ${e.message}`); - results.push({ bucket, sourceRole, ownerDisplayName, error: e.message, policies: [] }); - stats.errors++; - } - } - - repdClient.close(); - - // Build and save output - const output = buildOutput(buckets, results, stats, rolesChecked, startTime); - fs.writeFileSync(CONFIG.outputFile, JSON.stringify(output, null, 2)); - - // Print summary - printSummary(buckets.length, stats, rolesChecked, output.metadata.durationHuman); - - if (results.length > 0) { - log(`Output saved to: ${CONFIG.outputFile}`); - } - - console.log(JSON.stringify(output, null, 2)); -} - -// Run main only when executed directly (not when required as a module) -if (require.main === module) { - main().catch(e => { - console.error('Fatal error:', e.message); - process.exit(1); - }); -} - -// Export for testing -module.exports = { - parseLeaderAddress, - policyAllowsReplication, -}; diff --git a/replicationAudit/fix-missing-replication-permissions.js b/replicationAudit/fix-missing-replication-permissions.js deleted file mode 100644 index 36d3a60e..00000000 --- a/replicationAudit/fix-missing-replication-permissions.js +++ /dev/null @@ -1,371 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable no-console */ -/** - * fix-missing-replication-permissions.js - * - * Reads the output of check-replication-permissions.js and creates IAM policies - * with s3:ReplicateObject for roles that are missing it, then attaches them. - * - * TBD: This script does not re-check whether the permission is still missing - * before applying the fix. It only checks that a policy named - * s3-replication-audit-fix- exists (EntityAlreadyExists) to make - * the script idempotent — re-running it won't create extra policies. But: - * - If someone manually added s3:ReplicateObject between check and fix, - * a redundant (but harmless) policy is created. - * - If the fix policy is later modified externally, re-running won't - * detect or correct it (EntityAlreadyExists skips the policy). - * We keep it simple today: the intended workflow is check → fix → re-check. - * Re-run check-replication-permissions.js after fixing to verify the result. - * - * Usage: node fix-missing-replication-permissions.js [output-file] [--iam-port ] [--https] [--dry-run] - * - * Requires: vaultclient, aws-sdk (both available in vault container) - * - * Note: This script uses aws-sdk v2 (not @aws-sdk/client-iam v3) because it - * is meant to be copied into the vault container of older S3C versions - * (before S3C 9.5.2 / Vault 7.84.0) where aws-sdk v2 is available but - * @aws-sdk/client-iam v3 is not. - */ - -const fs = require('fs'); -const http = require('http'); -const https = require('https'); -const { Client: VaultClient } = require('vaultclient'); -const AWS = require('aws-sdk'); - -// =========================================================================== -// Constants -// =========================================================================== -const POLICY_PREFIX = 's3-replication-audit-fix'; -const STATEMENT_ID = 'AllowReplicateObjectAuditFix'; -const KEY_DURATION_SECONDS = '900'; // 15-minute auto-expiry safety net - -// =========================================================================== -// Logging (stderr for progress, stdout reserved for JSON result) -// =========================================================================== -function log(message) { - console.error(message); -} - -// =========================================================================== -// Argument parsing (manual process.argv for Node 16+ compatibility) -// =========================================================================== -function getConfig() { - const args = process.argv.slice(2); - - const positionals = []; - let iamPort = 8600; - let useHttps = false; - let dryRun = false; - - for (let i = 0; i < args.length; i++) { - if (args[i] === '--iam-port') { - if (i + 1 >= args.length) { - throw new Error('Missing value for --iam-port'); - } - iamPort = parseInt(args[++i], 10); - } else if (args[i] === '--https') { - useHttps = true; - } else if (args[i] === '--dry-run') { - dryRun = true; - } else { - positionals.push(args[i]); - } - } - - if (positionals.length < 3) { - log('Usage: node fix-missing-replication-permissions.js' - + ' ' - + ' [output-file] [--iam-port ] [--https] [--dry-run]'); - process.exit(1); - } - - const [inputFile, vaultHost, adminConfig, outputFile] = positionals; - return { - inputFile, - vaultHost, - iamPort, - adminConfig, - useHttps, - outputFile: outputFile || 'replication-fix-results.json', - dryRun, - }; -} - -// =========================================================================== -// Helpers -// =========================================================================== - -/** Parse role ARN to extract account ID and role name */ -function parseRoleArn(arn) { - const match = arn.match(/^arn:aws:iam::(\d+):role\/(.+)$/); - if (!match) { - throw new Error(`Invalid role ARN: ${arn}`); - } - return { accountId: match[1], roleName: match[2] }; -} - -/** Build the IAM policy document for a single bucket */ -function buildPolicyDocument(bucket) { - return { - Version: '2012-10-17', - Statement: [{ - Sid: STATEMENT_ID, - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: `arn:aws:s3:::${bucket}/*`, - }], - }; -} - -function generateAccountAccessKeyAsync(client, accountName, options) { - return new Promise((resolve, reject) => { - client.generateAccountAccessKey(accountName, (err, res) => { - if (err) { - return reject(err); - } - return resolve(res); - }, options); - }); -} - -/** Create an IAM client for a given account */ -function createIAMClient(config, accessKeyId, secretKey) { - const protocol = config.useHttps ? 'https' : 'http'; - return new AWS.IAM({ - endpoint: `${protocol}://${config.vaultHost}:${config.iamPort}`, - region: 'us-east-1', - accessKeyId, - secretAccessKey: secretKey, - sslEnabled: config.useHttps, - httpOptions: { - agent: config.useHttps - ? new https.Agent({ keepAlive: true, rejectUnauthorized: false }) - : new http.Agent({ keepAlive: true }), - }, - }); -} - - -// =========================================================================== -// Main -// =========================================================================== -async function main() { - const startTime = Date.now(); - const config = getConfig(); - - log('=== Fix Missing Replication Permissions ==='); - log(`Input: ${config.inputFile}`); - log(`Output: ${config.outputFile}`); - log(`Vault/IAM: ${config.vaultHost}:${config.iamPort}`); - if (config.dryRun) { - log('Mode: DRY-RUN (no changes will be made)'); - } - log(''); - - // Read input - const input = JSON.parse(fs.readFileSync(config.inputFile, 'utf8')); - const entries = input.results || []; - if (entries.length === 0) { - log('No buckets with missing permissions. Nothing to fix.'); - process.exit(0); - } - - // Validate input format: ownerDisplayName is required (added in 1.17.5) - const missingOwner = entries.filter(e => !e.ownerDisplayName); - if (missingOwner.length > 0) { - log('ERROR: Input file is missing "ownerDisplayName" field in result entries.'); - log('This field was added in s3utils 1.17.5. If your input was generated'); - log('with version 1.17.4 or earlier, re-run check-replication-permissions.js'); - log('to produce an updated output.'); - process.exit(1); - } - - // Sort by sourceRole so entries in the same account are processed - // consecutively, maximising credential cache hits. - entries.sort((a, b) => (a.sourceRole < b.sourceRole ? -1 : 1)); - - log(`Processing ${entries.length} bucket(s)`); - log(''); - - // Read admin credentials - const adminCreds = JSON.parse(fs.readFileSync(config.adminConfig, 'utf8')); - - // Create vault admin client - const vaultAdmin = new VaultClient( - config.vaultHost, - config.iamPort, - config.useHttps, // useHttps - undefined, // key - undefined, // cert - undefined, // ca - config.useHttps, // ignoreCa (skip cert verification when using HTTPS) - adminCreds.accessKey, - adminCreds.secretKeyValue, - ); - - // Results tracking - const outcome = { - metadata: { - timestamp: new Date().toISOString(), - durationMs: 0, - inputFile: config.inputFile, - dryRun: config.dryRun, - counts: { - totalBucketsProcessed: entries.length, - totalBucketsFixed: 0, - policiesCreated: 0, - policiesAttached: 0, - keysCreated: 0, - keysDeleted: 0, - errors: 0, - }, - }, - fixes: [], - errors: [], - }; - - // Cache IAM client per account to reuse connections across buckets - // and for cleanup (key deletion). - // Map - const accountCache = new Map(); - - for (let i = 0; i < entries.length; i++) { - const entry = entries[i]; - const { accountId, roleName } = parseRoleArn(entry.sourceRole); - const { bucket, ownerDisplayName: accountName } = entry; - const policyName = `${POLICY_PREFIX}-${bucket}`; - const policyDocument = buildPolicyDocument(bucket); - - log(`[${i + 1}/${entries.length}] Bucket "${bucket}" — role "${roleName}" — account "${accountName}"`); - - const fix = { - accountId, - accountName, - roleName, - roleArn: entry.sourceRole, - policyName, - bucket, - status: 'pending', - }; - - if (config.dryRun) { - fix.status = 'dry-run'; - log(` [DRY-RUN] Would create policy "${policyName}"`); - log(` [DRY-RUN] Would attach to role "${roleName}"`); - outcome.fixes.push(fix); - continue; - } - - try { - // Get or create temporary credentials and IAM client for this account - if (!accountCache.has(accountId)) { - const keyResult = await generateAccountAccessKeyAsync( - vaultAdmin, accountName, - { durationSeconds: KEY_DURATION_SECONDS }, - ); - accountCache.set(accountId, { - accountName, - accessKeyId: keyResult.id, - iamClient: createIAMClient(config, keyResult.id, keyResult.value), - }); - outcome.metadata.counts.keysCreated++; - } - - const { iamClient } = accountCache.get(accountId); - - // Idempotent/safe to re-run: each bucket has its own policy, - // so EntityAlreadyExists means the exact same policy document - // already exists — a true no-op. AttachRolePolicy is also - // a no-op if the policy is already attached to the role. - let policyArn; - try { - const resp = await iamClient.createPolicy({ - PolicyName: policyName, - PolicyDocument: JSON.stringify(policyDocument), - }).promise(); - policyArn = resp.Policy.Arn; - outcome.metadata.counts.policiesCreated++; - log(` Created policy "${policyName}"`); - } catch (err) { - if (err.code === 'EntityAlreadyExists') { - policyArn = `arn:aws:iam::${accountId}:policy/${policyName}`; - log(` Policy "${policyName}" already exists, skipping`); - } else { - throw err; - } - } - - fix.policyArn = policyArn; - - await iamClient.attachRolePolicy({ - RoleName: roleName, - PolicyArn: policyArn, - }).promise(); - outcome.metadata.counts.policiesAttached++; - log(` Attached policy to role "${roleName}"`); - - fix.status = 'success'; - outcome.metadata.counts.totalBucketsFixed++; - } catch (err) { - fix.status = 'error'; - fix.error = err.message; - outcome.metadata.counts.errors++; - outcome.errors.push({ - accountId, - accountName, - roleName, - bucket, - policyName, - message: err.message, - }); - log(` ERROR: ${err.message}`); - } - - outcome.fixes.push(fix); - } - - // Cleanup: delete all temporary keys via IAM DeleteAccessKey - for (const [accountId, { accountName, accessKeyId, iamClient }] of accountCache) { - try { - await iamClient.deleteAccessKey({ - AccessKeyId: accessKeyId, - }).promise(); - outcome.metadata.counts.keysDeleted++; - log(`Deleted temp key for account "${accountName}" (${accountId})`); - } catch (err) { - log(`WARNING: Failed to delete temp key for account "${accountName}" (auto-expires in ${KEY_DURATION_SECONDS}s): ${err.message}`); - } - } - - // Finalize timing - const durationMs = Date.now() - startTime; - outcome.metadata.durationMs = durationMs; - - // Write output file - fs.writeFileSync(config.outputFile, JSON.stringify(outcome, null, 2)); - - // Print summary - log('\n=== Summary ==='); - log(`Buckets processed: ${outcome.metadata.counts.totalBucketsProcessed}`); - log(`Buckets fixed: ${outcome.metadata.counts.totalBucketsFixed}`); - log(`Policies created: ${outcome.metadata.counts.policiesCreated}`); - log(`Policies attached: ${outcome.metadata.counts.policiesAttached}`); - log(`Keys created: ${outcome.metadata.counts.keysCreated}`); - log(`Keys deleted: ${outcome.metadata.counts.keysDeleted}`); - log(`Errors: ${outcome.metadata.counts.errors}`); - log(`Duration: ${(durationMs / 1000).toFixed(1)}s`); - log(`Output saved to: ${config.outputFile}`); - log(''); - log('Done.'); - - // JSON result to stdout - console.log(JSON.stringify(outcome, null, 2)); - - process.exit(0); -} - -main().catch(e => { - console.error('Fatal error:', e.message); - process.exit(1); -}); diff --git a/replicationAudit/list-buckets-with-replication.sh b/replicationAudit/list-buckets-with-replication.sh deleted file mode 100755 index f4fcd6be..00000000 --- a/replicationAudit/list-buckets-with-replication.sh +++ /dev/null @@ -1,325 +0,0 @@ -#!/bin/bash -# -# list-buckets-with-replication.sh -# -# Lists all buckets with replication enabled by querying the S3 metadata API. -# Output is a JSON file with metadata and results. -# -# Usage: ./list-buckets-with-replication.sh -# -# Environment variables: -# BUCKETD_HOST - Bucketd hostname (default: localhost) -# BUCKETD_PORT - Bucketd port (default: 9000) -# BATCH_SIZE - Number of parallel requests (default: 10) -# OUTPUT_FILE - Output file path (default: buckets-with-replication.json) -# - -set -e - -# =========================================================================== -# Configuration -# =========================================================================== -BUCKETD_HOST="${BUCKETD_HOST:-localhost}" -BUCKETD_PORT="${BUCKETD_PORT:-9000}" -BUCKETD_URL="http://${BUCKETD_HOST}:${BUCKETD_PORT}" -BATCH_SIZE="${BATCH_SIZE:-10}" # low to not overload bucketd -OUTPUT_FILE="${OUTPUT_FILE:-buckets-with-replication.json}" - -# Runtime variables -TMP_DIR=$(mktemp -d) -START_TIME=$(date +%s) -TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") -FETCH_ERRORS=0 - -# Cleanup temporary directory on exit -trap "rm -rf $TMP_DIR" EXIT - -# =========================================================================== -# Helper functions -# =========================================================================== - -log() { - echo "$@" -} - -log_error() { - echo "Error: $@" >&2 -} - -check_dependencies() { - local missing=0 - for cmd in curl jq; do - if ! command -v "$cmd" &> /dev/null; then - log_error "$cmd is required but not installed" - missing=1 - fi - done - return $missing -} - -check_bucketd_connection() { - log "Checking bucketd connectivity..." - if ! curl -s --connect-timeout 5 "$BUCKETD_URL/_/healthcheck" > /dev/null 2>&1; then - log_error "Cannot connect to bucketd at $BUCKETD_URL" - return 1 - fi - log "Connected to bucketd" -} - -# Fetch all bucket names from the users..bucket database -# Handles pagination for large deployments -# Exits script on failure -fetch_bucket_list() { - local marker="" - local is_truncated="true" - - while [ "$is_truncated" = "true" ]; do - local url="$BUCKETD_URL/default/bucket/users..bucket" - [ -n "$marker" ] && url="${url}?marker=${marker}" - - local response - response=$(curl -sf "$url") || { - log_error "Failed to fetch bucket list from users..bucket" - exit 1 - } - - # Extract bucket names from response - # Keys are formatted as "{canonicalId}..|..{bucketName}" - echo "$response" | jq -r '.Contents[].key // empty' | sed 's/.*\.\.|\.\.//' - - # Check if there are more pages - is_truncated=$(echo "$response" | jq -r '.IsTruncated') - if [ "$is_truncated" = "true" ]; then - marker=$(echo "$response" | jq -r '.Contents[-1].key | @uri') - fi - done -} - -# Fetch bucket attributes for a batch of buckets -fetch_bucket_attributes_batch() { - local buckets=("$@") - local curl_args=() - - for bucket in "${buckets[@]}"; do - curl_args+=("-o" "$TMP_DIR/attr_${bucket}.json" "$BUCKETD_URL/default/attributes/$bucket") - done - - # Try parallel fetch first, fall back to sequential if not supported - curl -s --parallel --parallel-max "$BATCH_SIZE" "${curl_args[@]}" 2>/dev/null \ - || curl -s "${curl_args[@]}" 2>/dev/null \ - || true -} - -# Check if a bucket has replication enabled -# Returns 0 if replication is enabled, 1 otherwise -has_replication_enabled() { - local attr_file="$1" - - # Check if file exists and is not empty - if [ ! -f "$attr_file" ] || [ ! -s "$attr_file" ]; then - return 1 - fi - - # Check if replicationConfiguration exists - local repl_config - repl_config=$(jq -r '.replicationConfiguration // empty' "$attr_file" 2>/dev/null) - if [ -z "$repl_config" ] || [ "$repl_config" = "null" ]; then - return 1 - fi - - # Check if any rule is enabled - # Handle different API formats: enabled:true, status:"Enabled", Status:"Enabled" - local enabled_count - enabled_count=$(jq -r ' - .replicationConfiguration.rules // .replicationConfiguration.Rules // [] - | [.[] | select(.enabled == true or .status == "Enabled" or .Status == "Enabled")] - | length - ' "$attr_file" 2>/dev/null) - - if [ "$enabled_count" -gt 0 ]; then - return 0 - fi - - return 1 -} - -# Extract replication info from bucket attributes -extract_replication_info() { - local attr_file="$1" - local bucket="$2" - - local owner - local owner_display_name - local full_role - local source_role - - owner=$(jq -r '.owner // "unknown"' "$attr_file") - owner_display_name=$(jq -r '.ownerDisplayName // "unknown"' "$attr_file") - - # Role format is "sourceRole,destRole" - extract source role (before comma) - full_role=$(jq -r '.replicationConfiguration.role // .replicationConfiguration.Role // ""' "$attr_file") - source_role=$(echo "$full_role" | cut -d',' -f1) - - # Build JSON result object - jq -n \ - --arg bucket "$bucket" \ - --arg owner "$owner" \ - --arg ownerDisplayName "$owner_display_name" \ - --arg sourceRole "$source_role" \ - '{ - bucket: $bucket, - owner: $owner, - ownerDisplayName: $ownerDisplayName, - sourceRole: $sourceRole - }' -} - - -# Build the final output JSON with metadata -build_output() { - local bucket_count="$1" - local repl_count="$2" - local duration="$3" - local fetch_errors="$4" - - jq -n \ - --arg timestamp "$TIMESTAMP" \ - --argjson durationSeconds "$duration" \ - --arg bucketdUrl "$BUCKETD_URL" \ - --argjson totalBucketsScanned "$bucket_count" \ - --argjson bucketsWithReplication "$repl_count" \ - --argjson bucketsWithoutReplication "$((bucket_count - repl_count - fetch_errors))" \ - --argjson fetchErrors "$fetch_errors" \ - --slurpfile results "$TMP_DIR/results.ndjson" \ - '{ - metadata: { - timestamp: $timestamp, - durationSeconds: $durationSeconds, - bucketdUrl: $bucketdUrl, - counts: { - totalBucketsScanned: $totalBucketsScanned, - bucketsWithReplication: $bucketsWithReplication, - bucketsWithoutReplication: $bucketsWithoutReplication, - fetchErrors: $fetchErrors - } - }, - results: $results - }' -} - -print_summary() { - local bucket_count="$1" - local repl_count="$2" - local duration="$3" - local fetch_errors="$4" - - log "" - log "=== Summary ===" - log "Total buckets scanned: $bucket_count" - log " With replication: $repl_count" - log " Without replication: $((bucket_count - repl_count - fetch_errors))" - log " Fetch errors: $fetch_errors" - log "Duration: ${duration}s" - log "Output saved to: $OUTPUT_FILE" - log "" - log "Done." -} - -# =========================================================================== -# Main -# =========================================================================== - -main() { - log "=== List Buckets with Replication Enabled ===" - log "Bucketd: $BUCKETD_URL" - log "Batch size: $BATCH_SIZE" - log "Output file: $OUTPUT_FILE" - log "" - - # Check prerequisites - check_dependencies || exit 1 - check_bucketd_connection || exit 1 - - # Fetch list of all buckets - log "" - log "Step 1: Fetching bucket list..." - - # Stream bucket list to file (memory-efficient for large bucket counts) - fetch_bucket_list > "$TMP_DIR/buckets.txt" - - local bucket_count - bucket_count=$(wc -l < "$TMP_DIR/buckets.txt" | tr -d ' ') - - log "Found $bucket_count buckets (excluding internal buckets)" - - if [ "$bucket_count" -eq 0 ]; then - log "No buckets found" - echo '{"metadata":{},"results":[]}' > "$OUTPUT_FILE" - exit 0 - fi - - # Process buckets in batches - log "" - log "Step 2: Fetching bucket attributes in batches of $BATCH_SIZE..." - - local processed=0 - local batch_num=0 - local batch_start=1 - - # Initialize empty results file (NDJSON format: one JSON object per line) - : > "$TMP_DIR/results.ndjson" - - while [ "$batch_start" -le "$bucket_count" ]; do - batch_num=$((batch_num + 1)) - - # Read current batch from file (memory-efficient) - local batch=() - while IFS= read -r bucket; do - batch+=("$bucket") - done < <(sed -n "${batch_start},$((batch_start + BATCH_SIZE - 1))p" "$TMP_DIR/buckets.txt") - - local batch_count=${#batch[@]} - - # Fetch attributes for this batch - fetch_bucket_attributes_batch "${batch[@]}" - - # Process each bucket in the batch - for bucket in "${batch[@]}"; do - local attr_file="$TMP_DIR/attr_${bucket}.json" - - # Check if fetch failed (file missing or empty) - if [ ! -s "$attr_file" ]; then - FETCH_ERRORS=$((FETCH_ERRORS + 1)) - continue - fi - - if has_replication_enabled "$attr_file"; then - extract_replication_info "$attr_file" "$bucket" >> "$TMP_DIR/results.ndjson" - fi - - # Cleanup attribute file - rm -f "$attr_file" - done - - processed=$((processed + batch_count)) - batch_start=$((batch_start + BATCH_SIZE)) - log " Processed $processed/$bucket_count buckets (batch $batch_num)" - done - - # Calculate final stats - local repl_count - repl_count=$(jq -s 'length' "$TMP_DIR/results.ndjson" 2>/dev/null || echo 0) - - local end_time - end_time=$(date +%s) - - local duration=$((end_time - START_TIME)) - - # Build and save final output - build_output "$bucket_count" "$repl_count" "$duration" "$FETCH_ERRORS" > "$OUTPUT_FILE" - - # Print summary - print_summary "$bucket_count" "$repl_count" "$duration" "$FETCH_ERRORS" -} - -main "$@" diff --git a/tests/functional/replicationAudit/fixMissingReplicationPermissions.js b/tests/functional/replicationAudit/fixMissingReplicationPermissions.js deleted file mode 100644 index bc35cf13..00000000 --- a/tests/functional/replicationAudit/fixMissingReplicationPermissions.js +++ /dev/null @@ -1,662 +0,0 @@ -const { execFile } = require('child_process'); -const { promisify } = require('util'); -const fs = require('fs'); -const os = require('os'); -const path = require('path'); -const vaultclient = require('vaultclient'); -const { Logger } = require('werelogs'); -const { - CreateBucketCommand, - PutBucketVersioningCommand, - PutBucketReplicationCommand, -} = require('@aws-sdk/client-s3'); -const { - CreatePolicyCommand, - CreateRoleCommand, - AttachRolePolicyCommand, - ListAttachedRolePoliciesCommand, - ListAccessKeysCommand, - GetPolicyCommand, - GetPolicyVersionCommand, -} = require('@aws-sdk/client-iam'); - -const { - iamHost, - iamPort, - adminAccessKeyId, - adminSecretAccessKey, - createTestAccount, - deleteTestAccount, -} = require('../../utils/S3Setup'); - -const execFileAsync = promisify(execFile); - -const log = new Logger('fixMissingReplicationPermissions:test'); - -const SCRIPT_PATH = path.resolve(__dirname, '../../../replicationAudit/fix-missing-replication-permissions.js'); -const ROLE_NAME = 'crr-role-test'; -const POLICY_PREFIX = 's3-replication-audit-fix'; - -/** - * Set up CRR on the source account with a role that deliberately - * omits s3:ReplicateObject, so the fix script has something to fix. - */ -async function configureCrrWithMissingPermission(accountSource, accountDest) { - // Enable versioning on both buckets - await accountSource.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountSource.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - await accountDest.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountDest.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - - // Create a CRR policy that deliberately OMITS s3:ReplicateObject - const incompletePolicyDoc = { - Version: '2012-10-17', - Statement: [ - { - Effect: 'Allow', - Action: [ - 's3:GetObjectVersion', - 's3:GetObjectVersionAcl', - ], - Resource: [`arn:aws:s3:::${accountSource.bucketName}/*`], - }, - { - Effect: 'Allow', - Action: [ - 's3:ListBucket', - 's3:GetReplicationConfiguration', - ], - Resource: [`arn:aws:s3:::${accountSource.bucketName}`], - }, - ], - }; - - await accountSource.iamClient.send(new CreatePolicyCommand({ - PolicyName: 'crr-policy-incomplete', - PolicyDocument: JSON.stringify(incompletePolicyDoc), - })); - - // Create trust policy for backbeat - const trustDoc = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Principal: { Service: 'backbeat' }, - Action: 'sts:AssumeRole', - }], - }; - - await accountSource.iamClient.send(new CreateRoleCommand({ - RoleName: ROLE_NAME, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - - await accountSource.iamClient.send(new AttachRolePolicyCommand({ - RoleName: ROLE_NAME, - PolicyArn: `arn:aws:iam::${accountSource.accountId}:policy/crr-policy-incomplete`, - })); - - // Also set up destination account role (needed for replication config) - const destPolicyDoc = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: ['s3:ReplicateObject', 's3:ReplicateDelete'], - Resource: `arn:aws:s3:::${accountDest.bucketName}/*`, - }], - }; - await accountDest.iamClient.send(new CreatePolicyCommand({ - PolicyName: 'crr-policy-dest', - PolicyDocument: JSON.stringify(destPolicyDoc), - })); - await accountDest.iamClient.send(new CreateRoleCommand({ - RoleName: ROLE_NAME, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - await accountDest.iamClient.send(new AttachRolePolicyCommand({ - RoleName: ROLE_NAME, - PolicyArn: `arn:aws:iam::${accountDest.accountId}:policy/crr-policy-dest`, - })); - - // Configure bucket replication on source - await accountSource.s3Client.send(new PutBucketReplicationCommand({ - Bucket: accountSource.bucketName, - ReplicationConfiguration: { - Role: `arn:aws:iam::${accountSource.accountId}:role/${ROLE_NAME},` - + `arn:aws:iam::${accountDest.accountId}:role/${ROLE_NAME}`, - Rules: [{ - Prefix: '', - Status: 'Enabled', - Destination: { - Bucket: `arn:aws:s3:::${accountDest.bucketName}`, - }, - }], - }, - })); -} - -/** - * Build the missing.json input file matching check script output format. - */ -function buildInputFile(accountSource) { - return { - results: [{ - bucket: accountSource.bucketName, - ownerDisplayName: accountSource.accountName, - sourceRole: `arn:aws:iam::${accountSource.accountId}:role/${ROLE_NAME}`, - policies: [{ - name: 'crr-policy-incomplete', - path: '/', - allowsReplicateObject: false, - }], - }], - }; -} - -/** - * Run the fix script as a child process and return { stdout, stderr, exitCode }. - */ -async function runFixScript(args) { - try { - const { stdout, stderr } = await execFileAsync('node', [SCRIPT_PATH, ...args], { - timeout: 30000, - }); - return { stdout, stderr, exitCode: 0 }; - } catch (err) { - return { - stdout: err.stdout || '', - stderr: err.stderr || '', - exitCode: err.code || 1, - }; - } -} - -describe('fix-missing-replication-permissions', () => { - let vaultClient; - let accountSource; - let accountDest; - let tmpDir; - let adminConfigPath; - let inputFilePath; - let outputFilePath; - - beforeEach(async () => { - vaultClient = new vaultclient.Client( - iamHost, iamPort, - false, undefined, undefined, undefined, undefined, - adminAccessKeyId, adminSecretAccessKey, - ); - - log.info('Creating test accounts'); - accountSource = await createTestAccount(vaultClient); - accountDest = await createTestAccount(vaultClient); - log.info('Test accounts created', { - source: accountSource.accountName, - dest: accountDest.accountName, - }); - - await configureCrrWithMissingPermission(accountSource, accountDest); - - tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'fix-repl-test-')); - - adminConfigPath = path.join(tmpDir, 'admin-config.json'); - fs.writeFileSync(adminConfigPath, JSON.stringify({ - accessKey: adminAccessKeyId, - secretKeyValue: adminSecretAccessKey, - })); - - inputFilePath = path.join(tmpDir, 'missing.json'); - fs.writeFileSync(inputFilePath, JSON.stringify(buildInputFile(accountSource))); - - outputFilePath = path.join(tmpDir, 'output.json'); - }, 60000); - - afterEach(async () => { - await deleteTestAccount(vaultClient, accountSource); - await deleteTestAccount(vaultClient, accountDest); - fs.rmSync(tmpDir, { recursive: true, force: true }); - }, 60000); - - it('--dry-run does not modify IAM state', async () => { - const { stdout, exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - '--dry-run', - ]); - - expect(exitCode).toBe(0); - - const result = JSON.parse(stdout); - expect(result.fixes[0].status).toBe('dry-run'); - - // Verify no policy was attached - const attached = await accountSource.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: ROLE_NAME }), - ); - const auditFixPolicy = (attached.AttachedPolicies || []) - .find(p => p.PolicyName === `${POLICY_PREFIX}-${accountSource.bucketName}`); - expect(auditFixPolicy).toBeUndefined(); - }, 30000); - - it('creates policy and attaches it to the role', async () => { - const { stdout, exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(0); - - const result = JSON.parse(stdout); - expect(result.fixes[0].status).toBe('success'); - expect(result.metadata.counts.policiesCreated).toBe(1); - expect(result.metadata.counts.policiesAttached).toBe(1); - - const bucketPolicyName = `${POLICY_PREFIX}-${accountSource.bucketName}`; - - // Verify policy is attached to role - const attached = await accountSource.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: ROLE_NAME }), - ); - const auditFixPolicy = (attached.AttachedPolicies || []) - .find(p => p.PolicyName === bucketPolicyName); - expect(auditFixPolicy).toBeDefined(); - - // Verify policy document contains s3:ReplicateObject for this bucket - const policyArn = `arn:aws:iam::${accountSource.accountId}:policy/${bucketPolicyName}`; - const policyResp = await accountSource.iamClient.send( - new GetPolicyCommand({ PolicyArn: policyArn }), - ); - const versionId = policyResp.Policy.DefaultVersionId; - - const versionResp = await accountSource.iamClient.send( - new GetPolicyVersionCommand({ PolicyArn: policyArn, VersionId: versionId }), - ); - const policyDoc = JSON.parse(decodeURIComponent(versionResp.PolicyVersion.Document)); - const actions = policyDoc.Statement.flatMap(s => [].concat(s.Action)); - expect(actions).toContain('s3:ReplicateObject'); - - const resources = policyDoc.Statement.flatMap(s => [].concat(s.Resource)); - expect(resources).toContain(`arn:aws:s3:::${accountSource.bucketName}/*`); - }, 30000); - - it('idempotent: re-run does not fail or duplicate', async () => { - // First run: creates the policy - const first = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - expect(first.exitCode).toBe(0); - - const firstResult = JSON.parse(first.stdout); - expect(firstResult.metadata.counts.policiesCreated).toBe(1); - - // Second run: policy already exists, should reuse it - const second = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - expect(second.exitCode).toBe(0); - - const secondResult = JSON.parse(second.stdout); - expect(secondResult.fixes[0].status).toBe('success'); - expect(secondResult.metadata.counts.policiesCreated).toBe(0); - - // Verify no extra policies were attached to the role - const attached = await accountSource.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: ROLE_NAME }), - ); - const auditFixPolicies = (attached.AttachedPolicies || []) - .filter(p => p.PolicyName.startsWith(POLICY_PREFIX)); - expect(auditFixPolicies).toHaveLength(1); - }, 30000); - - it('temp key cleanup: no leftover access keys', async () => { - // Snapshot keys before the script runs - const keysBefore = await accountSource.iamClient.send(new ListAccessKeysCommand({})); - const keyIdsBefore = (keysBefore.AccessKeyMetadata || []).map(k => k.AccessKeyId); - - const { stdout, exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(0); - - const result = JSON.parse(stdout); - expect(result.metadata.counts.keysDeleted).toBe(result.metadata.counts.keysCreated); - - // Verify no new keys remain after the script - const keysAfter = await accountSource.iamClient.send(new ListAccessKeysCommand({})); - const keyIdsAfter = (keysAfter.AccessKeyMetadata || []).map(k => k.AccessKeyId); - expect(keyIdsAfter).toEqual(keyIdsBefore); - }, 30000); - - it('rejects input without ownerDisplayName', async () => { - const badInputPath = path.join(tmpDir, 'bad-missing.json'); - fs.writeFileSync(badInputPath, JSON.stringify({ - results: [{ - bucket: accountSource.bucketName, - // ownerDisplayName deliberately omitted - sourceRole: `arn:aws:iam::${accountSource.accountId}:role/${ROLE_NAME}`, - policies: [], - }], - })); - - const { exitCode } = await runFixScript([ - badInputPath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(1); - }, 30000); -}); - -describe('fix-missing-replication-permissions (multi-bucket and multi-role)', () => { - let vaultClient; - let accounts; - let tmpDir; - let adminConfigPath; - let outputFilePath; - - beforeEach(() => { - vaultClient = new vaultclient.Client( - iamHost, iamPort, - false, undefined, undefined, undefined, undefined, - adminAccessKeyId, adminSecretAccessKey, - ); - - accounts = []; - tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'fix-repl-test-')); - adminConfigPath = path.join(tmpDir, 'admin-config.json'); - fs.writeFileSync(adminConfigPath, JSON.stringify({ - accessKey: adminAccessKeyId, - secretKeyValue: adminSecretAccessKey, - })); - outputFilePath = path.join(tmpDir, 'output.json'); - }); - - afterEach(async () => { - for (const account of accounts) { - await deleteTestAccount(vaultClient, account); - } - fs.rmSync(tmpDir, { recursive: true, force: true }); - }, 60000); - - it('one role, multiple buckets: one policy per bucket', async () => { - const accountSource = await createTestAccount(vaultClient); - const accountDest = await createTestAccount(vaultClient); - accounts.push(accountSource, accountDest); - - // Create a second bucket in the source account - const secondBucket = `${accountSource.bucketName}-second`; - await accountSource.s3Client.send(new CreateBucketCommand({ Bucket: secondBucket })); - - // Enable versioning on all buckets - await accountSource.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountSource.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - await accountSource.s3Client.send(new PutBucketVersioningCommand({ - Bucket: secondBucket, - VersioningConfiguration: { Status: 'Enabled' }, - })); - await accountDest.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountDest.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - - // Create role in source account - const trustDoc = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Principal: { Service: 'backbeat' }, - Action: 'sts:AssumeRole', - }], - }; - await accountSource.iamClient.send(new CreateRoleCommand({ - RoleName: ROLE_NAME, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - - // Write input: same role referenced by two buckets - const inputFilePath = path.join(tmpDir, 'missing.json'); - const sourceRole = `arn:aws:iam::${accountSource.accountId}:role/${ROLE_NAME}`; - fs.writeFileSync(inputFilePath, JSON.stringify({ - results: [ - { - bucket: accountSource.bucketName, - ownerDisplayName: accountSource.accountName, - sourceRole, - policies: [], - }, - { - bucket: secondBucket, - ownerDisplayName: accountSource.accountName, - sourceRole, - policies: [], - }, - ], - })); - - const { stdout, exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(0); - - const result = JSON.parse(stdout); - // One fix entry per bucket - expect(result.fixes).toHaveLength(2); - expect(result.fixes.map(f => f.bucket)).toEqual( - expect.arrayContaining([accountSource.bucketName, secondBucket]), - ); - // One policy per bucket - expect(result.metadata.counts.policiesCreated).toBe(2); - expect(result.metadata.counts.totalBucketsFixed).toBe(2); - - // Verify each bucket has its own policy with the correct ARN - for (const bucketName of [accountSource.bucketName, secondBucket]) { - const policyName = `${POLICY_PREFIX}-${bucketName}`; - const policyArn = `arn:aws:iam::${accountSource.accountId}:policy/${policyName}`; - const policyResp = await accountSource.iamClient.send( - new GetPolicyCommand({ PolicyArn: policyArn }), - ); - const versionResp = await accountSource.iamClient.send( - new GetPolicyVersionCommand({ - PolicyArn: policyArn, - VersionId: policyResp.Policy.DefaultVersionId, - }), - ); - const policyDoc = JSON.parse(decodeURIComponent(versionResp.PolicyVersion.Document)); - const resources = policyDoc.Statement.flatMap(s => [].concat(s.Resource)); - expect(resources).toEqual([`arn:aws:s3:::${bucketName}/*`]); - } - }, 60000); - - it('two roles in the same account: two policies, one temp key', async () => { - const accountSource = await createTestAccount(vaultClient); - const accountDest = await createTestAccount(vaultClient); - accounts.push(accountSource, accountDest); - - const secondRoleName = 'crr-role-test-2'; - - // Create a second bucket - const secondBucket = `${accountSource.bucketName}-second`; - await accountSource.s3Client.send(new CreateBucketCommand({ Bucket: secondBucket })); - - // Enable versioning - await accountSource.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountSource.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - await accountSource.s3Client.send(new PutBucketVersioningCommand({ - Bucket: secondBucket, - VersioningConfiguration: { Status: 'Enabled' }, - })); - - // Create two roles in the same source account - const trustDoc = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Principal: { Service: 'backbeat' }, - Action: 'sts:AssumeRole', - }], - }; - await accountSource.iamClient.send(new CreateRoleCommand({ - RoleName: ROLE_NAME, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - await accountSource.iamClient.send(new CreateRoleCommand({ - RoleName: secondRoleName, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - - // Write input: two roles in the same account - const inputFilePath = path.join(tmpDir, 'missing.json'); - fs.writeFileSync(inputFilePath, JSON.stringify({ - results: [ - { - bucket: accountSource.bucketName, - ownerDisplayName: accountSource.accountName, - sourceRole: `arn:aws:iam::${accountSource.accountId}:role/${ROLE_NAME}`, - policies: [], - }, - { - bucket: secondBucket, - ownerDisplayName: accountSource.accountName, - sourceRole: `arn:aws:iam::${accountSource.accountId}:role/${secondRoleName}`, - policies: [], - }, - ], - })); - - const { stdout, exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(0); - - const result = JSON.parse(stdout); - expect(result.fixes).toHaveLength(2); - expect(result.metadata.counts.policiesCreated).toBe(2); - expect(result.metadata.counts.policiesAttached).toBe(2); - // Only one temp key for the single account - expect(result.metadata.counts.keysCreated).toBe(1); - expect(result.metadata.counts.keysDeleted).toBe(1); - - // Verify both policies exist (named by bucket, not role) - const attached1 = await accountSource.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: ROLE_NAME }), - ); - expect((attached1.AttachedPolicies || []) - .find(p => p.PolicyName === `${POLICY_PREFIX}-${accountSource.bucketName}`)).toBeDefined(); - - const attached2 = await accountSource.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: secondRoleName }), - ); - expect((attached2.AttachedPolicies || []) - .find(p => p.PolicyName === `${POLICY_PREFIX}-${secondBucket}`)).toBeDefined(); - }, 60000); - - it('two roles across different accounts: separate policies and keys', async () => { - const accountSource1 = await createTestAccount(vaultClient); - const accountSource2 = await createTestAccount(vaultClient); - const accountDest = await createTestAccount(vaultClient); - accounts.push(accountSource1, accountSource2, accountDest); - - // Enable versioning - await accountSource1.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountSource1.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - await accountSource2.s3Client.send(new PutBucketVersioningCommand({ - Bucket: accountSource2.bucketName, - VersioningConfiguration: { Status: 'Enabled' }, - })); - - // Create roles in each source account - const trustDoc = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Principal: { Service: 'backbeat' }, - Action: 'sts:AssumeRole', - }], - }; - await accountSource1.iamClient.send(new CreateRoleCommand({ - RoleName: ROLE_NAME, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - await accountSource2.iamClient.send(new CreateRoleCommand({ - RoleName: ROLE_NAME, - AssumeRolePolicyDocument: JSON.stringify(trustDoc), - })); - - // Write input: same role name but in two different accounts - const inputFilePath = path.join(tmpDir, 'missing.json'); - fs.writeFileSync(inputFilePath, JSON.stringify({ - results: [ - { - bucket: accountSource1.bucketName, - ownerDisplayName: accountSource1.accountName, - sourceRole: `arn:aws:iam::${accountSource1.accountId}:role/${ROLE_NAME}`, - policies: [], - }, - { - bucket: accountSource2.bucketName, - ownerDisplayName: accountSource2.accountName, - sourceRole: `arn:aws:iam::${accountSource2.accountId}:role/${ROLE_NAME}`, - policies: [], - }, - ], - })); - - const { stdout, exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(0); - - const result = JSON.parse(stdout); - expect(result.fixes).toHaveLength(2); - expect(result.fixes.every(f => f.status === 'success')).toBe(true); - expect(result.metadata.counts.policiesCreated).toBe(2); - // Two different accounts → two temp keys - expect(result.metadata.counts.keysCreated).toBe(2); - expect(result.metadata.counts.keysDeleted).toBe(2); - - // Verify each account has its own policy attached (named by bucket) - const attached1 = await accountSource1.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: ROLE_NAME }), - ); - expect((attached1.AttachedPolicies || []) - .find(p => p.PolicyName === `${POLICY_PREFIX}-${accountSource1.bucketName}`)).toBeDefined(); - - const attached2 = await accountSource2.iamClient.send( - new ListAttachedRolePoliciesCommand({ RoleName: ROLE_NAME }), - ); - expect((attached2.AttachedPolicies || []) - .find(p => p.PolicyName === `${POLICY_PREFIX}-${accountSource2.bucketName}`)).toBeDefined(); - }, 60000); - - it('empty results array exits with code 0', async () => { - const inputFilePath = path.join(tmpDir, 'empty.json'); - fs.writeFileSync(inputFilePath, JSON.stringify({ results: [] })); - - const { exitCode } = await runFixScript([ - inputFilePath, iamHost, adminConfigPath, outputFilePath, - '--iam-port', String(iamPort), - ]); - - expect(exitCode).toBe(0); - }, 30000); -}); diff --git a/tests/unit/CRR/ReplicationStatusUpdater.js b/tests/unit/CRR/ReplicationStatusUpdater.js index a9d3de9c..ec77a2a0 100644 --- a/tests/unit/CRR/ReplicationStatusUpdater.js +++ b/tests/unit/CRR/ReplicationStatusUpdater.js @@ -1,6 +1,7 @@ const werelogs = require('werelogs'); const assert = require('assert'); const { models } = require('@scality/arsenal'); +const { GetBucketReplicationCommand, ListObjectVersionsCommand } = require('@aws-sdk/client-s3'); const { initializeCrrWithMocks, @@ -30,7 +31,7 @@ describe('ReplicationStatusUpdater', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); // One for listObjectVersions, one for getBucketReplication expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', MaxKeys: 10, @@ -41,7 +42,7 @@ describe('ReplicationStatusUpdater', () => { })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }), + constructor: GetBucketReplicationCommand, input: expect.objectContaining({ Bucket: 'bucket0' }) @@ -103,7 +104,7 @@ describe('ReplicationStatusUpdater', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', MaxKeys: 10, @@ -114,7 +115,7 @@ describe('ReplicationStatusUpdater', () => { })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }), + constructor: GetBucketReplicationCommand, input: expect.objectContaining({ Bucket: 'bucket0' }) @@ -379,7 +380,7 @@ describe('ReplicationStatusUpdater', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', MaxKeys: 10, @@ -390,7 +391,7 @@ describe('ReplicationStatusUpdater', () => { })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }), + constructor: GetBucketReplicationCommand, input: expect.objectContaining({ Bucket: 'bucket0' }) @@ -431,10 +432,10 @@ describe('ReplicationStatusUpdater with specifics', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }) + constructor: ListObjectVersionsCommand })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }) + constructor: GetBucketReplicationCommand })); expect(crr.cloudserverclient.getMetadata).toHaveBeenCalledTimes(1); @@ -463,7 +464,7 @@ describe('ReplicationStatusUpdater with specifics', () => { expect(crr.s3.send).toHaveBeenCalledTimes(4); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', Prefix: undefined, @@ -473,10 +474,10 @@ describe('ReplicationStatusUpdater with specifics', () => { }) })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }) + constructor: GetBucketReplicationCommand })); expect(crr.s3.send).toHaveBeenNthCalledWith(3, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', KeyMarker: 'key0', @@ -484,7 +485,7 @@ describe('ReplicationStatusUpdater with specifics', () => { }) })); expect(crr.s3.send).toHaveBeenNthCalledWith(4, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }) + constructor: GetBucketReplicationCommand })); expect(crr.cloudserverclient.getMetadata).toHaveBeenCalledTimes(2); @@ -513,10 +514,10 @@ describe('ReplicationStatusUpdater with specifics', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }) + constructor: ListObjectVersionsCommand })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }) + constructor: GetBucketReplicationCommand })); expect(crr.cloudserverclient.getMetadata).toHaveBeenCalledTimes(1); expect(crr.cloudserverclient.putMetadata).toHaveBeenCalledTimes(1); @@ -542,7 +543,7 @@ describe('ReplicationStatusUpdater with specifics', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', Prefix: undefined, @@ -570,7 +571,7 @@ describe('ReplicationStatusUpdater with specifics', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }), + constructor: ListObjectVersionsCommand, input: expect.objectContaining({ Bucket: 'bucket0', Prefix: undefined, @@ -724,10 +725,10 @@ describe('ReplicationStatusUpdater with currentVersionOnly', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }) + constructor: ListObjectVersionsCommand })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }) + constructor: GetBucketReplicationCommand })); expect(crr.cloudserverclient.getMetadata).toHaveBeenCalledTimes(2); @@ -805,10 +806,10 @@ describe('ReplicationStatusUpdater with currentVersionOnly', () => { expect(crr.s3.send).toHaveBeenCalledTimes(2); expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }) + constructor: ListObjectVersionsCommand })); expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({ - constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }) + constructor: GetBucketReplicationCommand })); expect(crr.cloudserverclient.getMetadata).toHaveBeenCalledTimes(2); diff --git a/tests/unit/CompareRaftMembers/BlockDigestsStorage.js b/tests/unit/CompareRaftMembers/BlockDigestsStorage.js index 262fb099..3b7a2e21 100644 --- a/tests/unit/CompareRaftMembers/BlockDigestsStorage.js +++ b/tests/unit/CompareRaftMembers/BlockDigestsStorage.js @@ -6,22 +6,22 @@ describe('BlockDigestsStorage', () => { const keysRemainingToWrite = {}; let closeDone = false; const dbMock = { - batch: (array, cb) => { + batch: array => new Promise(resolve => { setTimeout(() => { array.forEach(item => { expect(item.type).toEqual('put'); expect(item.value).toEqual(keysRemainingToWrite[item.key]); delete keysRemainingToWrite[item.key]; }); - cb(); + resolve(); }, 10); - }, - close: cb => { + }), + close: () => new Promise(resolve => { setTimeout(() => { closeDone = true; - cb(); + resolve(); }, 10); - }, + }), }; const levelStream = new BlockDigestsStorage({ db: dbMock }); for (let i = 0; i < nKeysToWrite; ++i) { diff --git a/tests/unit/CompareRaftMembers/DiffStream.js b/tests/unit/CompareRaftMembers/DiffStream.js index 20a1f42e..d8614956 100644 --- a/tests/unit/CompareRaftMembers/DiffStream.js +++ b/tests/unit/CompareRaftMembers/DiffStream.js @@ -49,36 +49,27 @@ class MockBucketStream extends stream.Readable { } } -class MockDigestsStream extends stream.Readable { - constructor(digestsToStream) { - super({ objectMode: true }); - this.digestsToStream = digestsToStream; - } - - _read() { - setTimeout(() => { - if (this.digestsToStream.length > 0) { - this.push(this.digestsToStream.shift()); - } else { - this.push(null); - } - }, 5); - } -} - class MockDigestsDB { constructor(storedDigests) { this.storedDigests = storedDigests; } - createReadStream(params) { + // mimics the iterators of abstract-level databases + iterator(params) { const { gte, lt } = params || {}; - return new MockDigestsStream( - this.storedDigests.filter( - digestEntry => (!gte || digestEntry.key >= gte) - && (!lt || digestEntry.key < lt), - ), + const digests = this.storedDigests.filter( + digestEntry => (!gte || digestEntry.key >= gte) + && (!lt || digestEntry.key < lt), ); + return { + next: () => new Promise(resolve => { + setTimeout(() => { + const digest = digests.shift(); + resolve(digest && [digest.key, digest.value]); + }, 5); + }), + close: async () => {}, + }; } } diff --git a/tests/unit/CompareRaftMembers/levelReadStream.js b/tests/unit/CompareRaftMembers/levelReadStream.js new file mode 100644 index 00000000..e77eff69 --- /dev/null +++ b/tests/unit/CompareRaftMembers/levelReadStream.js @@ -0,0 +1,130 @@ +const fs = require('fs'); +const os = require('os'); +const path = require('path'); +const { ClassicLevel } = require('classic-level'); + +const BlockDigestsStorage = require('../../../CompareRaftMembers/BlockDigestsStorage'); +const levelReadStream = require('../../../CompareRaftMembers/levelReadStream'); + +function collect(readable) { + return new Promise((resolve, reject) => { + const entries = []; + readable + .on('data', entry => entries.push(entry)) + .on('end', () => resolve(entries)) + .on('error', reject); + }); +} + +describe('levelReadStream', () => { + let tmpDir; + let levelPath; + + beforeAll(done => { + tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'levelReadStream-')); + levelPath = path.join(tmpDir, 'digests'); + const storage = new BlockDigestsStorage({ levelPath }); + ['bucket/a', 'bucket/b', 'bucket/c', 'bucket10/a'].forEach((lastKey, i) => { + storage.write({ size: i, digest: `digest${i}`, lastKey }); + }); + storage.end(); + storage.on('finish', done); + }); + + afterAll(() => { + fs.rmSync(tmpDir, { recursive: true, force: true }); + }); + + test('should stream the digests written by BlockDigestsStorage', async () => { + const db = new ClassicLevel(levelPath, { createIfMissing: false }); + const entries = await collect(levelReadStream(db)); + await db.close(); + expect(entries).toEqual([ + { key: 'bucket/a', value: '{"size":0,"digest":"digest0"}' }, + { key: 'bucket/b', value: '{"size":1,"digest":"digest1"}' }, + { key: 'bucket/c', value: '{"size":2,"digest":"digest2"}' }, + { key: 'bucket10/a', value: '{"size":3,"digest":"digest3"}' }, + ]); + }); + + test('should honor range options', async () => { + const db = new ClassicLevel(levelPath, { createIfMissing: false }); + const entries = await collect(levelReadStream(db, { gte: 'bucket/b', lt: 'bucket0' })); + await db.close(); + expect(entries.map(({ key }) => key)).toEqual(['bucket/b', 'bucket/c']); + }); + + test('should not end and release the iterator when destroyed from a data handler', async () => { + const db = new ClassicLevel(levelPath, { createIfMissing: false }); + const readable = levelReadStream(db); + const onEnd = jest.fn(); + readable.on('end', onEnd); + await new Promise(resolve => { + readable.once('data', () => { + readable.destroy(); + readable.on('close', resolve); + }); + }); + expect(onEnd).not.toHaveBeenCalled(); + // closing the database waits for open iterators to be closed + await db.close(); + expect(db.status).toEqual('closed'); + }); + + test('should drop an entry read after being destroyed', async () => { + let resolveNext; + const iterator = { + next: () => new Promise(resolve => { + resolveNext = resolve; + }), + close: jest.fn(async () => {}), + }; + const readable = levelReadStream({ iterator: () => iterator }); + const onData = jest.fn(); + readable.on('data', onData); + await new Promise(resolve => setImmediate(resolve)); + readable.destroy(); + resolveNext(['bucket/a', 'value']); + await new Promise(resolve => readable.on('close', resolve)); + expect(onData).not.toHaveBeenCalled(); + expect(iterator.close).toHaveBeenCalled(); + }); + + test('should emit iterator errors and close the iterator', async () => { + const iterator = { + next: async () => { + throw new Error('read failure'); + }, + close: jest.fn(async () => {}), + }; + const readable = levelReadStream({ iterator: () => iterator }); + await expect(collect(readable)).rejects.toThrow('read failure'); + expect(iterator.close).toHaveBeenCalled(); + }); + + test('should keep the read error when closing the iterator also fails', async () => { + const iterator = { + next: async () => { + throw new Error('read failure'); + }, + close: async () => { + throw new Error('close failure'); + }, + }; + const readable = levelReadStream({ iterator: () => iterator }); + await expect(collect(readable)).rejects.toThrow('read failure'); + }); + + test('should report a failure to close the iterator', async () => { + const iterator = { + next: () => new Promise(() => {}), + close: async () => { + throw new Error('close failure'); + }, + }; + const readable = levelReadStream({ iterator: () => iterator }); + const error = new Promise(resolve => readable.on('error', resolve)); + readable.destroy(); + await expect(error).resolves.toThrow('close failure'); + }); +}); diff --git a/tests/unit/SproxydKeysScan/DuplicateKeysWindowTest.js b/tests/unit/SproxydKeysScan/DuplicateKeysWindowTest.js index 3f4dea65..139f49b5 100644 --- a/tests/unit/SproxydKeysScan/DuplicateKeysWindowTest.js +++ b/tests/unit/SproxydKeysScan/DuplicateKeysWindowTest.js @@ -1,8 +1,11 @@ -const randomize = require('randomatic'); -const range = require('lodash/range'); +const crypto = require('crypto'); const { BoundedMap, MultiMap } = require('../../../ObjectRepair/DuplicateKeysWindow'); const { setupProcessor } = require('../../utils/setupProcessor'); +const range = n => Array.from({ length: n }, (_, i) => i); + +const randomize = (_pattern, length) => crypto.randomBytes(length / 2).toString('hex').toUpperCase(); + describe('DuplicateKeysWindow', () => { describe('BoundedMap', () => { test('grows in size up to the limit with each unique key', () => { diff --git a/tests/unit/SproxydKeysScan/SproxydKeysSubscribersTest.js b/tests/unit/SproxydKeysScan/SproxydKeysSubscribersTest.js index 38f3b790..613ecb28 100644 --- a/tests/unit/SproxydKeysScan/SproxydKeysSubscribersTest.js +++ b/tests/unit/SproxydKeysScan/SproxydKeysSubscribersTest.js @@ -1,13 +1,17 @@ -const randomize = require('randomatic'); -const range = require('lodash/range'); +const crypto = require('crypto'); const { setupProcessor } = require('../../utils/setupProcessor'); +const range = n => Array.from({ length: n }, (_, i) => i); + describe('SproxydKeysSubscribers', () => { describe('DuplicateSproxydKeyFoundHandler', () => { const [processor, duplicateHandler] = setupProcessor(10); const key = 'test-2021-11-24T19-41-08-494Z/2\u000098362217123979999997RG001 '; - const version = () => `${randomize('0', 3)}.${randomize('0', 3)}`; + const version = () => { + const digits = () => String(crypto.randomInt(1000)).padStart(3, '0'); + return `${digits()}.${digits()}`; + }; test('the higher (older) version is always repaired and then the lower (newer) version is set in map', () => { range(100).forEach(idx => { diff --git a/tests/unit/replicationAudit/policyChecker.js b/tests/unit/replicationAudit/policyChecker.js deleted file mode 100644 index fc595b4c..00000000 --- a/tests/unit/replicationAudit/policyChecker.js +++ /dev/null @@ -1,325 +0,0 @@ -const { - parseLeaderAddress, - policyAllowsReplication, -} = require('../../../replicationAudit/check-replication-permissions'); - -describe('parseLeaderAddress', () => { - test('ip only defaults port to 4300', () => { - expect(parseLeaderAddress('10.0.0.1')).toEqual({ ip: '10.0.0.1', port: 4300 }); - }); - - test('ip:port extracts both', () => { - expect(parseLeaderAddress('10.0.0.1:4301')).toEqual({ ip: '10.0.0.1', port: 4301 }); - }); - - test('undefined defaults to 127.0.0.1:4300', () => { - expect(parseLeaderAddress(undefined)).toEqual({ ip: '127.0.0.1', port: 4300 }); - }); - - test('empty string defaults to 127.0.0.1:4300', () => { - expect(parseLeaderAddress('')).toEqual({ ip: '127.0.0.1', port: 4300 }); - }); - - test('custom high port', () => { - expect(parseLeaderAddress('172.16.0.5:4304')).toEqual({ ip: '172.16.0.5', port: 4304 }); - }); -}); - -describe('policyAllowsReplication', () => { - const bucketName = 'source-bucket'; - - describe('valid policies (should allow)', () => { - test('policy with explicit s3:ReplicateObject and matching bucket', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with s3:* wildcard action', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:*', - Resource: '*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with full wildcard (*) action', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: '*', - Resource: '*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with s3:Replicate* wildcard', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:Replicate*', - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with action array including s3:ReplicateObject', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: [ - 's3:GetObjectVersion', - 's3:GetObjectVersionAcl', - 's3:ReplicateObject', - 's3:ReplicateDelete', - ], - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with resource array including matching bucket', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: [ - 'arn:aws:s3:::other-bucket/*', - 'arn:aws:s3:::source-bucket/*', - ], - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with multiple statements, one matching', () => { - const policy = { - Version: '2012-10-17', - Statement: [ - { - Effect: 'Allow', - Action: 's3:ListBucket', - Resource: 'arn:aws:s3:::source-bucket', - }, - { - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::source-bucket/*', - }, - ], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with arn:aws:s3:::* resource wildcard', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - - test('policy with exact bucket ARN (no /* suffix)', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::source-bucket', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(true); - }); - }); - - describe('invalid policies (should reject)', () => { - test('policy with Deny effect', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Deny', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('policy missing s3:ReplicateObject action', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: [ - 's3:GetObjectVersion', - 's3:GetObjectVersionAcl', - ], - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('policy with wrong bucket resource', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::other-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('policy with empty Statement array', () => { - const policy = { - Version: '2012-10-17', - Statement: [], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('policy with no Statement property', () => { - const policy = { - Version: '2012-10-17', - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('empty policy object', () => { - expect(policyAllowsReplication({}, bucketName)).toBe(false); - }); - - test('policy with only bucket-level actions (no object actions)', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: [ - 's3:ListBucket', - 's3:GetReplicationConfiguration', - ], - Resource: 'arn:aws:s3:::source-bucket', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('policy with s3:ReplicateDelete but not s3:ReplicateObject', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateDelete', - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('policy with partial bucket name match', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::source-bucket-backup/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - }); - - describe('edge cases', () => { - test('statement with missing Effect defaults to implicit deny', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Action: 's3:ReplicateObject', - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('statement with missing Action', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('statement with missing Resource', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('statement with null Action', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: null, - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('statement with empty Action array', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: [], - Resource: 'arn:aws:s3:::source-bucket/*', - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - - test('statement with empty Resource array', () => { - const policy = { - Version: '2012-10-17', - Statement: [{ - Effect: 'Allow', - Action: 's3:ReplicateObject', - Resource: [], - }], - }; - expect(policyAllowsReplication(policy, bucketName)).toBe(false); - }); - }); -}); diff --git a/utapi/requirements.txt b/utapi/requirements.txt index ad80d97a..a36233ad 100644 --- a/utapi/requirements.txt +++ b/utapi/requirements.txt @@ -1,5 +1,5 @@ -certifi==2022.6.15 -charset-normalizer==2.1.0 -idna==3.3 -requests==2.28.1 -urllib3==1.26.11 +certifi==2026.7.22 +charset-normalizer==3.5.2 +idna==3.20 +requests==2.34.2 +urllib3==2.8.0 diff --git a/utils/heapProfiler.js b/utils/heapProfiler.js index 34b68f41..7e293184 100644 --- a/utils/heapProfiler.js +++ b/utils/heapProfiler.js @@ -1,7 +1,7 @@ const fs = require('fs'); const path = require('path'); +const v8 = require('v8'); const werelogs = require('werelogs'); -const heapdump = require('heapdump'); const logger = new werelogs.Logger('Utils::HeapProfiler'); @@ -10,15 +10,14 @@ function generateFilename(dir) { } function writeSnapshot(filename) { - heapdump.writeSnapshot(filename, (err, filename) => { - if (err) { - logger.error(`unable to write heapdump to ${filename}:`, { - error: err, - }); - } else { - logger.debug(`heapdump written to ${filename}:`); - } - }); + try { + v8.writeHeapSnapshot(filename); + logger.debug(`heapdump written to ${filename}:`); + } catch (err) { + logger.error(`unable to write heapdump to ${filename}:`, { + error: err, + }); + } } module.exports = (dir, interval) => { diff --git a/yarn.lock b/yarn.lock index 49c6fb32..85d02cba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -315,14 +315,6 @@ "@smithy/types" "^4.19.0" tslib "^2.6.2" -"@aws-sdk/node-http-handler@^3.374.0": - version "3.374.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.374.0.tgz#8cd58b4d9814713e26034c12eabc119c113a5bc4" - integrity sha512-v1Z6m0wwkf65/tKuhwrtPRqVoOtNkDTRn2MBMtxCwEw+8V8Q+YRFqVgGN+J1n53ktE0G5OYVBux/NHiAjJHReQ== - dependencies: - "@smithy/node-http-handler" "^1.0.2" - tslib "^2.5.0" - "@aws-sdk/signature-v4-multi-region@^3.996.47": version "3.996.47" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.47.tgz#4a707c1d5b43ea242897c393b03f8583fcfbb8ab" @@ -550,7 +542,7 @@ events "^3.3.0" tslib "^2.8.1" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.29.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== @@ -564,7 +556,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.7.tgz#6f0237f0f36d2e51c0570a636faed9d2d0efe629" integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": +"@babel/core@^7.23.9", "@babel/core@^7.27.4": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.7.tgz#80c10b17248082968b57a857b91640971f2070f7" integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== @@ -585,7 +577,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.29.7", "@babel/generator@^7.29.8", "@babel/generator@^7.7.2": +"@babel/generator@^7.27.5", "@babel/generator@^7.29.7", "@babel/generator@^7.29.8": version "7.29.8" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.8.tgz#4b0b887885422643339e09022148a4c4ebaa4979" integrity sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg== @@ -657,7 +649,7 @@ "@babel/template" "^7.29.7" "@babel/types" "^7.29.7" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.29.7", "@babel/parser@^7.29.8": +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.29.7", "@babel/parser@^7.29.8": version "7.29.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.9.tgz#e7ee0a24f752c5296c6455855ccb72662e67ea96" integrity sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA== @@ -713,7 +705,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.7.2": +"@babel/plugin-syntax-jsx@^7.27.1": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz#622c16f9ad63782fe6e83dadc7e40330744b7f1e" integrity sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A== @@ -776,14 +768,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.27.1": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz#7c29388932313ed58413a0343048d75d92fb5b24" integrity sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA== dependencies: "@babel/helper-plugin-utils" "^7.29.7" -"@babel/template@^7.29.7", "@babel/template@^7.3.3": +"@babel/template@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== @@ -805,7 +797,7 @@ "@babel/types" "^7.29.8" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.28.2", "@babel/types@^7.29.7", "@babel/types@^7.29.8", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.29.7", "@babel/types@^7.29.8": version "7.29.8" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.8.tgz#1229eef31d85156d70fa3f4cd859376d0eaf6863" integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== @@ -818,7 +810,29 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": +"@emnapi/core@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467" + integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw== + dependencies: + "@emnapi/wasi-threads" "1.2.1" + tslib "^2.4.0" + +"@emnapi/runtime@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c" + integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz#28fed21a1ba1ce797c44a070abc94d42f3ae8548" + integrity sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w== + dependencies: + tslib "^2.4.0" + +"@eslint-community/eslint-utils@^4.8.0": version "4.10.1" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz#8911bd72b2c3640a543609e0400b8c4d2e7e7cb6" integrity sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg== @@ -868,7 +882,7 @@ minimatch "^3.1.5" strip-json-comments "^3.1.1" -"@eslint/js@9.39.5": +"@eslint/js@9.39.5", "@eslint/js@^9.39.0": version "9.39.5" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.5.tgz#6f2fbcff75500d229d535e0a949ae13472c84787" integrity sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A== @@ -1009,197 +1023,235 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.6.tgz#8dc9afa2ac1506cb1a58f89940f1c124446c8df3" integrity sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw== -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== +"@jest/console@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-30.5.2.tgz#7c5d610e9a3a4edd96ecebbb332a64aaefb030d8" + integrity sha512-e8sQC4pCMHPBrPX7Hk8TJr+DM5dkUnImSTNag8SEWFAFAF6xIz4AJvCKapnrdHnZxep4bxw4PhG+ZbimYBMyKw== dependencies: - "@jest/types" "^29.6.3" + "@jest/types" "30.5.1" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" + chalk "^4.1.2" + jest-message-util "30.5.1" + jest-util "30.5.1" slash "^3.0.0" -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" +"@jest/core@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-30.5.2.tgz#79ca6ec15ec407380a9202e861aee314c294c9f3" + integrity sha512-/jqvFWoJF7LV1a6AUpYMbMm+2yIYsHJfR474H0SCzr9k8tnO/jl9wRg6zSG6lxgf6EozNlCG4amFzWsbZSvvZA== + dependencies: + "@jest/console" "30.5.2" + "@jest/pattern" "30.5.0" + "@jest/reporters" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + ci-info "^4.2.0" + exit-x "^0.2.2" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.11" + jest-changed-files "30.5.1" + jest-config "30.5.2" + jest-haste-map "30.5.1" + jest-message-util "30.5.1" + jest-regex-util "30.5.0" + jest-resolve "30.5.1" + jest-resolve-dependencies "30.5.2" + jest-runner "30.5.2" + jest-runtime "30.5.2" + jest-snapshot "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" + jest-watcher "30.5.2" + pretty-format "30.5.1" slash "^3.0.0" - strip-ansi "^6.0.0" -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== +"@jest/diff-sequences@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.5.0.tgz#b896d470df751cc0c7d1a0c5078f80a67ce108d4" + integrity sha512-OsqBjHXCn8cadasoAZBP6nWYvMsRhpMzGXTpxJ5aO04NlbdhIz+FVe3q49l0AwVhsz/cEmIpBes6gAFl1/dWQg== + +"@jest/environment@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-30.5.2.tgz#9f28a93aaa5569dab513c358843bec855c154b6d" + integrity sha512-nwFPOUMbmsjNNRCpnJpB9HbSZu4C07wDDds++5j+j1MezzPLxMPDdbdUVjr2o4RULDOValnDd70taPFI1EtxAg== dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/fake-timers" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - jest-mock "^29.7.0" + jest-mock "30.5.2" -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== +"@jest/expect-utils@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-30.5.2.tgz#448c3f7bdc3d8f8afa794c839550cdd72962c0db" + integrity sha512-d/HOLSrJUlBIl6n3LzOa7cjW3xdePm5H5gQw2lixZ/0h157l9sw3mLblzFqnPcTbhDzhRQdBOX3A3KcG73nm5Q== dependencies: - jest-get-type "^29.6.3" + "@jest/get-type" "30.5.0" -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== +"@jest/expect@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-30.5.2.tgz#28f85a12a0adc8910cee9d9e98cc147be84a3dd5" + integrity sha512-2E+1Pg6jJxbRjLNLpciC71iri/3qsKJL222/aXJEFwC0VdUSvfS+JZQQLEVjUYYc8t8pQu2MGE3cF2+bNTYRsg== dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" + expect "30.5.2" + jest-snapshot "30.5.2" -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== +"@jest/fake-timers@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-30.5.2.tgz#ce33f0db5dbd116ac9299c59550f9083f0f8a889" + integrity sha512-GKk0h0tKT5SpDPxDhPg3r9mm5s8/YCBzVNMOGdRiQXwUiMsjU10mVPlMaQstH6/cu50vOb8N9oQUMETHuwwxKw== dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" + "@jest/types" "30.5.1" + "@sinonjs/fake-timers" "^15.4.0" "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + jest-message-util "30.5.1" + jest-mock "30.5.2" + jest-util "30.5.1" + +"@jest/get-type@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/get-type/-/get-type-30.5.0.tgz#0fc76dd792523bf05d7715a18041c185f9128cc4" + integrity sha512-9/2VUPitAjmBzbvDvqrxmvB7BzWsBW0WmkkojX1ODuxX1NLGxx9gfaZpHB0z8DtJ9uhGNmZG/VXBhf8uO0OV8Q== + +"@jest/globals@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-30.5.2.tgz#6e89c0b6334fc4b9cd9b18fa4495edc7783e856f" + integrity sha512-62zfS+dL+M5aTNHXCNLyqD+j4oqxTIzDYrZbpqMP8Yn+gvlAGyzC6BSPNb1ZmFOakV1RtFYX/O3FCQXSWmQdgg== + dependencies: + "@jest/environment" "30.5.2" + "@jest/expect" "30.5.2" + "@jest/types" "30.5.1" + jest-mock "30.5.2" + +"@jest/pattern@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/pattern/-/pattern-30.5.0.tgz#9f5dd0596a684b81eba2d7c1dfdca8d09978d326" + integrity sha512-HdNQYSdRTEBNrginaqzQtTjG0HRMfrra/z6Ok7uL3S87vSlarIVohEsJsSj5edu3MiHoHjAkvPROz5ZjoKai+w== dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" + "@types/node" "*" + jest-regex-util "30.5.0" -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== +"@jest/react-is-18@npm:react-is@^18.3.1": + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +"@jest/react-is-19@npm:react-is@^19.2.5": + version "19.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.3.1.tgz#81f7f7e431fc9b5bd9781b0a9f19997f08dee51b" + integrity sha512-RRieF6IyxQBkcK6pP8xOHprLTPW6QjRkbGdImtqNme+/hYVwCZkLQLdlZGOhUqXwkS9IEynaGvPJtv6XB/cz0Q== + +"@jest/reporters@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-30.5.2.tgz#bbcf02e1532b9565c0fd90e805ac364df753b81a" + integrity sha512-ev6E9iG73twQcfAfoTnviuYkr3yOrYbzAtMFCimv2fxHXPIp9PBt2u1wNMt0aYWgl8FPwIcS8oqRJg6alnht4Q== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" + "@jest/console" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + "@jridgewell/trace-mapping" "^0.3.31" "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" + chalk "^4.1.2" + collect-v8-coverage "^1.0.2" + exit-x "^0.2.2" + glob "^13.0.6" + graceful-fs "^4.2.11" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" + istanbul-lib-source-maps "^5.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" + jest-message-util "30.5.1" + jest-util "30.5.1" + jest-worker "30.5.1" slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" + string-length "^4.0.2" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== +"@jest/schemas@30.5.0": + version "30.5.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-30.5.0.tgz#781f142de46345b903f43140b15865732abfd356" + integrity sha512-/hunigyNpc4RCjC0VaW3f5RCUZVM2+WQ65qP7z083Gmvac7or2LI50XVNOtE4YPgBpV0yxYiAgorAPGniCoJmg== dependencies: - "@sinclair/typebox" "^0.27.8" + "@sinclair/typebox" "^0.34.0" -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== +"@jest/snapshot-utils@30.5.1": + version "30.5.1" + resolved "https://registry.yarnpkg.com/@jest/snapshot-utils/-/snapshot-utils-30.5.1.tgz#172720d0546ab05d5a7dc7fa3feb74c166c96310" + integrity sha512-V3wnxNtiVmw5PPVg433Cn3VdXnsOeu/ofLw3KC04Bn2y1wIlU5kozXQn48rhrgj/02LrCVtntTEF1yBha0XSUw== dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" + "@jest/types" "30.5.1" + chalk "^4.1.2" + graceful-fs "^4.2.11" + natural-compare "^1.4.0" + +"@jest/source-map@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-30.5.2.tgz#454b15d5709e7b6d81cb5619d68106482b424da0" + integrity sha512-c5CehvkbfHX6yyNg7bMn2ylqlp9AHXuZ/3hPH/Lh5bxD/vefd/lV9HBjMqXef9yQNqkdwyZvkLSVSwB38hy8Qw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.31" + callsites "^3.1.0" + convert-source-map "^2.0.0" + graceful-fs "^4.2.11" + +"@jest/test-result@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-30.5.2.tgz#eac81c284adc34a5be311d877f7f6b18173e38ae" + integrity sha512-eO6YU5rsLfs60ne694e0IAmRgeBnoA8mu0nlxXDbl/1j5km0o2vO9/VbbUIKIH+WRKKEI+ELgwraRGn2Lhep8g== + dependencies: + "@jest/console" "30.5.2" + "@jest/types" "30.5.1" + "@types/istanbul-lib-coverage" "^2.0.6" + collect-v8-coverage "^1.0.2" + +"@jest/test-sequencer@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-30.5.2.tgz#6ddef45f8f8be150482e6e8a58eaae24f114495a" + integrity sha512-bmij8jZyYAC47ExT2GeP7PcrlwSNS+Bp3KeRuBH88gpcxqDv6fljN8PemS4J/lLZ79xb6mpaennQTTq0zUAVVg== + dependencies: + "@jest/test-result" "30.5.2" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" slash "^3.0.0" -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== +"@jest/transform@30.5.2": + version "30.5.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-30.5.2.tgz#3b4a7d43b3ba4ee1926cfcca8e271eb47d65a5d6" + integrity sha512-LBGwmaE886C41jDZ65eqR1YbXM7642MK3ZhTowZd5+xDlrDLuf4ePuDdDmVSvcr8NTVJ3MqxLkMbUCzuigUaoQ== dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" + "@babel/core" "^7.27.4" + "@jest/types" "30.5.1" + "@jridgewell/trace-mapping" "^0.3.31" + babel-plugin-istanbul "^8.0.0" + chalk "^4.1.2" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + jest-regex-util "30.5.0" + jest-util "30.5.1" + pirates "^4.0.7" slash "^3.0.0" - write-file-atomic "^4.0.2" + write-file-atomic "^5.0.1" -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== +"@jest/types@30.5.1": + version "30.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-30.5.1.tgz#dc08c773401c18ea0d9ca670fb4a10a22c8a4fb5" + integrity sha512-LvVYn83nnXPl+Rg98nvcFgjx6nRMTArhSn6RAX/w3ELn54S8A42TYZvsCMdGUqTM8S0wyXbtlQdU6Hi6dykj9g== dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" + "@jest/pattern" "30.5.0" + "@jest/schemas" "30.5.0" + "@types/istanbul-lib-coverage" "^2.0.6" + "@types/istanbul-reports" "^3.0.4" "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" + "@types/yargs" "^17.0.33" + chalk "^4.1.2" "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" @@ -1227,7 +1279,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz#f4c663e862f06dc98ca4d453862c46902789a18d" integrity sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw== -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.23", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.31": version "0.3.31" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== @@ -1252,6 +1304,13 @@ dependencies: sparse-bitfield "^3.0.3" +"@napi-rs/wasm-runtime@^1.1.4": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.5.tgz#8c728c07e2543d80e55ccb34158c4ae9d6bd13e8" + integrity sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA== + dependencies: + "@tybys/wasm-util" "^0.10.3" + "@nodable/entities@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-3.0.0.tgz#694703bc864d30eaed55c2e3def00dbd61493670" @@ -1275,10 +1334,10 @@ dependencies: semver "^7.3.5" -"@opentelemetry/api-logs@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.220.0.tgz#b2ed235de4b5f3c1769adfa5f3bc247d82cdfbc9" - integrity sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w== +"@opentelemetry/api-logs@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.223.0.tgz#12819b6542fbde1a394a592214b62990a3ad1615" + integrity sha512-Oepm6etVPFCn0VWB1t833iOTgz1eYBDUPxcrOR/XvwzD1+Ag9VzSPSrrKAFNJ/haatj+8CXbG47pZXvdNQKDJw== dependencies: "@opentelemetry/api" "^1.3.0" @@ -1287,320 +1346,269 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.1.tgz#c1b0346de336ba55af2d5a7970882037baedec05" integrity sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q== -"@opentelemetry/configuration@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/configuration/-/configuration-0.220.0.tgz#f15670ecaa22b53442a1de6243dd86fd512ade4a" - integrity sha512-glfIVKnZevRin8fY/9uES/mhRtMT1lGINLHc9MIo5fTQZXswEEHamJtgjv4MTtzgnhHGC92mIS/0lzAUZMyE0w== +"@opentelemetry/configuration@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/configuration/-/configuration-0.223.0.tgz#b1996cf691aa8ffe155bf22c11d4ce0348848eba" + integrity sha512-KgyHXS8weyh+mJWVZ2+3hmu7J4mwU661Y8yQ1PvBAEY7G63X8qfGr6uN61MNJrN+YzP+dC5x6PmBEgdh7x6coQ== dependencies: - "@opentelemetry/core" "2.9.0" + "@opentelemetry/core" "2.12.0" yaml "^2.8.3" -"@opentelemetry/context-async-hooks@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.9.0.tgz#02378d315fb648401a01ce6e119f6744f80bb1be" - integrity sha512-OQ0vzvbZBiUhjqLnUaoNfYmP8553Crr3aggB4y0ZUi815mZ7idpdJXQmoKdeBKJelYttoBlLSSHubmyw3wvX4w== - -"@opentelemetry/core@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.11.0.tgz#97849d3808bba652568b7d53e20c9fc38bcb7c49" - integrity sha512-7YP44XH0tV6+Mb54x2YGf84i7yi+31MBZlE8JwvozkxyTvXbSp10X7cI7YE49ChJ3shMJoBmCJF3+1QFBJctGA== - dependencies: - "@opentelemetry/semantic-conventions" "^1.29.0" +"@opentelemetry/context-async-hooks@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.12.0.tgz#2ab3fa3027d05b0f4019c309dd4def1af0dc22ac" + integrity sha512-iK/1nD7mmZVkuYjVjkdFBiCvzntJdFny1S3CYbUYyOq7V5enL6XX+gJ7eh965L1LnS11VA8mQ7Ej/ck04SB0MQ== -"@opentelemetry/core@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.9.0.tgz#49de86106f86255b471b2ff035ef1003a851b252" - integrity sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw== +"@opentelemetry/core@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.12.0.tgz#b44e9806111f066a2df578e37fc88ef46ccdfe20" + integrity sha512-1HsSAuvT4/my0QrXWsyXFdWjKaPeCHsismKZgEEIb8NK13LP6DrMRlsUbvD/0F9mDWK3xDom9AMv3IscxgOnOQ== dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/exporter-logs-otlp-grpc@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.220.0.tgz#3c71480bfc4fe59f17c2f45de26a39b72d4d251d" - integrity sha512-s0sRPCSlXYqlgObOpCftomJllp3LfUL9FobQ5csg2172ydVhSEnu1ptpsVBJadazs5nUNp7vDuLE03FAFWTLOQ== - dependencies: - "@grpc/grpc-js" "^1.14.3" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/sdk-logs" "0.220.0" - -"@opentelemetry/exporter-logs-otlp-http@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.220.0.tgz#355bc4c1b7f0bced40ce3643f9513bb4053b43de" - integrity sha512-8186thl+pTw64iz/qEEen5oJZoZ/gO73XruChdaGlYdWOdBIQ42r+vHLf6a7vIDqTD4b8ZOoMlyxptanECaI9A== - dependencies: - "@opentelemetry/api-logs" "0.220.0" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/sdk-logs" "0.220.0" - -"@opentelemetry/exporter-logs-otlp-proto@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.220.0.tgz#51d9bd8b75932ff0cad07c118c074dbc42260cea" - integrity sha512-8LZAxdJ0ENDAFwr4j0oY35mHBltiSzvlhdQAPGiC7p9VnxtuSq4SW1gfBAdW6t6hiQG6OwUl8w7KHaOdJPKHWg== - dependencies: - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/sdk-logs" "0.220.0" - -"@opentelemetry/exporter-metrics-otlp-grpc@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.220.0.tgz#edc452e205864794d0f5031edd46b36587761907" - integrity sha512-U128izvJfX/dW9jRGP0gIfadR1Hg7ft3UEGIeRxLFK70m2BWw6AtNCOnsUygpw2zCgR/ygdWbGpcL6TmhW0ZGw== - dependencies: - "@grpc/grpc-js" "^1.14.3" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.220.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-metrics" "2.9.0" - -"@opentelemetry/exporter-metrics-otlp-http@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.220.0.tgz#af6c83da440ff326f87970992b20f72c48d6b415" - integrity sha512-Yqt3RBw/bRVncaE9qIIhk4WfjbAQqXuP9FgAaU+IKPndnLEp/cUqZlSC324+bpmduRz7DoTjig8Ub0PeILWXUA== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-metrics" "2.9.0" - -"@opentelemetry/exporter-metrics-otlp-proto@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.220.0.tgz#03c7ddf90a6b23191d2e59666371a072b3ebb4d0" - integrity sha512-lyO+IQBdSvqHN/ZOW/OzrSWemtfD+HgWngn+HBNLhjy0YrCQQTz0OE/kSekH2Pl340dn9DWzhqHdz5Eftr+HLA== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.220.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-metrics" "2.9.0" - -"@opentelemetry/exporter-prometheus@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.220.0.tgz#443340a98b98c2d47d3ddf3827388bd15470ba64" - integrity sha512-JZD5DL/NBpVd2BHefvYosm3G40UZ/KzExLv5tc0eZe0CtrsHHtcOk3YPUxR2EINmUeBf8+w5UReTV8fFPn95lA== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-metrics" "2.9.0" +"@opentelemetry/exporter-logs-otlp-grpc@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.223.0.tgz#ce4bf372e6f454e91aabe5f908a74832731ad237" + integrity sha512-O/ztY4A+NRi9bQm9Wlj9aCh2s1lbnkA8tcv+88crBMqas6YK8AnPvKXSms3Mn1nto4ylAIQAAxjtbzCMZjGvwg== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/sdk-logs" "0.223.0" + +"@opentelemetry/exporter-logs-otlp-http@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.223.0.tgz#18ffc4d1bfb513f71c0fe1b1c39731c2aae5de3f" + integrity sha512-YQh9+t/JmV9OeRkoLhPb4yvcrWCX6lAOmXFos/JKoD+KITZYZoxf0acnwAk6YDI9O7fX68O2ka38hx1G9exl8w== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/sdk-logs" "0.223.0" + +"@opentelemetry/exporter-logs-otlp-proto@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.223.0.tgz#0f04fc2a7683304c7b11278ed13d66838e7a6217" + integrity sha512-wt33CkhmLfFDSRXNOABWQzVfks1PQvsRNIHqiY5Y5Hi6SiVF7iJYDTqpaUhbwcmyJYcB0LzBNvsic8GyufMxAA== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/sdk-logs" "0.223.0" + +"@opentelemetry/exporter-metrics-otlp-grpc@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.223.0.tgz#eb561494d72252b5158d05ffeb772a839fb3ee82" + integrity sha512-QneYDf2PWYAqmikS1/jeG8xCv0Q2EOSBm0RRM7IFU9zEnKLu7qxdlsz9t3YjxiAo7XzqfjTsJZys5qhYZAQ2PQ== + dependencies: + "@opentelemetry/exporter-metrics-otlp-http" "0.223.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + +"@opentelemetry/exporter-metrics-otlp-http@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.223.0.tgz#f856cf799ed9225a81b2b95ec3c22529e9117c2a" + integrity sha512-hNC8yai/+xCNyTuiOy6JFepXXA/sb/2jCzQRY7c2cUWz6owaidihlHUpO20B9/dj8JKPNo8rcn7ikTy7Cj+JaQ== + dependencies: + "@opentelemetry/core" "2.12.0" + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/resources" "2.12.0" + "@opentelemetry/sdk-metrics" "2.12.0" + +"@opentelemetry/exporter-metrics-otlp-proto@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.223.0.tgz#e4227b3ffd02e70fd92e44575289ee96569ec6ca" + integrity sha512-DlwYBlqUVlAQqGXOES1K92b6FyHwB2phwcsccXEQhE9Mz1CAEymQgyRwbPKjCbpySZE1ASy2s9t2kIQ1pU/tmg== + dependencies: + "@opentelemetry/exporter-metrics-otlp-http" "0.223.0" + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + +"@opentelemetry/exporter-prometheus@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.223.0.tgz#1091582ea7b0a86c83059888a549ba6ebba3d120" + integrity sha512-HhbN3/B8vG+JNKH2oLMynFFrz2O/o+WFklfwiVq3ffdRWOEZx1zHeYe6r86fn9BUSpQ2U5cXfQja+otTdzi5qQ== + dependencies: + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" + "@opentelemetry/sdk-metrics" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/exporter-trace-otlp-grpc@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.220.0.tgz#8b7cec3e4a74b82bf666c705e817396b9d8a4ba2" - integrity sha512-bv1xmNhmNwIM6MdUBw4yYuJeVcEViVLk3uD69vOQMwueHBnfyl/u0HnBlB1FNY/Te0UOzJzvcbyR8wN6b+iGbA== - dependencies: - "@grpc/grpc-js" "^1.14.3" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/sdk-trace" "2.9.0" - -"@opentelemetry/exporter-trace-otlp-http@0.220.0", "@opentelemetry/exporter-trace-otlp-http@^0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.220.0.tgz#f26c6c7964715d4eec8c70bfb2af2f1ede53d4bf" - integrity sha512-/+ExB3lRkf+erv4PnoywyL7RHKITidxtUpUTS55k7OQ0dB42S7gEF1gry7swb9MSm1hYLUhJg4QQh9W8SpwwqA== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-trace" "2.9.0" - -"@opentelemetry/exporter-trace-otlp-proto@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.220.0.tgz#67f2b1a630cd66dee7b4a8491cb6120dfb28522c" - integrity sha512-voTAD8XgJxlK7zLkXh8EzMB09zrQr3tyY/BsnDTlDiQU/UdK58MZ63A3mUjdEDrxMjCVmBHU3WQJhRmQe+Dvzg== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-trace" "2.9.0" - -"@opentelemetry/exporter-zipkin@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.9.0.tgz#68f0e7dc397461759c119b3dd4eb4d1ea9fe67ae" - integrity sha512-RwINoce2BH8T4obT5pMcAla2sWma1YZvYuaktWmTluQ0PkQdvv5D060rWI1+kawX+J2qBRcMbwrZJJNcMJUauQ== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-trace" "2.9.0" +"@opentelemetry/exporter-trace-otlp-grpc@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.223.0.tgz#98f55bd64dc1995d96464913175ab00c5ddc27fa" + integrity sha512-gYDt98a44cvdbJNL+fFCFO7k7qSGaWGZAb6WUXGCKL0RiRhF96N6jlH4wXMzS1daZoV5AMHZZixjaLpQBMhpvA== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/sdk-trace" "2.12.0" + +"@opentelemetry/exporter-trace-otlp-http@0.223.0", "@opentelemetry/exporter-trace-otlp-http@^0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.223.0.tgz#a3f85fcd9845adbee21a7264e06a9202b5b783ee" + integrity sha512-N8NWZaoQuF9e307S6xoVoI1lvxOOFkmBnynD42r02CPCfxoC95cJExAKBFrTD4C5iuhqthbzOZJN/W29ez4o/A== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/sdk-trace" "2.12.0" + +"@opentelemetry/exporter-trace-otlp-proto@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.223.0.tgz#d1abf16dd5ee681b98d14e4133354f6ed56ecba8" + integrity sha512-hCFhPuROokNpwLibKmeMRuBNjPtbL+Ja5y/e/KBl5p3QcaH7xBjkj8roIGgKwCNJ4WChRLBzfoaNM3QksogfWw== + dependencies: + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + "@opentelemetry/sdk-trace" "2.12.0" + +"@opentelemetry/exporter-zipkin@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.12.0.tgz#c1fa377c642feb708eb3c69428da812bec0bda13" + integrity sha512-XfHO6VxPkVD/QaXqgppdHK2DTqmtHLH06ggslhm5hVYAS+dwD3okaeIyhxXBbhmWn9HhCYcv285eK1TgyF0wYQ== + dependencies: + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" + "@opentelemetry/sdk-trace" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/instrumentation@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.220.0.tgz#542b36bf4871dd83dc84e1373ac4bbcd35a8bfb8" - integrity sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw== +"@opentelemetry/instrumentation@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.223.0.tgz#b7248c91cfe26d6851dd2334e680a001abc86854" + integrity sha512-tttBo88TbwK1zpsH6VeJoxLQopxOjW3cnrP50fsQJRZftkSKDDwjolXXBvow2jy0LKXlNRkDQh0NT6yI/q+BEQ== dependencies: - "@opentelemetry/api-logs" "0.220.0" + "@opentelemetry/api-logs" "0.223.0" import-in-the-middle "^3.0.0" require-in-the-middle "^8.0.0" -"@opentelemetry/otlp-exporter-base@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.220.0.tgz#dcc820401a0efea4f908528c55fda4c9552708d7" - integrity sha512-CXYo8UD5Mn9YbgebO2EL4wejtA+gxLmLiu6HCk2KH2BR7XhFN6/6p1UlCb23DYCjeYkndevLHuejCCN1yx4+OQ== +"@opentelemetry/otlp-exporter-base@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.223.0.tgz#f5cc497a241f4eb2c9deefc0adb93439db3ee16a" + integrity sha512-HlJMrJXjOqdQeoYNDHEvFTpaY2p9uWDK1GPl5AZ4wI5easzfoppTduOv47M8eiF+4ew42vfI/Xvt7THYgESnRw== dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-transformer" "0.220.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/otlp-transformer" "0.223.0" -"@opentelemetry/otlp-grpc-exporter-base@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.220.0.tgz#06d771f5a185c1d4961f6852e5045bcaaf6d9643" - integrity sha512-/eIkBPMBTIvM3x/0mDX4aJeSkYifYClnBPr68PL1h5LV4VQv4+SV6CGrpiZ4fIWDnobVmhTWCm1J/QRdAWUfvA== +"@opentelemetry/otlp-grpc-exporter-base@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.223.0.tgz#ce36bebbfe24b16de9c9f0809d20793afa8493ab" + integrity sha512-62DuT9qzwFEFPq1aguQ+P6cWC4sJPwMxCj8wZ3Q+mH8LpPcV6zdv5gj1YtGIGZF5FcKt9JnDVraey0CEnu9MtQ== dependencies: "@grpc/grpc-js" "^1.14.3" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-transformer" "0.220.0" - -"@opentelemetry/otlp-transformer@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.220.0.tgz#c807ab3d96024d64b0f3aae7788334a42eafab7a" - integrity sha512-lXGrv7KXZ0gNH9SVNUaa6vv6phVYGvJxfXAlMbzbakiXru75f5MZl8Z7oqiMMQD77riVHJCFlQvbZs/VVN2/4A== - dependencies: - "@opentelemetry/api-logs" "0.220.0" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-logs" "0.220.0" - "@opentelemetry/sdk-metrics" "2.9.0" - "@opentelemetry/sdk-trace" "2.9.0" - -"@opentelemetry/propagator-b3@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-2.9.0.tgz#d7ec0a9d4023b09d973773ac08140793aa9dfe86" - integrity sha512-WrOT1WsOUG+B7hstD2RYoMPIOK76G8E9AQHhMjUvrQaGx/oA7rPWQvvr1Rqv7+yy4R0ZMVwWLC4vW2xnkgWPAQ== - dependencies: - "@opentelemetry/core" "2.9.0" - -"@opentelemetry/propagator-jaeger@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-2.9.0.tgz#7fbb5943782aa8cb83d5c41c316cd8be00438747" - integrity sha512-4mYGty27rYvSM0jtp1ZUOqd3LfVRCYg9H5G9OFzSx5HViYToU21MFhWfco7x1HwXr7ER8yGOiCIHZUwjPksc0Q== - dependencies: - "@opentelemetry/core" "2.9.0" - -"@opentelemetry/resources@2.11.0", "@opentelemetry/resources@^2.9.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.11.0.tgz#b4e60ba92a4f122dc979f3402aea9713a98eac5b" - integrity sha512-Ie7+8q8MDF4FAEQCKVMTx3ReUvxiIAgIiiW3c9JdmP8+HMcDy20puT+AHjexnExgnbvBxjQ9fjkFDWrikJ2jQA== - dependencies: - "@opentelemetry/core" "2.11.0" - "@opentelemetry/semantic-conventions" "^1.29.0" - -"@opentelemetry/resources@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.9.0.tgz#81e1ce946eec661857a9d6c4fa507b3750ae500f" - integrity sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg== - dependencies: - "@opentelemetry/core" "2.9.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-transformer" "0.223.0" + +"@opentelemetry/otlp-transformer@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.223.0.tgz#2320f3d75efd8370b0fbead3db514792d6bd7852" + integrity sha512-oxmmPL5/MbSsO8K588V9n/XLIe7FZTK30Fo+/U/lAnt0ZIK/hoPM03n2WpSTZVbUBGTUE7aLyxnAzh7nE2PD4Q== + dependencies: + "@opentelemetry/api-logs" "0.223.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" + "@opentelemetry/sdk-logs" "0.223.0" + "@opentelemetry/sdk-metrics" "2.12.0" + "@opentelemetry/sdk-trace" "2.12.0" + +"@opentelemetry/propagator-b3@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-2.12.0.tgz#ec2f32c0f0d94905510f2892e367d60f2535d03b" + integrity sha512-ktio0dVz2Uo83+EESOqMwqdJqoZKcf4EtmuG0mxddMKGbwN2Tignyq7JR9R7SBr1riwevitke+tpYQTMS/Fi0g== + dependencies: + "@opentelemetry/core" "2.12.0" + +"@opentelemetry/propagator-jaeger@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-2.12.0.tgz#2656ce57a42d6a13c452f371574bb9f6e5436781" + integrity sha512-Kz2Vz+NILW7S1WtN4rV1wr76fMtT/RRWvAMFBc91uTIi2dDMXxrfBKNe2KH7yaCfFp1X0xfAuabzuFczvoPB6A== + dependencies: + "@opentelemetry/core" "2.12.0" + +"@opentelemetry/resources@2.12.0", "@opentelemetry/resources@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.12.0.tgz#3a0fceb16c44d4d024f25f3f76eb773a7df67847" + integrity sha512-+rSRoOdln6NhXTVcBdHSlZxJDNzwxadeweK2ltZO3tVtfp6aklABc06xclDk6ovRR+EiGgIcSbh/6NgjFhnb3A== + dependencies: + "@opentelemetry/core" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-logs@0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.220.0.tgz#590c36c5e9e49b7823601b45ad39bba1ca265a80" - integrity sha512-WywcTkQtv2iNmt+6y5Kcd4rzvx9bLVsBa2Nwcmg01IUaBTkTow3W4d9KE5vNBpEDtb9tp21WcRBY/lANRrApYA== +"@opentelemetry/sdk-logs@0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.223.0.tgz#6c9b42a3a2ee1f8bf34605ef516a77c1aa640035" + integrity sha512-ApiAfUiUh6fmJt1GbsBuoeDn8D8IL42UvGyPUr8o1Z89ZeIiOCE1rZ78KkIUjEX3OV8Oorl9ez5Qjo43ZynDyw== dependencies: - "@opentelemetry/api-logs" "0.220.0" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/semantic-conventions" "^1.29.0" - -"@opentelemetry/sdk-metrics@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.9.0.tgz#4339ac637b9dc99c597bafdefb0ba66ef7391a7c" - integrity sha512-Xx8RGS4H5XEBl01WuCreMIpiah9cCXMbSkeuIePPdD2cUpq/vUzYmj8E/MK1OsbOc93FuAD4jfn2WOacKwLn7Q== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" - -"@opentelemetry/sdk-node@^0.220.0": - version "0.220.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.220.0.tgz#c2b29b0e9169974f706063117038e6fb8187d01e" - integrity sha512-wHtGyHhSKHNH3fym33xRu4Ef/HXTFvX8eQ42xdQdEO9LYx9Y2qNyBDJytyqVlvmo6abWZlNYTUthuAGUMYqYnQ== - dependencies: - "@opentelemetry/api-logs" "0.220.0" - "@opentelemetry/configuration" "0.220.0" - "@opentelemetry/context-async-hooks" "2.9.0" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/exporter-logs-otlp-grpc" "0.220.0" - "@opentelemetry/exporter-logs-otlp-http" "0.220.0" - "@opentelemetry/exporter-logs-otlp-proto" "0.220.0" - "@opentelemetry/exporter-metrics-otlp-grpc" "0.220.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.220.0" - "@opentelemetry/exporter-metrics-otlp-proto" "0.220.0" - "@opentelemetry/exporter-prometheus" "0.220.0" - "@opentelemetry/exporter-trace-otlp-grpc" "0.220.0" - "@opentelemetry/exporter-trace-otlp-http" "0.220.0" - "@opentelemetry/exporter-trace-otlp-proto" "0.220.0" - "@opentelemetry/exporter-zipkin" "2.9.0" - "@opentelemetry/instrumentation" "0.220.0" - "@opentelemetry/otlp-exporter-base" "0.220.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.220.0" - "@opentelemetry/propagator-b3" "2.9.0" - "@opentelemetry/propagator-jaeger" "2.9.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-logs" "0.220.0" - "@opentelemetry/sdk-metrics" "2.9.0" - "@opentelemetry/sdk-trace" "2.9.0" - "@opentelemetry/sdk-trace-base" "2.9.0" - "@opentelemetry/sdk-trace-node" "2.9.0" + "@opentelemetry/api-logs" "0.223.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-base@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.9.0.tgz#34e314486127ce0ad596757a10c4c6f8ed435385" - integrity sha512-cp9zmTl62R8PJrpvFcmc8N2JQU/xfa0S+61q511Nji+QxCfZ8Ifvg7H27G8cANe4crg4RTrWsVvanHiXjSp6ag== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" - "@opentelemetry/sdk-trace" "2.9.0" +"@opentelemetry/sdk-metrics@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.12.0.tgz#8117b1434dcae34a1fd98b5befdea9b19d0fac20" + integrity sha512-mVMaEHwCUJuY3S4Esn+nT0yQA3qCEGh+SOPJsXygU0Gl453WcsDNjtEa8EfdewMwoLyr1tlofB4fXytVpiXuow== + dependencies: + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" + +"@opentelemetry/sdk-node@^0.223.0": + version "0.223.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.223.0.tgz#aaaa068c8b8693b8e829185936171ad70cd73694" + integrity sha512-PPfkgVBB9XVdANmSYeGfp1tG6RdsRFo9m9R6/ZnjvE9+TYTEXO2KYarsdtXQTdHhLSw7yzhSHqsNyUQ6c6W3eg== + dependencies: + "@opentelemetry/api-logs" "0.223.0" + "@opentelemetry/configuration" "0.223.0" + "@opentelemetry/context-async-hooks" "2.12.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/exporter-logs-otlp-grpc" "0.223.0" + "@opentelemetry/exporter-logs-otlp-http" "0.223.0" + "@opentelemetry/exporter-logs-otlp-proto" "0.223.0" + "@opentelemetry/exporter-metrics-otlp-grpc" "0.223.0" + "@opentelemetry/exporter-metrics-otlp-http" "0.223.0" + "@opentelemetry/exporter-metrics-otlp-proto" "0.223.0" + "@opentelemetry/exporter-prometheus" "0.223.0" + "@opentelemetry/exporter-trace-otlp-grpc" "0.223.0" + "@opentelemetry/exporter-trace-otlp-http" "0.223.0" + "@opentelemetry/exporter-trace-otlp-proto" "0.223.0" + "@opentelemetry/exporter-zipkin" "2.12.0" + "@opentelemetry/instrumentation" "0.223.0" + "@opentelemetry/otlp-exporter-base" "0.223.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.223.0" + "@opentelemetry/propagator-b3" "2.12.0" + "@opentelemetry/propagator-jaeger" "2.12.0" + "@opentelemetry/resources" "2.12.0" + "@opentelemetry/sdk-logs" "0.223.0" + "@opentelemetry/sdk-metrics" "2.12.0" + "@opentelemetry/sdk-trace" "2.12.0" + "@opentelemetry/sdk-trace-base" "2.12.0" + "@opentelemetry/sdk-trace-node" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-base@^2.9.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.11.0.tgz#3f725401fcfb16e5b2335c103cdc9488829632d1" - integrity sha512-H19x/TX/LZdqiYOjM7fqtSxwlplC5pgelavqbQdHbhdq0q/AI/TGkM2dfGuuynTXmJPeF2HoZVoPDu+TGoW78A== +"@opentelemetry/sdk-trace-base@2.12.0", "@opentelemetry/sdk-trace-base@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.12.0.tgz#9112b4c3f49d3f1e8c4db1d76e7ce4fd60f8d946" + integrity sha512-JOERgZCxRM06FEJ5kEWxlSRChah6MmXDx3KwCruqEv/iEyLkTokCSemf2y1w8oIHtfrr8EVTpzebq/31vn2Cpg== dependencies: - "@opentelemetry/core" "2.11.0" - "@opentelemetry/resources" "2.11.0" - "@opentelemetry/sdk-trace" "2.11.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" + "@opentelemetry/sdk-trace" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-node@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.9.0.tgz#9feef2787dd7002f3ed2fcf2b5e9dd4b412db31a" - integrity sha512-ec9a7ps37huy5itYk0MalaZdSLlM6AXWp/FhtEjgMpp5leEGojBDvAl/UWttQnkMZOvFHKzRESn8TD3yKTF5nQ== +"@opentelemetry/sdk-trace-node@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.12.0.tgz#d7ec21b6071be4e0184e844d79cedf6d6c601069" + integrity sha512-9DufH1IlmQMoKAfot5y/FhTP1RnmhLb5K6eKmJO/bvzPjYwPAazoiAUbTZFdPbqxOXN0FEbhZx/e6SB1Og4jmg== dependencies: - "@opentelemetry/context-async-hooks" "2.9.0" - "@opentelemetry/core" "2.9.0" - "@opentelemetry/sdk-trace-base" "2.9.0" + "@opentelemetry/context-async-hooks" "2.12.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/sdk-trace-base" "2.12.0" -"@opentelemetry/sdk-trace@2.11.0": - version "2.11.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace/-/sdk-trace-2.11.0.tgz#46bbba9d366755df7d6faded0f7cd25af7f265c2" - integrity sha512-fFnTqGm8/G73GQVnxYi7LXa1ZVYEUvgL6XI1LpvV0bPC7WQ/ZGgKxCSl8FnlZBKto9JHHEFTO6s6CUpvvtwFrA== +"@opentelemetry/sdk-trace@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace/-/sdk-trace-2.12.0.tgz#1fb0b9bd64e547df9561f3a229d7a93f245eeccd" + integrity sha512-ImVuRQ6faOsTi1Wna88s2avgrrf/iDgXPigIeynkUhjstMuoQUDOJXgkez2j1mlU4btjXcXBGa+q7qKFYR3GsA== dependencies: - "@opentelemetry/core" "2.11.0" - "@opentelemetry/resources" "2.11.0" - "@opentelemetry/semantic-conventions" "^1.29.0" - -"@opentelemetry/sdk-trace@2.9.0": - version "2.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace/-/sdk-trace-2.9.0.tgz#c82103a11a712b31ac9281b706fc5dc76d126ae6" - integrity sha512-sGA19HvtrrSKYsseHphluH6j3p6Xa3fqc7c7y8f/7mYWejc1lyDFcpSdD1kYa50HCLUeEo4zA5bW0pniaPszuw== - dependencies: - "@opentelemetry/core" "2.9.0" - "@opentelemetry/resources" "2.9.0" + "@opentelemetry/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" "@opentelemetry/semantic-conventions@^1.29.0": @@ -1608,11 +1616,99 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz#f3f467e36c27332f0e735ec86cdcd78dd6f27865" integrity sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg== +"@parcel/watcher-android-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz#99aaa3223d43807c9340af439cad7e9b6d26ada6" + integrity sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA== + +"@parcel/watcher-darwin-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz#024496e586b4744f09ce532bbe89fe38ef02a64e" + integrity sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw== + +"@parcel/watcher-darwin-x64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz#a4621df1359a93d39a332d9bab5ff09016a0608f" + integrity sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw== + +"@parcel/watcher-freebsd-x64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz#7f565ed1a5b3a5e604e6a4799121518265d62a3d" + integrity sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ== + +"@parcel/watcher-linux-arm-glibc@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz#ad7d3825e67b81999165da42593022045abc0889" + integrity sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg== + +"@parcel/watcher-linux-arm-musl@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz#fe7d1cccb2c483215c090e938cf5cf404d2f9a8c" + integrity sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw== + +"@parcel/watcher-linux-arm64-glibc@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz#7e239dcb4646c4c79f006a7131a48238249530da" + integrity sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g== + +"@parcel/watcher-linux-arm64-musl@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz#c58b8d9c6d8d81594be00dd83aab741c1aaf7e0e" + integrity sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA== + +"@parcel/watcher-linux-x64-glibc@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz#5184fa9a770478d86e56875f4ee163a0abdc8791" + integrity sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A== + +"@parcel/watcher-linux-x64-musl@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz#2d1c55aa7246cbc7670e2612058a8a542c9cf246" + integrity sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw== + +"@parcel/watcher-win32-arm64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz#15e09432040fee9e2213aa9c10ed589012526def" + integrity sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ== + +"@parcel/watcher-win32-x64@2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz#9bee199a2a4accd557b451ac2c1c793f305ae012" + integrity sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A== + +"@parcel/watcher@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.6.0.tgz#99661f6220070b76a766aba6b7e313a087a1be4f" + integrity sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w== + dependencies: + detect-libc "^2.0.3" + is-glob "^4.0.3" + node-addon-api "^7.0.0" + picomatch "^4.0.4" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.6.0" + "@parcel/watcher-darwin-arm64" "2.6.0" + "@parcel/watcher-darwin-x64" "2.6.0" + "@parcel/watcher-freebsd-x64" "2.6.0" + "@parcel/watcher-linux-arm-glibc" "2.6.0" + "@parcel/watcher-linux-arm-musl" "2.6.0" + "@parcel/watcher-linux-arm64-glibc" "2.6.0" + "@parcel/watcher-linux-arm64-musl" "2.6.0" + "@parcel/watcher-linux-x64-glibc" "2.6.0" + "@parcel/watcher-linux-x64-musl" "2.6.0" + "@parcel/watcher-win32-arm64" "2.6.0" + "@parcel/watcher-win32-x64" "2.6.0" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@pkgr/core@^0.3.6": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.3.6.tgz#3569708bd4be4d8870ba32bf1c456dac81600d97" + integrity sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -1660,15 +1756,10 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.2.tgz#78d476333d85d5b1c792e257bca74ba080da49a4" integrity sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug== -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - -"@scality/arsenal@^8.6.0-0": - version "8.6.0-preview.1" - resolved "https://registry.yarnpkg.com/@scality/arsenal/-/arsenal-8.6.0-preview.1.tgz#351314c469aac8ff133d9cdd7d0024afafce87cb" - integrity sha512-vKYVAusgjPxwQt/DyEtswKWyHLFElmSUX5LqWbEfP5+IaNa7872r6H6IG8BuzGNIV4tMLgFNe9y2iO5tzr1b8w== +"@scality/arsenal@^8.6.0": + version "8.6.0" + resolved "https://registry.yarnpkg.com/@scality/arsenal/-/arsenal-8.6.0.tgz#7d8422893a6f498894e04509cb07f1bcb224e5ab" + integrity sha512-RxYMTZf23vd4P1lQEm/H7Jy0yIFZ+2/uFqpp7tLD4lj8iu6Lj8MsF+KxWfB3QLvwVKx9QPsMqSe06QaOPwqh4Q== dependencies: "@aws-sdk/client-kms" "^3.975.0" "@aws-sdk/client-s3" "^3.975.0" @@ -1678,10 +1769,10 @@ "@azure/storage-blob" "^12.31.0" "@js-sdsl/ordered-set" "^4.4.2" "@opentelemetry/api" "^1.9.1" - "@opentelemetry/exporter-trace-otlp-http" "^0.220.0" - "@opentelemetry/resources" "^2.9.0" - "@opentelemetry/sdk-node" "^0.220.0" - "@opentelemetry/sdk-trace-base" "^2.9.0" + "@opentelemetry/exporter-trace-otlp-http" "^0.223.0" + "@opentelemetry/resources" "^2.12.0" + "@opentelemetry/sdk-node" "^0.223.0" + "@opentelemetry/sdk-trace-base" "^2.12.0" "@scality/hdclient" "^1.3.2" "@smithy/node-http-handler" "^4.3.0" "@smithy/protocol-http" "^5.3.5" @@ -1691,6 +1782,7 @@ async "~2.6.4" base-x "3.0.11" base62 "^2.0.2" + classic-level "^3.0.0" debug "^4.4.3" fcntl "github:scality/node-fcntl#0.3.1" httpagent scality/httpagent#1.1.1 @@ -1698,10 +1790,7 @@ ioredis "^5.8.1" ipaddr.js "^2.2.0" joi "^18.0.1" - level "~5.0.1" - level-sublevel "~6.6.5" mongodb "^6.20.0" - node-forge "^1.3.1" prom-client "^15.1.3" simple-glob "^0.2.0" socket.io "^4.8.0" @@ -1746,62 +1835,33 @@ dependencies: dayjs "^1.11.10" -"@sinclair/typebox@^0.27.8": - version "0.27.12" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.12.tgz#0cacd3cff047a32936b1ace47ea7c86eaab60a7f" - integrity sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g== +"@sinclair/typebox@^0.34.0": + version "0.34.52" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.52.tgz#62f8a686e4ab28a8944902e2ad2d648312ef11cb" + integrity sha512-XiMQh7qqVlxZzcVD+kkGMNGMzcTrDMLWI7S4x7z1MkCkbDPrekpZXEUK0eZqZFMuHQg2a2DZOcDIh9o5v3Gonw== -"@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": +"@sinonjs/commons@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@sinonjs/fake-timers@^13.0.5": - version "13.0.5" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz#36b9dbc21ad5546486ea9173d6bea063eb1717d5" - integrity sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw== - dependencies: - "@sinonjs/commons" "^3.0.1" - -"@sinonjs/fake-timers@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-14.0.0.tgz#54b3daa30da6fcca71b2da934ff96b3095b3e28d" - integrity sha512-QfoXRaUTjMVVn/ZbnD4LS3TPtqOkOdKIYCKldIVPnuClcwRKat6LI2mRZ2s5qiBfO6Fy03An35dSls/2/FEc0Q== - dependencies: - "@sinonjs/commons" "^3.0.1" - -"@sinonjs/fake-timers@^15.1.1": +"@sinonjs/fake-timers@^15.4.0": version "15.4.0" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz#5d40c151a9e66075fe4520bec40bccfe54931962" integrity sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA== dependencies: "@sinonjs/commons" "^3.0.1" -"@sinonjs/samsam@^8.0.1": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.3.tgz#eb6ffaef421e1e27783cc9b52567de20cb28072d" - integrity sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ== +"@sinonjs/samsam@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-10.0.2.tgz#d2cb34f0bcddb955b6971585c2f0334e68a9e66d" + integrity sha512-8lVwD1Df1BmzoaOLhMcGGcz/Jyr5QY2KSB75/YK1QgKzoabTeLdIVyhXNZK9ojfSKSdirbXqdbsXXqP9/Ve8+A== dependencies: "@sinonjs/commons" "^3.0.1" type-detect "^4.1.0" -"@smithy/abort-controller@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-1.1.0.tgz#2da0d73c504b93ca8bb83bdc8d6b8208d73f418b" - integrity sha512-5imgGUlZL4dW4YWdMYAKLmal9ny/tlenM81QZY7xYyb76z9Z/QOg7oM5Ak9HQl8QfFTlGVWwcMXl+54jroRgEQ== - dependencies: - "@smithy/types" "^1.2.0" - tslib "^2.5.0" - "@smithy/core@^3.33.2", "@smithy/core@^3.33.3", "@smithy/core@^3.35.0": version "3.35.0" resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.35.0.tgz#52f180a314d735af8ba8970967c4c9499fc21d3e" @@ -1859,17 +1919,6 @@ dependencies: tslib "^2.6.2" -"@smithy/node-http-handler@^1.0.2": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-1.1.0.tgz#887cee930b520e08043c9f41e463f8d8f5dae127" - integrity sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg== - dependencies: - "@smithy/abort-controller" "^1.1.0" - "@smithy/protocol-http" "^1.2.0" - "@smithy/querystring-builder" "^1.1.0" - "@smithy/types" "^1.2.0" - tslib "^2.5.0" - "@smithy/node-http-handler@^4.12.1", "@smithy/node-http-handler@^4.3.0": version "4.12.1" resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.12.1.tgz#e4da9379d228517ba85845081e4e6758ca315c5d" @@ -1879,14 +1928,6 @@ "@smithy/types" "^4.18.0" tslib "^2.6.2" -"@smithy/protocol-http@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-1.2.0.tgz#a554e4dabb14508f0bc2cdef9c3710e2b294be04" - integrity sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q== - dependencies: - "@smithy/types" "^1.2.0" - tslib "^2.5.0" - "@smithy/protocol-http@^4.1.8": version "4.1.8" resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" @@ -1903,15 +1944,6 @@ "@smithy/core" "^3.33.2" tslib "^2.6.2" -"@smithy/querystring-builder@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-1.1.0.tgz#de6306104640ade34e59be33949db6cc64aa9d7f" - integrity sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA== - dependencies: - "@smithy/types" "^1.2.0" - "@smithy/util-uri-escape" "^1.1.0" - tslib "^2.5.0" - "@smithy/signature-v4@^4.1.0": version "4.2.4" resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" @@ -2003,13 +2035,6 @@ "@smithy/core" "^3.33.2" tslib "^2.6.2" -"@smithy/util-uri-escape@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-1.1.0.tgz#a8c5edaf19c0efdb9b51661e840549cf600a1808" - integrity sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w== - dependencies: - tslib "^2.5.0" - "@smithy/util-uri-escape@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" @@ -2051,7 +2076,14 @@ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== -"@types/babel__core@^7.1.14": +"@tybys/wasm-util@^0.10.3": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.4.tgz#3e85ecb266f9d1722250e89bc69528615720b154" + integrity sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A== + dependencies: + tslib "^2.4.0" + +"@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== @@ -2077,7 +2109,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*": version "7.28.0" resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== @@ -2096,14 +2128,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== @@ -2115,7 +2140,7 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^3.0.0": +"@types/istanbul-reports@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== @@ -2127,11 +2152,6 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - "@types/node@*", "@types/node@>=10.0.0", "@types/node@>=13.7.0": version "26.6.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-26.6.2.tgz#11bfb8e00bafe728d2113e474a7637becc9ab279" @@ -2146,7 +2166,7 @@ dependencies: undici-types ">=7.24.0 <7.24.7" -"@types/stack-utils@^2.0.0": +"@types/stack-utils@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== @@ -2175,73 +2195,13 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== -"@types/yargs@^17.0.8": +"@types/yargs@^17.0.33": version "17.0.35" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/project-service@8.70.1": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.70.1.tgz#d5635594cc8a573f0e15a772b1704e93a00134c1" - integrity sha512-62xOgboPfwc3/IgPSX/W6oQR3ZbF04194FPGUGH8HL8iLFHbt/456/8Ph1wLNUgVF+s94FlHoipBsz+v7+LMnA== - dependencies: - "@typescript-eslint/tsconfig-utils" "^8.70.1" - "@typescript-eslint/types" "^8.70.1" - debug "^4.4.3" - -"@typescript-eslint/scope-manager@8.70.1": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.70.1.tgz#0feeae4da2d279b960cdbfe5e0a02fbf1195e93f" - integrity sha512-Pa0EeSeAusQc1WbjQMac+YfenewYTBu0KjgYvkUKwhXaHUKbFog23Dm/rp0DX/6tyYOQ3Xl1a+3EcFNZynGHCw== - dependencies: - "@typescript-eslint/types" "8.70.1" - "@typescript-eslint/visitor-keys" "8.70.1" - -"@typescript-eslint/tsconfig-utils@8.70.1", "@typescript-eslint/tsconfig-utils@^8.70.1": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.70.1.tgz#e9353a6e5f3498a29b40946ca3e11f6166fef09e" - integrity sha512-jumze1fPI+sDOaM2TWGQdn39PDxTr7TZGeuyLkAbNyx2vtMT3uRnVKChN0hfht5V2TugphJzF6bYXvBcE09qqg== - -"@typescript-eslint/types@8.70.1", "@typescript-eslint/types@^8.70.1": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.70.1.tgz#2022b9d07d057174eba25b9bbd289641d262a196" - integrity sha512-Dm1ypdhhrGCTyyehxElhgJ6kgk8MVCv5qXdoOVqPr1uqk42jX8KjrZqhROvdShczA8qrDoYiOWn1ykWlx2k81Q== - -"@typescript-eslint/typescript-estree@8.70.1": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.70.1.tgz#ced48fee6f7043835d2edfed9786ae74813a3c99" - integrity sha512-TU8PwyGN0PQJUcE96mw8eCQ44SmxGdQlJmlWakHaHQ15eIuuvye5yNtmh/i6oS88jzXVQB71xdNkbkB/fMwL0g== - dependencies: - "@typescript-eslint/project-service" "8.70.1" - "@typescript-eslint/tsconfig-utils" "8.70.1" - "@typescript-eslint/types" "8.70.1" - "@typescript-eslint/visitor-keys" "8.70.1" - debug "^4.4.3" - minimatch "^10.2.2" - semver "^7.7.3" - tinyglobby "^0.2.15" - ts-api-utils "^2.5.0" - -"@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.70.1.tgz#6a97887cee702df513692f5cdc7f79baeef48e02" - integrity sha512-Esgul8MsnKnRLdYU2Eb2cRV9bS5HJYtKj1ByJnOzzG2M58DGdSUQ1jUuILxipqcpB2h9WLrbD5GijIWUjX/Tqw== - dependencies: - "@eslint-community/eslint-utils" "^4.9.1" - "@typescript-eslint/scope-manager" "8.70.1" - "@typescript-eslint/types" "8.70.1" - "@typescript-eslint/typescript-estree" "8.70.1" - -"@typescript-eslint/visitor-keys@8.70.1": - version "8.70.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.70.1.tgz#b4cde0ed16982bd963a6310fcae554f59fd14124" - integrity sha512-Vwj9lUIW5Xq3wQ9w6gv3R86g1hMK8f2zNOdGTAgeXUMMXFK78G9ruCjjqutHMNJc0+CH7LYRnHeUB9IT8wFmcw== - dependencies: - "@typescript-eslint/types" "8.70.1" - eslint-visitor-keys "^5.0.0" - "@typespec/ts-http-runtime@^0.3.0", "@typespec/ts-http-runtime@^0.3.4": version "0.3.9" resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.9.tgz#332855bbd729ab36e0779b2dfc24edc920d12461" @@ -2251,6 +2211,125 @@ https-proxy-agent "^7.0.0" tslib "^2.6.2" +"@ungap/structured-clone@^1.3.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.4.0.tgz#5e2e1374c0a30b5a42e8b083523a225c6945f88a" + integrity sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ== + +"@unrs/resolver-binding-android-arm-eabi@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz#98a9fee62c01f209747a4ab5855f1ced38a6d03a" + integrity sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w== + +"@unrs/resolver-binding-android-arm64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz#46b7e8a1393f907462324f1576e8883529acf066" + integrity sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ== + +"@unrs/resolver-binding-darwin-arm64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz#0ea07b00e2583ab004b853d4c02ec5f0745d490c" + integrity sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w== + +"@unrs/resolver-binding-darwin-x64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz#a2a6901ed58449b91b4438e582f6890cba956049" + integrity sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA== + +"@unrs/resolver-binding-freebsd-x64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz#ebe6fe7f6706b7378ea4a48a024602e9c2f48f89" + integrity sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz#e6040fedaa240124419d35b25b69c5fa15ddb499" + integrity sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz#d217a8fb59f659c131539326c140e7b62e3e3c6a" + integrity sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g== + +"@unrs/resolver-binding-linux-arm64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz#edab13c46a45783a7e01351e113825c04f352e24" + integrity sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg== + +"@unrs/resolver-binding-linux-arm64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz#e5e195db1130f7d3b6aa2fd67b3c9fe1ea4859a0" + integrity sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA== + +"@unrs/resolver-binding-linux-loong64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz#f01d22e091bae13016f4636698d9dcbbda775c3e" + integrity sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q== + +"@unrs/resolver-binding-linux-loong64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz#7d23efcb98adf076bfbcecc27b4212c36aa6697d" + integrity sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz#1f35f1eaa322f33cf2d96dac27f0626a93ffe2f6" + integrity sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz#674faa696f5ce96f214873946a1e2d6ca96723dd" + integrity sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A== + +"@unrs/resolver-binding-linux-riscv64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz#37835fdd0b472ecdcffccd4288f19018454b138c" + integrity sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w== + +"@unrs/resolver-binding-linux-s390x-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz#b6edf13db4bb0accdcd1ad482a4eea0301de9224" + integrity sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw== + +"@unrs/resolver-binding-linux-x64-gnu@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz#daddad00bf65a405202284da1eb1db8eb83b218f" + integrity sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ== + +"@unrs/resolver-binding-linux-x64-musl@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz#dfdff1e0c2bad25420b41c76a746011c3983b9bb" + integrity sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A== + +"@unrs/resolver-binding-openharmony-arm64@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz#ce07c4f5e7b42f7bfce45e7629b8659063aefefe" + integrity sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ== + +"@unrs/resolver-binding-wasm32-wasi@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz#82514f0506cfaf65f17fe16095f92d450e487183" + integrity sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A== + dependencies: + "@emnapi/core" "1.10.0" + "@emnapi/runtime" "1.10.0" + "@napi-rs/wasm-runtime" "^1.1.4" + +"@unrs/resolver-binding-win32-arm64-msvc@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz#521427dd59a8f4740ddd1dc7c3bc6af1aa1d260d" + integrity sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g== + +"@unrs/resolver-binding-win32-ia32-msvc@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz#05b63286ff2da37e0ce3083b8390884385efff62" + integrity sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g== + +"@unrs/resolver-binding-win32-x64-msvc@1.12.2": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz#72da0da48d72b1e87831b9c0308931d3f4669027" + integrity sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA== + JSONStream@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -2264,55 +2343,18 @@ abbrev@^3.0.0: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.1.tgz#8ac8b3b5024d31464fe2a5feeea9f4536bf44025" integrity sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg== -abstract-level@^2.0.0, abstract-level@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-2.0.2.tgz#8d965e731afb42a72f163874410c1687fb2e4bdb" - integrity sha512-pPJixmXk/kTKLB2sSue7o4Uj6TlLD2XfaP2gWZomHVCC6cuUGX/VslQqKG1yZHfXwBb/3lS6oSTMPGzh1P1iig== +abstract-level@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-3.1.1.tgz#d61a7ae1a5cff15f315592a4cfa3259489ac2388" + integrity sha512-CW2gKbJFTuX1feMvOrvsVMmijAOgI9kg2Ie9Dq3gOcMt/dVVoVmqNlLcEUCT13NxHFMEajcUcVBIplbyDroDiw== dependencies: buffer "^6.0.3" is-buffer "^2.0.5" - level-supports "^6.0.0" + level-supports "^6.2.0" level-transcoder "^1.0.1" maybe-combine-errors "^1.0.0" module-error "^1.0.1" -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~0.12.1: - version "0.12.4" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" - integrity sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA== - dependencies: - xtend "~3.0.0" - -abstract-leveldown@~6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz#b4b6159343c74b0c5197b2817854782d8f748c4a" - integrity sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q== - dependencies: - level-concat-iterator "~2.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - accepts@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" @@ -2361,7 +2403,7 @@ ajv@6.15.0, ajv@^6.14.0: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: +ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2385,7 +2427,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: +ansi-styles@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== @@ -2395,7 +2437,7 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -anymatch@^3.0.3: +anymatch@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2430,79 +2472,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" - integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== - dependencies: - call-bound "^1.0.3" - is-array-buffer "^3.0.5" - -array-includes@^3.1.9: - version "3.2.0" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.2.0.tgz#18771e6837351aa139c3b58873371d0afa64964a" - integrity sha512-VXY5eFRarnXcYxwBjJzPmEhH55+rmP79/+ueDhi0F+TuqfHCItagIHqxeUZrmgrOPa31QTh9H85DjX3FfJ0FTg== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.24.2" - es-object-atoms "^1.1.2" - es-shim-unscopables "^1.1.0" - is-string "^1.1.1" - math-intrinsics "^1.1.0" - -array.prototype.findlastindex@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" - integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-shim-unscopables "^1.1.0" - -array.prototype.flat@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" - integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -array.prototype.flatmap@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" - integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" - integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - is-array-buffer "^3.0.4" - -async-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" - integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== - async-mutex@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.5.0.tgz#353c69a0b9e75250971a64ac203b0ebfddd75482" @@ -2522,69 +2491,43 @@ async@~2.6.4: dependencies: lodash "^4.17.14" -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -aws-sdk@^2.1692.0: - version "2.1693.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1693.0.tgz#fda38671af3dc5fa8117e9aa09cf6ce37e34010e" - integrity sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.6.2" - b4a@^1.6.4, b4a@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.9.0.tgz#6336313b6e76b299c397afa68676ec6ebc788845" integrity sha512-dpfcF9fDNR6++cthXR67iyhgqWy9CBouAvIWhIntzBG6cvK/cnIPiZQjBwi/ZqjjBEDGfoNDtmB0kTjroOJ3pQ== -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" +babel-jest@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.5.2.tgz#ee4b3b265baf9dad68e6275bc813ef35d1736e6d" + integrity sha512-ES8WeJ2fNWPEDunyAtUfJ12nHyaWUloCHdkfK2oW5uSoQSUmjNKdWiGaXJITJwvFEWoD/evHEg/QoCXAvLaQqQ== + dependencies: + "@jest/transform" "30.5.2" + "@types/babel__core" "^7.20.5" + babel-plugin-istanbul "^8.0.0" + babel-preset-jest "30.5.0" + chalk "^4.1.2" + graceful-fs "^4.2.11" slash "^3.0.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== +babel-plugin-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-8.0.0.tgz#8762f542153a52b77e626dd2c033b467de2f2fa2" + integrity sha512-18wCskrN3DgbuBmp1gr7LBGT8xdz5xhQQqFvFhVxbkl8VBCrMKQ2YtqBWtUal1Zrc1HTuX0011+Brjw78TCFkg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-instrument "^6.0.2" + test-exclude "^7.0.1" -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== +babel-plugin-jest-hoist@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.5.0.tgz#425bf7ee24cffe47bfdcfeeca2885b87b1cf6644" + integrity sha512-gtGo1B+u14jrZQv6TdSWIWkTqclboo7Qn+dFAGUOIuXLFuJKAdg3U5MIWzZnW4vfUb4dX9skmAMiby86e/SF4A== dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" + "@types/babel__core" "^7.20.5" -babel-preset-current-node-syntax@^1.0.0: +babel-preset-current-node-syntax@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== @@ -2605,13 +2548,13 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== +babel-preset-jest@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-30.5.0.tgz#33162eee375c0066f2b2059cd97a7840ef84c259" + integrity sha512-ZGPn5ClP4lBDpuOK8W1yQIOy359HmbnZv3suucAlIe+SEE9yDsxV4S2PjSbH2Vc97U+WmzYD7vw3kr8NsQ/i6w== dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" + babel-plugin-jest-hoist "30.5.0" + babel-preset-current-node-syntax "^1.2.0" balanced-match@^1.0.0: version "1.0.2" @@ -2694,13 +2637,6 @@ bintrees@1.0.2: resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== -bl@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" - integrity sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw== - dependencies: - readable-stream "~1.0.26" - body-parser@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.3.0.tgz#6d8662f4d8c336028b8ac9aa24251b0ca64ba437" @@ -2743,20 +2679,6 @@ brace-expansion@^5.0.8: dependencies: balanced-match "^4.0.2" -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browser-level@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-2.0.0.tgz#cc63eb1322e67c44489d7fbdda5c30a2db7b59da" - integrity sha512-RuYSCHG/jwFCrK+KWA3dLSUNLKHEgIYhO5ORPjJMjCt7T3e+RzpIDmYKWRHxq2pfKGXjlRuEff7y7RESAAgzew== - dependencies: - abstract-level "^2.0.1" - browserslist@^4.24.0: version "4.29.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.29.1.tgz#f723071987a4f094177d94e01f6dc6e7493b972c" @@ -2768,10 +2690,10 @@ browserslist@^4.24.0: node-releases "^2.0.57" update-browserslist-db "^1.3.3" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== +bser@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.2.tgz#3052372d49a1bc2a25e68c267697af5e823e147a" + integrity sha512-V2o8YS2EhrKMO9AumnkK0ynynfFlsajpYupwq7S46H5mhcanwxDkNTw3K67wPIcKTH1ffkA4vhMOtAc7gRmPZw== dependencies: node-int64 "^0.4.0" @@ -2792,20 +2714,6 @@ 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" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" @@ -2814,14 +2722,6 @@ buffer@5.6.0: base64-js "^1.0.2" ieee754 "^1.1.4" -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - 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" @@ -2842,21 +2742,6 @@ bytes@^3.1.2, bytes@~3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -bytewise-core@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" - integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== - dependencies: - typewise-core "^1.2" - -bytewise@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" - integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== - dependencies: - bytewise-core "^1.2.2" - typewise "^1.0.3" - cacache@^19.0.1: version "19.0.1" resolved "https://registry.yarnpkg.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd" @@ -2883,17 +2768,7 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.7, call-bind@^1.0.8, call-bind@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" - integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - get-intrinsic "^1.3.0" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: +call-bound@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -2901,7 +2776,7 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: call-bind-apply-helpers "^1.0.2" get-intrinsic "^1.3.0" -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -2911,7 +2786,7 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0, camelcase@^6.3.0: +camelcase@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -2921,7 +2796,7 @@ caniuse-lite@^1.0.30001810: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001812.tgz#55b32ed819d120b384149a4f9fd59d179ce008f9" integrity sha512-qN+QNNBr93TCmFrmte0bBCjSDMuRvt78VlHT99qIGPszm4QsqCX8lnyWUFkHi8B7ZBAPq8SH+UqyXNy/odMdng== -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2939,27 +2814,22 @@ chownr@^3.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cjs-module-lexer@^1.0.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" - integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== +ci-info@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.4.0.tgz#7d54eff9f54b45b62401c26032696eb59c8bd18c" + integrity sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg== cjs-module-lexer@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.2.1.tgz#ab35b03c56ade05fe170c70e67ae89f60666847c" integrity sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q== -classic-level@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-2.0.0.tgz#6fd9ca686bbcd645e35caaf403c3f3a56495d11b" - integrity sha512-ftiMvKgCQK+OppXcvMieDoYlYLYWhScK6yZRFBrrlHQRbm4k6Gr+yDgu/wt3V0k1/jtNbuiXAsRmuAFcD0Tx5Q== +classic-level@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-3.0.0.tgz#2be00defbaf7d204ac33da77988993c6c337ba67" + integrity sha512-yGy8j8LjPbN0Bh3+ygmyYvrmskVita92pD/zCoalfcC9XxZj6iDtZTAnz+ot7GG8p9KLTG+MZ84tSA4AhkgVZQ== dependencies: - abstract-level "^2.0.0" + abstract-level "^3.1.0" module-error "^1.0.1" napi-macros "^2.2.2" node-gyp-build "^4.3.0" @@ -2983,7 +2853,7 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -collect-v8-coverage@^1.0.0: +collect-v8-coverage@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== @@ -3045,11 +2915,6 @@ cookie@^0.7.1, cookie@~0.7.2: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - cors@~2.8.5: version "2.8.6" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" @@ -3058,19 +2923,6 @@ cors@~2.8.5: object-assign "^4" vary "^1" -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - cron-parser@^4.2.0: version "4.9.0" resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" @@ -3087,33 +2939,6 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -data-view-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" - integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-length@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" - integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-data-view "^1.0.2" - -data-view-byte-offset@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" - integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-data-view "^1.0.1" - dayjs@^1.11.10: version "1.11.23" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.23.tgz#b0a363506dde5f36cf5075e42ebe8115165a8c79" @@ -3126,14 +2951,7 @@ debug@4, debug@4.4.3, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, de dependencies: ms "^2.1.3" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -dedent@^1.0.0: +dedent@^1.6.0: version "1.7.2" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.2.tgz#34e2264ab538301e27cf7b07bf2369c19baa8dd9" integrity sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA== @@ -3143,7 +2961,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: +deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -3161,44 +2979,11 @@ default-browser@^5.2.1: bundle-name "^4.1.0" default-browser-id "^5.0.0" -deferred-leveldown@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" - integrity sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng== - dependencies: - abstract-leveldown "~0.12.1" - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - define-lazy-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - denque@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" @@ -3209,29 +2994,22 @@ depd@^2.0.0, depd@~2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -detect-newline@^3.0.0: +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + +detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" - integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" +diff@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-9.0.0.tgz#297c31cd7c280f13dfe335791ec2063bd4a73a6f" + integrity sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw== -dunder-proto@^1.0.0, dunder-proto@^1.0.1: +dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== @@ -3282,16 +3060,6 @@ encodeurl@^2.0.0: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -3345,13 +3113,6 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - error-ex@^1.3.1: version "1.3.4" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" @@ -3359,127 +3120,33 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract-get@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-abstract-get/-/es-abstract-get-1.0.0.tgz#1eae87101f42bedeb6a740e8c5051271aef89088" - integrity sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg== - dependencies: - es-errors "^1.3.0" - es-object-atoms "^1.1.2" - is-callable "^1.2.7" - object-inspect "^1.13.4" - -es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.2: - version "1.24.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.2.tgz#2dbd38c180735ee983f77585140a2706a963ed9a" - integrity sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg== - dependencies: - array-buffer-byte-length "^1.0.2" - arraybuffer.prototype.slice "^1.0.4" - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - data-view-buffer "^1.0.2" - data-view-byte-length "^1.0.2" - data-view-byte-offset "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-set-tostringtag "^2.1.0" - es-to-primitive "^1.3.0" - function.prototype.name "^1.1.8" - get-intrinsic "^1.3.0" - get-proto "^1.0.1" - get-symbol-description "^1.1.0" - globalthis "^1.0.4" - gopd "^1.2.0" - has-property-descriptors "^1.0.2" - has-proto "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - internal-slot "^1.1.0" - is-array-buffer "^3.0.5" - is-callable "^1.2.7" - is-data-view "^1.0.2" - is-negative-zero "^2.0.3" - is-regex "^1.2.1" - is-set "^2.0.3" - is-shared-array-buffer "^1.0.4" - is-string "^1.1.1" - is-typed-array "^1.1.15" - is-weakref "^1.1.1" - math-intrinsics "^1.1.0" - object-inspect "^1.13.4" - object-keys "^1.1.1" - object.assign "^4.1.7" - own-keys "^1.0.1" - regexp.prototype.flags "^1.5.4" - safe-array-concat "^1.1.3" - safe-push-apply "^1.0.0" - safe-regex-test "^1.1.0" - set-proto "^1.0.0" - stop-iteration-iterator "^1.1.0" - string.prototype.trim "^1.2.10" - string.prototype.trimend "^1.0.9" - string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.3" - typed-array-byte-length "^1.0.3" - typed-array-byte-offset "^1.0.4" - typed-array-length "^1.0.7" - unbox-primitive "^1.1.0" - which-typed-array "^1.1.19" - -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-module-lexer@^2.1.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" + integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== + es-module-lexer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-3.0.2.tgz#8cc09097dd80a9cbb79437fd405b935cac76cda3" integrity sha512-BuIB67FngDSyQ/dpQNOZybwdEBDUGJQvOqwWr4ha/ufYiqzuEwPkKO2zLhRAgay28tStRIHUeWmszZAJo3GCOg== -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1, es-object-atoms@^1.1.2: +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" - integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== - dependencies: - hasown "^2.0.2" - -es-to-primitive@^1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.4.tgz#0c854291cf0d7b439d6b9e5771ea837ffaf1f991" - integrity sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw== - dependencies: - es-abstract-get "^1.0.0" - es-define-property "^1.0.1" - es-errors "^1.3.0" - is-callable "^1.2.7" - is-date-object "^1.1.0" - is-symbol "^1.1.1" - escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" @@ -3500,54 +3167,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-import-resolver-node@^0.3.9: - version "0.3.10" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz#84ce3005abfc300588cf23bbac1aabec1fc6e8c1" - integrity sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ== - dependencies: - debug "^3.2.7" - is-core-module "^2.16.1" - resolve "^2.0.0-next.6" - -eslint-module-utils@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz#611f8e1c6ceb29a93eb949e1cc670b8287764819" - integrity sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.31.0: - version "2.32.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" - integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== - dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.9" - array.prototype.findlastindex "^1.2.6" - array.prototype.flat "^1.3.3" - array.prototype.flatmap "^1.3.3" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.1" - hasown "^2.0.2" - is-core-module "^2.16.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.1" - semver "^6.3.1" - string.prototype.trimend "^1.0.9" - tsconfig-paths "^3.15.0" - -eslint-plugin-jest@^28.11.0: - version "28.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz#02da77dc27d7b4c5480df3552ea26de056857b36" - integrity sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ== - dependencies: - "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" - eslint-scope@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" @@ -3566,12 +3185,7 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint-visitor-keys@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" - integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== - -eslint@^9.14.0: +eslint@^9.39.0: version "9.39.5" resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.5.tgz#2a4e3c8b0f753196efae943c8ffaa8730fc6a3fa" integrity sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw== @@ -3661,17 +3275,12 @@ events-universal@^1.0.0: dependencies: bare-events "^2.7.0" -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - events@3.3.0, events@^3.0.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.0.0: +execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -3686,21 +3295,22 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== +exit-x@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exit-x/-/exit-x-0.2.2.tgz#1f9052de3b8d99a696b10dad5bced9bdd5c3aa64" + integrity sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ== -expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== +expect@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-30.5.2.tgz#f3fe2eeeb9df5c55e237c6428d37f37204b55f4f" + integrity sha512-0LNuMvs8/5mRYhnCR4k+lGV7fqPMs6Bnksda4S3zsCUmdxBpAn4zU4NNzXdq1pMKe/H4W5t/zVIDSJ/H3e0vDA== dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" + "@jest/expect-utils" "30.5.2" + "@jest/get-type" "30.5.0" + jest-matcher-utils "30.5.2" + jest-message-util "30.5.1" + jest-mock "30.5.2" + jest-util "30.5.1" exponential-backoff@^3.1.1: version "3.1.3" @@ -3786,12 +3396,12 @@ fast-xml-parser@^5.5.7, fast-xml-parser@^5.5.9: strnum "^2.4.2" xml-naming "^0.3.0" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== +fb-watchman@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.4.tgz#2227759ee352e8371b9de30ceda7633ce65ca3be" + integrity sha512-tGQtaoYisPDriJBN0mT5yZSyNETnJGA1gTYxaVRAE5KUO3LI9kPUc9WIu8JXcxaIci+faIKlzXqXyPgrmubtBQ== dependencies: - bser "2.1.1" + bser "2.1.2" "fcntl@github:scality/node-fcntl#0.3.1": version "0.3.1" @@ -3818,13 +3428,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - finalhandler@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" @@ -3885,13 +3488,6 @@ follow-redirects@^1.15.9: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== -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" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" - foreground-child@^3.1.0: version "3.3.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" @@ -3922,41 +3518,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.2.0.tgz#758f3e84fa542672454bd5e14cb081a5ce07f70c" - integrity sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - es-define-property "^1.0.1" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - hasown "^2.0.4" - is-callable "^1.2.7" - is-document.all "^1.0.0" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -generator-function@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" - integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3967,7 +3533,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4001,15 +3567,6 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" - integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -4017,7 +3574,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^10.2.2: +glob@^10.2.2, glob@^10.4.1: version "10.5.0" resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== @@ -4029,7 +3586,16 @@ glob@^10.2.2: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^13.0.6: + version "13.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-13.0.6.tgz#078666566a425147ccacfbd2e332deb66a2be71d" + integrity sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw== + dependencies: + minimatch "^10.2.2" + minipass "^7.1.3" + path-scurry "^2.0.2" + +glob@^7.1.2: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4046,74 +3612,33 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -gopd@^1.0.1, gopd@^1.2.0: +gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.2.11, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -has-bigints@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" - integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" - integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - dependencies: - dunder-proto "^1.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: +has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.2, hasown@^2.0.4: +hasown@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== dependencies: function-bind "^1.1.2" -heapdump@^0.3.15: - version "0.3.15" - resolved "https://registry.yarnpkg.com/heapdump/-/heapdump-0.3.15.tgz#631a8a2585588ea64778d8ec80a64c6c025f6a08" - integrity sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA== - dependencies: - nan "^2.13.2" - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -4181,7 +3706,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -4195,12 +3720,7 @@ iconv-lite@^0.7.2, iconv-lite@~0.7.0: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@1.1.13: - version "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.2.1: +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== @@ -4210,16 +3730,6 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== - import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" @@ -4237,7 +3747,7 @@ import-in-the-middle@^3.0.0: es-module-lexer "^3.0.2" module-details-from-path "^1.0.4" -import-local@^3.0.2: +import-local@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== @@ -4258,20 +3768,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.4: +inherits@2, 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== -internal-slot@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" - integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.2" - side-channel "^1.1.0" - ioctl@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ioctl/-/ioctl-2.0.2.tgz#21543f661cb1b044761cbf721f5dde6be08ed060" @@ -4308,133 +3809,36 @@ ipaddr.js@^2.2.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.5.0.tgz#7d4b6c39f9392fb61cf807de6e425e22c10e061f" integrity sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w== -is-arguments@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" - integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-async-function@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" - integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== - dependencies: - async-function "^1.0.0" - call-bound "^1.0.3" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - -is-bigint@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" - integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - dependencies: - has-bigints "^1.0.2" - -is-boolean-object@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" - integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.16.1, is-core-module@^2.16.2: - version "2.17.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.17.0.tgz#75c1c76236c9f7e38ddbfff292e127dc13b21027" - integrity sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA== - dependencies: - hasown "^2.0.4" - -is-data-view@^1.0.1, is-data-view@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" - integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - dependencies: - call-bound "^1.0.2" - get-intrinsic "^1.2.6" - is-typed-array "^1.1.13" - -is-date-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" - integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-docker@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== -is-document.all@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-document.all/-/is-document.all-1.0.0.tgz#163a4bfb362c6ed7b118ce46cdecc4e37dee3195" - integrity sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g== - dependencies: - call-bound "^1.0.4" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" - integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - dependencies: - call-bound "^1.0.3" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-fn@^2.0.0: +is-generator-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" - integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== - dependencies: - call-bound "^1.0.4" - generator-function "^2.0.0" - get-proto "^1.0.1" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - is-glob@^4.0.0, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -4449,120 +3853,21 @@ is-inside-container@^1.0.0: dependencies: is-docker "^3.0.0" -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" - integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - is-promise@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== -is-regex@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" - integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - dependencies: - call-bound "^1.0.3" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" - integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - dependencies: - call-bound "^1.0.3" - has-tostringtag "^1.0.2" - -is-symbol@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" - integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - dependencies: - call-bound "^1.0.2" - has-symbols "^1.1.0" - safe-regex-test "^1.1.0" - -is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - is-unsafe@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/is-unsafe/-/is-unsafe-2.0.2.tgz#bb1ead17f1aa688f6433258b561e98b1a45a1afc" integrity sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ== -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2, is-weakref@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" - integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - dependencies: - call-bound "^1.0.3" - -is-weakset@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" - integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - dependencies: - call-bound "^1.0.3" - get-intrinsic "^1.2.6" - is-wsl@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" @@ -4570,21 +3875,6 @@ is-wsl@^3.1.0: dependencies: is-inside-container "^1.0.0" -isarray@0.0.1: - version "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: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4600,18 +3890,7 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: +istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== @@ -4631,14 +3910,14 @@ istanbul-lib-report@^3.0.0: make-dir "^4.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +istanbul-lib-source-maps@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz#acaef948df7747c8eb5fbf1265cb980f6353a441" + integrity sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A== dependencies: + "@jridgewell/trace-mapping" "^0.3.23" debug "^4.1.1" istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" istanbul-reports@^3.1.3: version "3.2.0" @@ -4657,368 +3936,357 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== +jest-changed-files@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-30.5.1.tgz#0f91cc77e6f834fb2e85bd277d9b313e555acd43" + integrity sha512-0+bvMM/ENhDI29Z8q1r4HxiDIi4G5tnBmSw4esfPQoj9q8Nik7KIyuxHkTVnnniJQf05SxpGaKDQ+4h28ynGPg== dependencies: - execa "^5.0.0" - jest-util "^29.7.0" + execa "^5.1.1" + jest-util "30.5.1" p-limit "^3.1.0" -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== +jest-circus@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-30.5.2.tgz#6898ebf43d0bdd683af9461d0756ffff210f5f25" + integrity sha512-vffFgjs5JSJ9q4ds1vNW3klKYPJfYfIY61LT/zaZgvTeASJOWZUt8LBfHgIcV4rwxlPBLl/ePBGccHEclS4PlQ== dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/environment" "30.5.2" + "@jest/expect" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - chalk "^4.0.0" + chalk "^4.1.2" co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" + dedent "^1.6.0" + is-generator-fn "^2.1.0" + jest-each "30.5.2" + jest-matcher-utils "30.5.2" + jest-message-util "30.5.1" + jest-runtime "30.5.2" + jest-snapshot "30.5.2" + jest-util "30.5.1" p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" + pretty-format "30.5.1" + pure-rand "^7.0.0" slash "^3.0.0" - stack-utils "^2.0.3" + stack-utils "^2.0.6" + +jest-cli@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-30.5.2.tgz#9936348acafd63aa5a2cb40021dd7f393e6212c2" + integrity sha512-YYYxUUVjFgPvgEleKNKMaYGIFgR3l3832Cl0kRL/oCiDZ03v7wImUtquHl2OOBCCNgprjZgBN5bczS/JklPBDg== + dependencies: + "@jest/core" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/types" "30.5.1" + chalk "^4.1.2" + exit-x "^0.2.2" + import-local "^3.2.0" + jest-config "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" + yargs "^17.7.2" -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" +jest-config@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-30.5.2.tgz#57e6b5f5c16a953b037e9a967152ec882118a356" + integrity sha512-U6221OZekabePvGcGPf4raIBKMvYQWFHvhobDJRojOYaFMj2HaGytAdknjDhYc6JTz2fdHW9+6k0wWUDaNeOFQ== + dependencies: + "@babel/core" "^7.27.4" + "@jest/get-type" "30.5.0" + "@jest/pattern" "30.5.0" + "@jest/test-sequencer" "30.5.2" + "@jest/types" "30.5.1" + babel-jest "30.5.2" + chalk "^4.1.2" + ci-info "^4.2.0" + deepmerge "^4.3.1" + glob "^13.0.6" + graceful-fs "^4.2.11" + jest-circus "30.5.2" + jest-docblock "30.5.0" + jest-environment-node "30.5.2" + jest-regex-util "30.5.0" + jest-resolve "30.5.1" + jest-runner "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" parse-json "^5.2.0" - pretty-format "^29.7.0" + pretty-format "30.5.1" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" +jest-diff@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.5.2.tgz#0d96ecb53aac3949132a6ce2106790d9212edced" + integrity sha512-rBtHnI6BWTiWj3lM7fOLVfChx7R9B0u9VV3PRHawKs79x6ZjW1QoSrKenaigNGWlvhtoi2BqvDbABDie+Os3xQ== + dependencies: + "@jest/diff-sequences" "30.5.0" + "@jest/get-type" "30.5.0" + chalk "^4.1.2" + pretty-format "30.5.1" + +jest-docblock@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-30.5.0.tgz#7cf9d08ba714fde0b68c9cb4bfc0be867a7dd11d" + integrity sha512-NwDqcxtoZi33RhuW+zJS/RVA3rmheQ8BnwpYZuc/Eruaz6seQb7+aoCeDZu/3X7W2XmD8DbSo9Pn72DbKsBFYw== + dependencies: + detect-newline "^3.1.0" + +jest-each@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-30.5.2.tgz#fd905f1ce450ab08fdc8ea8ff2bf740db2380872" + integrity sha512-GRrW+7fmmgmkvyfEBqc1QFdWnF1Ex5yG6Y6AWL4TTxnkWlKIT98dsKh3P3UuWm6v4XsQwVE6DEzXIPMzWJ3ZbA== + dependencies: + "@jest/get-type" "30.5.0" + "@jest/types" "30.5.1" + chalk "^4.1.2" + jest-regex-util "30.5.0" + jest-util "30.5.1" + pretty-format "30.5.1" + +jest-environment-node@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-30.5.2.tgz#64207d64054ccaa30d677dbd99eb95c7f1c72fa1" + integrity sha512-Ciz4KgTGIbojxSKpuFImgWJj5EyqfE8xMq9NxWmOXnQywHHS03H9Mv+vaCB29J5pr3JBrY27WbRV18rBdjh8Dg== + dependencies: + "@jest/environment" "30.5.2" + "@jest/fake-timers" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + jest-mock "30.5.2" + jest-util "30.5.1" + jest-validate "30.5.1" -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== +jest-haste-map@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-30.5.1.tgz#a1dbba63564492f53783d754623cdd41bb0328b0" + integrity sha512-VIFgt67jW480YDxKfEv9IYQKrFpYt7bOCMn3VsnjK7AK9qo7p6acpnA1DHwsVOULE3dTaYew/6JaTD/d0VDHoQ== dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" + "@jest/types" "30.5.1" + "@parcel/watcher" "^2.6.0" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" + anymatch "^3.1.3" + fb-watchman "^2.0.2" + fdir "^6.5.0" + graceful-fs "^4.2.11" + jest-regex-util "30.5.0" + jest-util "30.5.1" + jest-worker "30.5.1" + picomatch "^4.0.3" + +jest-leak-detector@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-30.5.1.tgz#bca4b6b08d5e3a0b46560e268d28c89b15e7b72e" + integrity sha512-gt4GT2aWgEoCNTcBe4rqS74xTIUJxi+UD9SNSu9aOk5LmTEd6fS5KSTmAKAfitCCktQHNN+upUuL6EkBfFbMDQ== + dependencies: + "@jest/get-type" "30.5.0" + pretty-format "30.5.1" + +jest-matcher-utils@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-30.5.2.tgz#360433048fea76513dd2ceed6dfaf5f488164ed5" + integrity sha512-lFkB365PTIHOhPzwrb9T6gvlDnPpOZ7/c3ewOKKB7bzztqjVrtlyRL2MkyfJXpyY2u2SKw001JKrTx14fBUFcQ== + dependencies: + "@jest/get-type" "30.5.0" + chalk "^4.1.2" + jest-diff "30.5.2" + pretty-format "30.5.1" + +jest-message-util@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.5.1.tgz#e8d04d7b6d123f5dbfb1497432cd9c2b3d510f90" + integrity sha512-UdQlLdd9wL/Ys7xRErckqwD6wPlSZYueosSWuHc1r2ztGLwlgPvtSJq2+BPEgaEY13WLvfFbmhTj8pba0Sd1jg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@jest/types" "30.5.1" + "@types/stack-utils" "^2.0.3" + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-util "30.5.1" + picomatch "^4.0.3" + pretty-format "30.5.1" slash "^3.0.0" - stack-utils "^2.0.3" + stack-utils "^2.0.6" -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== +jest-mock@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.5.2.tgz#78a8e24589113fa95a96c70d14b3c01c6116c2c2" + integrity sha512-KTHb37Fhj8xY8qPFvTFaFJHcdsumQp+ExsUlgoX232Agmc706gagBs53+CYvulV7MVQo9AgXOUxsqzzVBoJlrA== dependencies: - "@jest/types" "^29.6.3" + "@jest/expect-utils" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" + jest-util "30.5.1" + +jest-regex-util@30.5.0: + version "30.5.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-30.5.0.tgz#aedb1932d361d4e701ecacda6ac83acf37299505" + integrity sha512-Mg0WK7A6xRHLSA1udJ8y9f3lM0uUhFTBnLKzwPmqB9AylvpleJ6BLemR8K9dK27DY+cesDryoA7yLZCAHsPG1A== + +jest-resolve-dependencies@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-30.5.2.tgz#d8f45bea3cd6e20f806ef753acd521c104e91ee0" + integrity sha512-GMI0DP5enX9Z2qW2zFy1bOkrCfWAOPRJQ7qHt0pdfrxBPsgWxglMPrRSK2TX/wRWYxcPRSLFg3Z88qPOzHx7FQ== + dependencies: + jest-regex-util "30.5.0" + jest-snapshot "30.5.2" + +jest-resolve@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-30.5.1.tgz#929372ea827696ceb710eed4168999d0dd2152ed" + integrity sha512-wprhLejRtwN6h8ZgaqC0eYjGJ1uMdGPT/+b3eFncbG4NWuuP9QL+vWwRinu9waw7hkOLcpMJGVJAMgBwsPssMQ== + dependencies: + chalk "^4.1.2" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + jest-util "30.5.1" + jest-validate "30.5.1" slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" + unrs-resolver "^1.12.1" + +jest-runner@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-30.5.2.tgz#48332168938d586a71cd0076405f647e922b90f6" + integrity sha512-/B6px7hiiNhVSRwuv9AGn0nawYvwsHeQZ3ItTd5Gp2diFd0EOKaWVeWqcbw3L88vx1GfpCKjQkxWItZCTl11Rw== + dependencies: + "@jest/console" "30.5.2" + "@jest/environment" "30.5.2" + "@jest/source-map" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - chalk "^4.0.0" + chalk "^4.1.2" emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" + exit-x "^0.2.2" + graceful-fs "^4.2.11" + jest-docblock "30.5.0" + jest-environment-node "30.5.2" + jest-haste-map "30.5.1" + jest-leak-detector "30.5.1" + jest-message-util "30.5.1" + jest-resolve "30.5.1" + jest-runtime "30.5.2" + jest-util "30.5.1" + jest-watcher "30.5.2" + jest-worker "30.5.1" p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" + +jest-runtime@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-30.5.2.tgz#7391ad9084209d2e38713350ba0e324be8248b3d" + integrity sha512-0paUAHBlheai10A3XSy9Xh+YBG0IROy+/qzcDPzQ/nbbXrznQzeWy5qniICWK6d3W3scaRQCVAbXdcK0ibBq4w== + dependencies: + "@jest/environment" "30.5.2" + "@jest/fake-timers" "30.5.2" + "@jest/globals" "30.5.2" + "@jest/source-map" "30.5.2" + "@jest/test-result" "30.5.2" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" + chalk "^4.1.2" + cjs-module-lexer "^2.2.0" + collect-v8-coverage "^1.0.2" + es-module-lexer "^2.1.0" + glob "^13.0.6" + graceful-fs "^4.2.11" + jest-haste-map "30.5.1" + jest-message-util "30.5.1" + jest-mock "30.5.2" + jest-regex-util "30.5.0" + jest-resolve "30.5.1" + jest-snapshot "30.5.2" + jest-util "30.5.1" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" +jest-snapshot@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-30.5.2.tgz#494e37565d2201ea725c3582252083ef1b6be85b" + integrity sha512-jKIdes25AnAH73dOCi2qE6J6vHJ6L2vyBS11M89kT50DVJcLTf2AOjvcc+2vVaN8lUbY5v2R83aqXo3Ro9fqYA== + dependencies: + "@babel/core" "^7.27.4" + "@babel/generator" "^7.27.5" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/types" "^7.27.3" + "@jest/expect-utils" "30.5.2" + "@jest/get-type" "30.5.0" + "@jest/snapshot-utils" "30.5.1" + "@jest/transform" "30.5.2" + "@jest/types" "30.5.1" + babel-preset-current-node-syntax "^1.2.0" + chalk "^4.1.2" + expect "30.5.2" + graceful-fs "^4.2.11" + jest-diff "30.5.2" + jest-matcher-utils "30.5.2" + jest-message-util "30.5.1" + jest-util "30.5.1" + pretty-format "30.5.1" + semver "^7.7.2" + synckit "^0.11.8" + +jest-util@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-30.5.1.tgz#1e71a1ee24f365c34001c1f8aab6d6f52ceadcb7" + integrity sha512-yKuxmNy2rSbTXw+3SIPanJo+nV4/BS1p26v44IYBFMsswSQySfMMcPHErnOncda7i9HEz0q605rIhSTBVgrZTg== + dependencies: + "@jest/types" "30.5.1" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" + chalk "^4.1.2" + ci-info "^4.2.0" + graceful-fs "^4.2.11" + picomatch "^4.0.3" + +jest-validate@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-30.5.1.tgz#0922700fae123c9e1d8403bdf62924b7e3c668de" + integrity sha512-i/buJ56wTpxihE93hQYNMfdOThS87+HGvLZzZJmU4xggPcdTYQq051iwALLCHp3q+SkCGH+EFejQZz5EbBSkkg== + dependencies: + "@jest/get-type" "30.5.0" + "@jest/types" "30.5.1" + camelcase "^6.3.0" + chalk "^4.1.2" leven "^3.1.0" - pretty-format "^29.7.0" + pretty-format "30.5.1" -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== +jest-watcher@30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-30.5.2.tgz#899caa0c886ea9c18c9b9cbc7f508f7a8fc8647f" + integrity sha512-rqRgg4R11GA9m1UsEZwQeixHsgZReCn6TOHAHtIH33yXrIvoX0OGPA20Yzzjkz7X40fZvcRSxEpQppYPcWzmcQ== dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" + "@jest/test-result" "30.5.2" + "@jest/types" "30.5.1" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" + jest-util "30.5.1" + string-length "^4.0.2" -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== +jest-worker@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.5.1.tgz#32a4c17502addef713411ca3bf951796de83e2ba" + integrity sha512-Cbxh5v7AoLuFRmFJSM4/aHdQ68rjXvUWr716EE0Dh3I7T+T/3FgFKhOERGXHcU2Meftq9+9zxPM3TSNyI9D+HA== dependencies: "@types/node" "*" - jest-util "^29.7.0" + "@ungap/structured-clone" "^1.3.0" + jest-util "30.5.1" merge-stream "^2.0.0" - supports-color "^8.0.0" + supports-color "^8.1.1" -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== +jest@^30.5.2: + version "30.5.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-30.5.2.tgz#f70e547083b214a3a8314fcf45f54d559b32d4a1" + integrity sha512-3gnpdBIza8ijCl3iMV9ChE3hSt1+46865qqod863gQtJr1DixOkAU5DoGbi3u+XlRcw++BhZQMu/y4xBdHBvSQ== dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -jmespath@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== + "@jest/core" "30.5.2" + "@jest/types" "30.5.1" + import-local "^3.2.0" + jest-cli "30.5.2" joi@^18.0.1: version "18.2.9" @@ -5083,13 +4351,6 @@ json-with-bigint@^3.5.3: resolved "https://registry.yarnpkg.com/json-with-bigint/-/json-with-bigint-3.5.12.tgz#9f6bf722a9847ed72fa9b217b2b66181227c454c" integrity sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w== -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" @@ -5116,11 +4377,6 @@ jsonwebtoken@^9.0.0: ms "^2.1.1" semver "^7.5.4" -just-extend@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" - integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== - jwa@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" @@ -5145,96 +4401,11 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" -kind-of@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-js@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-4.0.2.tgz#fa51527fa38b87c4d111b0d0334de47fcda38f21" - integrity sha512-PeGjZsyMG4O89KHiez1zoMJxStnkM+oBIqgACjoo5PJqFiSUUm3GNod/KcbqN5ktyZa8jkG7I1T0P2u6HN9lIg== - dependencies: - abstract-leveldown "~6.0.1" - immediate "~3.2.3" - inherits "^2.0.3" - ltgt "^2.1.2" - typedarray-to-buffer "~3.1.5" - -level-packager@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-post@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0" - integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew== - dependencies: - ltgt "^2.1.2" - -level-sublevel@~6.6.5: - version "6.6.5" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.5.tgz#acddfa2be033b9e503544e2c647f3c03d5a23fbd" - integrity sha512-SBSR60x+dghhwGUxPKS+BvV1xNqnwsEUBKmnFepPaHJ6VkBXyPK9SImGc3K2BkwBfpxlt7GKkBNlCnrdufsejA== - dependencies: - bytewise "~1.1.0" - levelup "~0.19.0" - ltgt "~2.1.1" - pull-defer "^0.2.2" - pull-level "^2.0.3" - pull-stream "^3.6.8" - typewiselite "~1.0.0" - xtend "~4.0.0" - -level-supports@^6.0.0: +level-supports@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-6.2.0.tgz#e78b228973a24acdc5199c5f51e244e70f26c611" integrity sha512-QNxVXP0IRnBmMsJIh+sb2kwNCYcKciQZJEt+L1hPCHrKNELllXhvrlClVHXBYZVT+a7aTSM6StgNXdAldoab3w== -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - level-transcoder@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" @@ -5243,58 +4414,6 @@ level-transcoder@^1.0.1: buffer "^6.0.3" module-error "^1.0.1" -level@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-9.0.0.tgz#880aa9d341a5411e36bed77f4fa233f425b492a8" - integrity sha512-n+mVuf63mUEkd8NUx7gwxY+QF5vtkibv6fXTGUgtHWLPDaA5/XZjLcI/Q1nQ8k6OttHT6Ezt+7nSEXsRUfHtOQ== - dependencies: - abstract-level "^2.0.1" - browser-level "^2.0.0" - classic-level "^2.0.0" - -level@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-5.0.1.tgz#8528cc1ee37ac413270129a1eab938c610be3ccb" - integrity sha512-wcak5OQeA4rURGacqS62R/xNHjCYnJSQDBOlm4KNUGJVE9bWv2B04TclqReYejN+oD65PzD4FsqeWoI5wNC5Lg== - dependencies: - level-js "^4.0.0" - level-packager "^5.0.0" - leveldown "^5.0.0" - opencollective-postinstall "^2.0.0" - -leveldown@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" - integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -levelup@~0.19.0: - version "0.19.1" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.19.1.tgz#f3a6a7205272c4b5f35e412ff004a03a0aedf50b" - integrity sha512-FljDvNf24vbG8fiO1iF0XbLym1lrR80wmn+x6NOFxhJ9arbPWXkzfhJpS8a2w5ft8MaD95c0+RvEHa0QHegAUA== - dependencies: - bl "~0.8.1" - deferred-leveldown "~0.2.0" - errno "~0.1.1" - prr "~0.0.0" - readable-stream "~1.0.26" - semver "~5.1.0" - xtend "~3.0.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5409,21 +4528,16 @@ long@^5.0.0, long@^5.3.2: resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== -looper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" - integrity sha512-6DzMHJcjbQX/UPHc1rRCBfKlLwDkvuGZ715cIR36wSdYqWXFT35uLXq5P/2orl3tz+t+VOVPxw4yPinQlUDGDQ== - -looper@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" - integrity sha512-LJ9wplN/uSn72oJRsXTx+snxPet5c8XiZmOKCm906NVYu+ag6SB6vUcnJcWxgnl2NfbIyeobAn7Bwv6xRj2XJg== - lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== +lru-cache@^11.0.0: + version "11.5.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.5.3.tgz#a7767b4034e35269562d2b9da2b185b5df70c421" + integrity sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5431,16 +4545,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -ltgt@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" - integrity sha512-5VjHC5GsENtIi5rbJd+feEpDKhfr7j0odoUR2Uh978g+2p93nd5o34cTjQWohXsPsCZeqoDnIqEf88mPCe0Pfw== - luxon@^3.2.1: version "3.7.2" resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" @@ -5477,13 +4581,6 @@ make-fetch-happen@^14.0.3: promise-retry "^2.0.1" ssri "^12.0.0" -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - markdown-it@13.0.1: version "13.0.1" resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" @@ -5513,11 +4610,6 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - maybe-combine-errors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/maybe-combine-errors/-/maybe-combine-errors-1.0.0.tgz#e9592832e61fc47643a92cff3c1f33e27211e5be" @@ -5548,14 +4640,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@^4.0.4: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -5592,7 +4676,7 @@ minimatch@^10.2.2: dependencies: brace-expansion "^5.0.8" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^3.1.5: +minimatch@^3.1.1, minimatch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== @@ -5606,11 +4690,6 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.2" -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - minipass-collect@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" @@ -5657,7 +4736,7 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.2, minipass@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== @@ -5727,7 +4806,7 @@ ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nan@^2.13.2, nan@^2.14.0, nan@^2.24.0: +nan@^2.14.0, nan@^2.24.0: version "2.29.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.29.0.tgz#95bace50f153289240573c08401acc63a30659d4" integrity sha512-GlGk3HIvitbvs+LT3g6XUP1kpirKNvmDFwF/bmo6XNWSb/eYEs/O4bfgIEIXCZ+lIOTS5xNwDvSGMw6FJdAhtA== @@ -5737,24 +4816,16 @@ napi-macros@^2.2.2: resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== +napi-postinstall@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" + integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -needle@^3.3.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-3.5.0.tgz#aa2023642cb41b11a11babb733fd8fa952919112" - integrity sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w== - dependencies: - iconv-lite "^0.6.3" - sax "^1.2.4" - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -5774,46 +4845,21 @@ new-find-package-json@^2.0.0: dependencies: debug "^4.3.4" -nise@^6.1.1: - version "6.1.5" - resolved "https://registry.yarnpkg.com/nise/-/nise-6.1.5.tgz#a2f4cd07d8d38ebc5ae5500168eea0f08a2fa4b9" - integrity sha512-SnRDPDBjxZZoU2n0+gzzLtSvo1OZo7j6jnbXsoh3AFxEGhaFU7ZF0TmefuKERq79wxR2U+MPn7ArW+Tl+clC3A== - dependencies: - "@sinonjs/commons" "^3.0.1" - "@sinonjs/fake-timers" "^15.1.1" - just-extend "^6.2.0" - path-to-regexp "^8.3.0" +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== node-addon-api@^8.3.0: version "8.9.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-8.9.2.tgz#db7ac94a13ffd9b55e6cb04584bd5ef8e1d74b18" integrity sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg== -node-exports-info@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/node-exports-info/-/node-exports-info-1.6.2.tgz#243a3105677d6781cd26e6a72350fd928a5cb46f" - integrity sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag== - dependencies: - array.prototype.flatmap "^1.3.3" - es-errors "^1.3.0" - object.entries "^1.1.9" - semver "^6.3.1" - -node-forge@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2" - integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ== - node-gyp-build@^4.3.0: version "4.8.4" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== -node-gyp-build@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" - integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== - node-gyp@^11.1.0: version "11.5.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-11.5.0.tgz#82661b5f40647a7361efe918e3cea76d297fcc56" @@ -5886,62 +4932,6 @@ object-inspect@^1.13.3, object-inspect@^1.13.4: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.7: - version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" - object-keys "^1.1.1" - -object.entries@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" - integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-object-atoms "^1.1.1" - -object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.values@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" - integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== - dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -5973,11 +4963,6 @@ open@^10.1.0: is-inside-container "^1.0.0" wsl-utils "^0.1.0" -opencollective-postinstall@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -5990,16 +4975,6 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -own-keys@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.2.tgz#31448ec1f781ecb1447f6f6aa0d6534222af59de" - integrity sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg== - dependencies: - call-bound "^1.0.4" - get-intrinsic "^1.3.0" - object-keys "^1.1.1" - safe-push-apply "^1.0.0" - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -6085,11 +5060,6 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - path-scurry@^1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" @@ -6098,7 +5068,15 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@^8.0.0, path-to-regexp@^8.3.0: +path-scurry@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.2.tgz#6be0d0ee02a10d9e0de7a98bae65e182c9061f85" + integrity sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +path-to-regexp@^8.0.0: version "8.4.2" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.4.2.tgz#795c420c4f7ca45c5b887366f622ee0c9852cccd" integrity sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== @@ -6113,17 +5091,17 @@ picocolors@^1.1.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4: version "2.3.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== -picomatch@^4.0.4: +picomatch@^4.0.3, picomatch@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.7.tgz#6313360034ccb36b3dc61ecbdff78121f90fe21f" integrity sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA== -pirates@^4.0.4: +pirates@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== @@ -6135,24 +5113,20 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -possible-typed-array-names@^1.0.0, possible-typed-array-names@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" - integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== +pretty-format@30.5.1: + version "30.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.5.1.tgz#0dda910a75d12346b771977b1f328517b9e846d4" + integrity sha512-byhRAPguVKMQIj4kjJwJ5lAskVhfuiSdiYl/aLTWpgkGEmic2jYhJh1yE9ih8Ox44Xg9ccCT11/S6QrzSJuNrg== dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" + "@jest/react-is-18" "npm:react-is@^18.3.1" + "@jest/react-is-19" "npm:react-is@^19.2.5" + "@jest/schemas" "30.5.0" + ansi-styles "^5.2.0" proc-log@^5.0.0: version "5.0.0" @@ -6175,14 +5149,6 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - protobufjs@^7.5.5: version "7.6.6" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.6.6.tgz#7a3923e8e32b0ee2ff689f8eed6e455c090ac67e" @@ -6208,78 +5174,15 @@ proxy-addr@^2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - integrity sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -pull-cat@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" - integrity sha512-i3w+xZ3DCtTVz8S62hBOuNLRHqVDsHMNZmgrZsjPnsxXUgbWtXEee84lo1XswE7W2a3WHyqsNuDJTjVLAQR8xg== - -pull-defer@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113" - integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA== - -pull-level@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac" - integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg== - dependencies: - level-post "^1.0.7" - pull-cat "^1.1.9" - pull-live "^1.0.1" - pull-pushable "^2.0.0" - pull-stream "^3.4.0" - pull-window "^2.1.4" - stream-to-pull-stream "^1.7.1" - -pull-live@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" - integrity sha512-tkNz1QT5gId8aPhV5+dmwoIiA1nmfDOzJDlOOUpU5DNusj6neNd3EePybJ5+sITr2FwyCs/FVpx74YMCfc8YeA== - dependencies: - pull-cat "^1.1.9" - pull-stream "^3.4.0" - -pull-pushable@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" - integrity sha512-M7dp95enQ2kaHvfCt2+DJfyzgCSpWVR2h2kWYnVsW6ZpxQBx5wOu0QWOvQPVoPnBLUZYitYP2y7HyHkLQNeGXg== - -pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: - version "3.7.0" - resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.7.0.tgz#85de0e44ff38a4d2ad08cc43fc458e1922f9bf0b" - integrity sha512-Eco+/R004UaCK2qEDE8vGklcTG2OeZSVm1kTUQNrykEjDwcFXDZhygFDsW49DbXyJMEhHeRL3z5cRVqPAhXlIw== - -pull-window@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" - integrity sha512-cbDzN76BMlcGG46OImrgpkMf/VkCnupj8JhsrpBw3aWBM9ye345aYnqitmZCgauBkc0HbbRRn9hCnsa3k2FNUg== - dependencies: - looper "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== +pure-rand@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" + integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== qs@^6.14.0, qs@^6.15.2: version "6.16.0" @@ -6289,20 +5192,6 @@ qs@^6.14.0, qs@^6.15.2: es-define-property "^1.0.1" side-channel "^1.1.1" -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - -randomatic@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - range-parser@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.3.0.tgz#d7f19be812bb62721472b45d3be219ef09572b47" @@ -6318,12 +5207,7 @@ raw-body@^3.0.2: iconv-lite "~0.7.0" unpipe "~1.0.0" -react-is@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -readable-stream@^3.4.0, readable-stream@^3.5.0: +readable-stream@^3.5.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -6332,16 +5216,6 @@ readable-stream@^3.4.0, readable-stream@^3.5.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.26: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - redis-errors@1.2.0, redis-errors@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" @@ -6354,32 +5228,6 @@ redis-parser@3.0.0: dependencies: redis-errors "^1.0.0" -reflect.getprototypeof@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" - integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-abstract "^1.23.9" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.7" - get-proto "^1.0.1" - which-builtin-type "^1.2.1" - -regexp.prototype.flags@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" - integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - dependencies: - call-bind "^1.0.8" - define-properties "^1.2.1" - es-errors "^1.3.0" - get-proto "^1.0.1" - gopd "^1.2.0" - set-function-name "^2.0.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6410,33 +5258,6 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve.exports@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" - integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== - -resolve@^1.20.0: - version "1.22.12" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" - integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== - dependencies: - es-errors "^1.3.0" - is-core-module "^2.16.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.6: - version "2.0.0-next.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.7.tgz#ba3b035d4b1ee7c522426eee73cabcb0fd5515dd" - integrity sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ== - dependencies: - es-errors "^1.3.0" - is-core-module "^2.16.2" - node-exports-info "^1.6.0" - object-keys "^1.1.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -6458,17 +5279,6 @@ run-applescript@^7.0.0: resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== -safe-array-concat@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.4.tgz#a54cc9b61a57f33b42abad3cbdda3a2b38cc5719" - integrity sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - get-intrinsic "^1.3.0" - has-symbols "^1.1.0" - isarray "^2.0.5" - safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -6479,53 +5289,26 @@ safe-json-stringify@^1.2.0: resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== -safe-push-apply@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" - integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - dependencies: - es-errors "^1.3.0" - isarray "^2.0.5" - -safe-regex-test@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" - integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - is-regex "^1.2.1" - "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - -sax@>=0.6.0, sax@^1.2.4: +sax@>=0.6.0: version "1.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.1.tgz#4c23cf608c0b693ab54b4b5888e92cfe977b9843" integrity sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q== -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.3: +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.2: version "7.8.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== -semver@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" - integrity sha512-bNx9Zdbi1OUN62PbKeG4IgGG8YILX/nkHJ0NQEBwg5FmX8qTJfqhYd3reqkm0DxHCC8nkazb6UjNiBSHCBWVtA== - send@^1.1.0, send@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" @@ -6553,37 +5336,6 @@ serve-static@^2.2.0: parseurl "^1.3.3" send "^1.2.0" -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" - integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - dependencies: - dunder-proto "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -6630,7 +5382,7 @@ side-channel-weakmap@^1.0.2: object-inspect "^1.13.3" side-channel-map "^1.0.1" -side-channel@^1.1.0, side-channel@^1.1.1: +side-channel@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== @@ -6641,7 +5393,7 @@ side-channel@^1.1.0, side-channel@^1.1.1: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -6661,22 +5413,15 @@ simple-glob@^0.2.0: lodash.flatten "^4.4.0" lodash.union "^4.6.0" -sinon@^19.0.2: - version "19.0.5" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-19.0.5.tgz#64fd2f84786a043f721246c40b36bef4c4b76b3c" - integrity sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q== +sinon@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-22.1.0.tgz#df5a9308d1818166d1370795a4953ceadc5ff706" + integrity sha512-n1ajF2rBWMTtEwbKcw4UdFg4nCnDdq/U6RDoxtOd7oapOlRoJ5ynwFx60owROyhDpA9QhMZi0pCO/xtmwFjG7w== dependencies: "@sinonjs/commons" "^3.0.1" - "@sinonjs/fake-timers" "^13.0.5" - "@sinonjs/samsam" "^8.0.1" - diff "^7.0.0" - nise "^6.1.1" - supports-color "^7.2.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + "@sinonjs/fake-timers" "^15.4.0" + "@sinonjs/samsam" "^10.0.2" + diff "^9.0.0" slash@^3.0.0: version "3.0.0" @@ -6748,19 +5493,6 @@ sorted-array-functions@^1.3.0: resolved "https://registry.yarnpkg.com/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz#8605695563294dffb2c9796d602bd8459f7a0dd5" integrity sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA== -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - sparse-bitfield@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" @@ -6788,7 +5520,7 @@ ssri@^12.0.0: dependencies: minipass "^7.0.3" -stack-utils@^2.0.3: +stack-utils@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== @@ -6805,14 +5537,6 @@ statuses@^2.0.1, statuses@^2.0.2, statuses@~2.0.2: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== -stop-iteration-iterator@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" - integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== - dependencies: - es-errors "^1.3.0" - internal-slot "^1.1.0" - stream-browserify@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" @@ -6821,14 +5545,6 @@ stream-browserify@3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" -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" - integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== - dependencies: - looper "^3.0.0" - pull-stream "^3.2.3" - streamx@^2.12.5, streamx@^2.15.0, streamx@^2.25.0: version "2.28.1" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.28.1.tgz#376cd42a089505a69bec0efdb5189aa45586141f" @@ -6838,7 +5554,7 @@ streamx@^2.12.5, streamx@^2.15.0, streamx@^2.25.0: fast-fifo "^1.3.2" text-decoder "^1.1.0" -string-length@^4.0.1: +string-length@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== @@ -6873,39 +5589,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trim@^1.2.10: - version "1.2.11" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz#e6bd19cda3985d05a42dda31f3ddf4d35d3430e3" - integrity sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-data-property "^1.1.4" - define-properties "^1.2.1" - es-abstract "^1.24.2" - es-object-atoms "^1.1.2" - has-property-descriptors "^1.0.2" - safe-regex-test "^1.1.0" - -string.prototype.trimend@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz#be6bcf4f3fe0460bdeccdb2cf4f971b310f8346e" - integrity sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw== - dependencies: - call-bind "^1.0.9" - call-bound "^1.0.4" - define-properties "^1.2.1" - es-object-atoms "^1.1.2" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -6913,11 +5596,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - "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" @@ -6932,18 +5610,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: +strip-ansi@^7.0.1: version "7.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: ansi-regex "^6.2.2" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -6966,24 +5639,26 @@ strnum@^2.4.2: dependencies: anynum "^1.0.1" -supports-color@^7.1.0, supports-color@^7.2.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: +supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +synckit@^0.11.8: + version "0.11.13" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.13.tgz#062a5ea57d81befc35892f8254de5c567e97c80a" + integrity sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg== + dependencies: + "@pkgr/core" "^0.3.6" tar-stream@^3.1.7: version "3.2.1" @@ -7020,14 +5695,14 @@ teex@^1.0.1: dependencies: streamx "^2.12.5" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +test-exclude@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.2.tgz#482392077630bc57d5630c13abe908bb910dfc65" + integrity sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw== dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + glob "^10.4.1" + minimatch "^10.2.2" text-decoder@^1.1.0: version "1.2.7" @@ -7041,7 +5716,7 @@ text-decoder@^1.1.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tinyglobby@^0.2.12, tinyglobby@^0.2.15: +tinyglobby@^0.2.12: version "0.2.17" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== @@ -7049,18 +5724,6 @@ tinyglobby@^0.2.12, tinyglobby@^0.2.15: fdir "^6.5.0" picomatch "^4.0.4" -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -7073,21 +5736,6 @@ tr46@^5.1.0: dependencies: punycode "^2.3.1" -ts-api-utils@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1" - integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA== - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - tslib@^2.2.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" @@ -7124,94 +5772,11 @@ type-is@^2.0.1, type-is@^2.1.0: media-typer "^1.1.0" mime-types "^3.0.0" -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typed-array-byte-length@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" - integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - dependencies: - call-bind "^1.0.8" - for-each "^0.3.3" - gopd "^1.2.0" - has-proto "^1.2.0" - is-typed-array "^1.1.14" - -typed-array-byte-offset@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.5.tgz#c076d6a0db563933154b3c442204b614bf0d7b15" - integrity sha512-0FHJvLPqZ7KJzp17O13jfsAjsqazgrxBu2zEK95PmUz8lv2+GjRuxUInCr2Rk9Dms3ihN21zJ929ZO43yJ95QQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.9" - for-each "^0.3.5" - gopd "^1.2.0" - is-typed-array "^1.1.15" - reflect.getprototypeof "^1.0.10" - -typed-array-length@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.8.tgz#0b70e982c9e9dafe2def6d6458ff4b3f2d2b6d70" - integrity sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g== - dependencies: - call-bind "^1.0.9" - for-each "^0.3.5" - gopd "^1.2.0" - is-typed-array "^1.1.15" - possible-typed-array-names "^1.1.0" - reflect.getprototypeof "^1.0.10" - -typedarray-to-buffer@~3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -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" - integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== - -typewise@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" - integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== - dependencies: - typewise-core "^1.2.0" - -typewiselite@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" - integrity sha512-J9alhjVHupW3Wfz6qFRGgQw0N3gr8hOkw6zm7FZ6UR1Cse/oD9/JVok7DNE9TT9IbciDHX2Ex9+ksE6cRmtymw== - uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -unbox-primitive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" - integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== - dependencies: - call-bound "^1.0.3" - has-bigints "^1.0.2" - has-symbols "^1.1.0" - which-boxed-primitive "^1.1.1" - "undici-types@>=7.24.0 <7.24.7": version "7.24.6" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91" @@ -7241,6 +5806,36 @@ unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unrs-resolver@^1.12.1: + version "1.12.2" + resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.12.2.tgz#a6c6888396abba5adaac4cab6587df866f1d7afd" + integrity sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ== + dependencies: + napi-postinstall "^0.3.4" + optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi" "1.12.2" + "@unrs/resolver-binding-android-arm64" "1.12.2" + "@unrs/resolver-binding-darwin-arm64" "1.12.2" + "@unrs/resolver-binding-darwin-x64" "1.12.2" + "@unrs/resolver-binding-freebsd-x64" "1.12.2" + "@unrs/resolver-binding-linux-arm-gnueabihf" "1.12.2" + "@unrs/resolver-binding-linux-arm-musleabihf" "1.12.2" + "@unrs/resolver-binding-linux-arm64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-arm64-musl" "1.12.2" + "@unrs/resolver-binding-linux-loong64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-loong64-musl" "1.12.2" + "@unrs/resolver-binding-linux-ppc64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-riscv64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-riscv64-musl" "1.12.2" + "@unrs/resolver-binding-linux-s390x-gnu" "1.12.2" + "@unrs/resolver-binding-linux-x64-gnu" "1.12.2" + "@unrs/resolver-binding-linux-x64-musl" "1.12.2" + "@unrs/resolver-binding-openharmony-arm64" "1.12.2" + "@unrs/resolver-binding-wasm32-wasi" "1.12.2" + "@unrs/resolver-binding-win32-arm64-msvc" "1.12.2" + "@unrs/resolver-binding-win32-ia32-msvc" "1.12.2" + "@unrs/resolver-binding-win32-x64-msvc" "1.12.2" + update-browserslist-db@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz#197e21fb2561fa89f8b94fad605a2b296a18993a" @@ -7256,14 +5851,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - utf8@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -7274,22 +5861,6 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - uuid@^11.0.3, uuid@^11.1.0: version "11.1.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.1.tgz#f6d81d2e1c65d00762e5e29b16c5d2d995e208ad" @@ -7320,13 +5891,6 @@ vaultclient@scality/vaultclient#8.5.1: werelogs scality/werelogs#8.2.0 xml2js "^0.6.2" -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -7361,59 +5925,6 @@ werelogs@scality/werelogs#8.2.5, "werelogs@scality/werelogs#semver:^8.2.4": tr46 "^5.1.0" webidl-conversions "^7.0.0" -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" - integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== - dependencies: - is-bigint "^1.1.0" - is-boolean-object "^1.2.1" - is-number-object "^1.1.1" - is-string "^1.1.1" - is-symbol "^1.1.1" - -which-builtin-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" - integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - dependencies: - call-bound "^1.0.2" - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.1.0" - is-finalizationregistry "^1.1.0" - is-generator-function "^1.0.10" - is-regex "^1.2.1" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.1.0" - which-collection "^1.0.2" - which-typed-array "^1.1.16" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: - version "1.1.24" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.24.tgz#211f5877c29e6213d50e8f2dce4ac9ca2d0008cf" - integrity sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.9" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -7465,13 +5976,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== +write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" - signal-exit "^3.0.7" + signal-exit "^4.0.1" ws@~8.21.0: version "8.21.3" @@ -7490,7 +6001,7 @@ xml-naming@^0.3.0: resolved "https://registry.yarnpkg.com/xml-naming/-/xml-naming-0.3.0.tgz#46c1e18bfe2858479982dd2accf34d16e749eda2" integrity sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ== -xml2js@0.6.2, xml2js@^0.6.2: +xml2js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== @@ -7508,16 +6019,6 @@ 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: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xtend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" - integrity sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -7548,7 +6049,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1, yargs@^17.7.2: +yargs@^17.7.2: version "17.7.3" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.3.tgz#779dffe6bcafec596a7172e983289a588647faaa" integrity sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==