diff --git a/.github/docker/docker-compose.yaml b/.github/docker/docker-compose.yaml index 2cff2d68ad..7b3782b81c 100644 --- a/.github/docker/docker-compose.yaml +++ b/.github/docker/docker-compose.yaml @@ -15,7 +15,6 @@ services: - REDIS_HOST=0.0.0.0 - REDIS_PORT=6379 - REPORT_TOKEN=report-token-1 - - REMOTE_MANAGEMENT_DISABLE=1 - HEALTHCHECKS_ALLOWFROM=0.0.0.0/0 - DATA_HOST=0.0.0.0 - METADATA_HOST=0.0.0.0 diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index c90c748b57..57a205233e 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -65,7 +65,6 @@ env: # Configs ENABLE_LOCAL_CACHE: 'true' REPORT_TOKEN: 'report-token-1' - REMOTE_MANAGEMENT_DISABLE: '1' # https://github.com/git-lfs/git-lfs/issues/5749 GIT_CLONE_PROTECTION_ACTIVE: 'false' AWS_SDK_JS_SUPPRESS_MAINTENANCE_MODE_MESSAGE: '1' diff --git a/CLAUDE.md b/CLAUDE.md index 8c2eca5bfa..a7317adecd 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,7 +70,6 @@ yarn lint_md # Markdown linting - `mdserver.js` → Metadata server (port 9990) - `dataserver.js` → Data storage server (port 9991) - `pfsserver.js` → Passthrough filesystem server (port 9992) -- `managementAgent.js` → WebSocket management agent (port 8010) ### Core Components diff --git a/bin/secure_channel_proxy.js b/bin/secure_channel_proxy.js deleted file mode 100755 index 8b235f7fe0..0000000000 --- a/bin/secure_channel_proxy.js +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const { startWSManagementClient, startPushConnectionHealthCheckServer } = require('../lib/management/push'); - -const logger = require('../lib/utilities/logger'); - -const { PUSH_ENDPOINT: pushEndpoint, INSTANCE_ID: instanceId, MANAGEMENT_TOKEN: managementToken } = process.env; - -if (!pushEndpoint) { - logger.error('missing push endpoint env var'); - process.exit(1); -} - -if (!instanceId) { - logger.error('missing instance id env var'); - process.exit(1); -} - -if (!managementToken) { - logger.error('missing management token env var'); - process.exit(1); -} - -startPushConnectionHealthCheckServer(err => { - if (err) { - logger.error('could not start healthcheck server', { error: err }); - process.exit(1); - } - const url = `${pushEndpoint}/${instanceId}/ws?proxy=1`; - startWSManagementClient(url, managementToken, err => { - if (err) { - logger.error('connection failed, exiting', { error: err }); - process.exit(1); - } - logger.info('no more connection, exiting'); - process.exit(0); - }); -}); diff --git a/constants.js b/constants.js index fc71e8cbad..61f2ba5b58 100644 --- a/constants.js +++ b/constants.js @@ -165,8 +165,6 @@ const constants = { productName: 'APN/1.0 Scality/1.0 Scality CloudServer for Zenko', // location constraint delimiter zenkoSeparator: ':', - // user metadata applied on zenko objects - zenkoIDHeader: 'x-amz-meta-zenko-instance-id', bucketOwnerActions: [ 'bucketDeleteCors', 'bucketDeleteLifecycle', diff --git a/docs/DOCKER.rst b/docs/DOCKER.rst index ff32b5d568..037283c428 100644 --- a/docs/DOCKER.rst +++ b/docs/DOCKER.rst @@ -93,17 +93,6 @@ new.host.com, for example, specify the endpoint with: .. note:: On Unix-like systems (Linux, OS X, etc.) edit /etc/hosts to associate 127.0.0.1 with new.host.com. -REMOTE_MANAGEMENT_DISABLE -~~~~~~~~~~~~~~~~~~~~~~~~~ - -CloudServer is a part of `Zenko `__. When you run CloudServer standalone it will still try to connect to Orbit by default (browser-based graphical user interface for Zenko). - -Setting this variable to true(1) will default to accessKey1 and verySecretKey1 for credentials and disable the automatic Orbit management: - -.. code-block:: shell - - $ docker run -d --name cloudserver -p 8000:8000 -e REMOTE_MANAGEMENT_DISABLE=1 zenko/cloudserver - SCALITY\_ACCESS\_KEY\_ID and SCALITY\_SECRET\_ACCESS\_KEY ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/Config.js b/lib/Config.js index 4ec980e778..4481517473 100644 --- a/lib/Config.js +++ b/lib/Config.js @@ -3,7 +3,6 @@ const { EventEmitter } = require('events'); const fs = require('fs'); const path = require('path'); const url = require('url'); -const crypto = require('crypto'); const { v4: uuidv4 } = require('uuid'); const cronParser = require('cron-parser'); @@ -1738,27 +1737,6 @@ class Config extends EventEmitter { this.outboundProxy.certs = certObj.certs; } - this.managementAgent = {}; - this.managementAgent.port = 8010; - this.managementAgent.host = 'localhost'; - if (config.managementAgent !== undefined) { - if (config.managementAgent.port !== undefined) { - assert( - Number.isInteger(config.managementAgent.port) && config.managementAgent.port > 0, - 'bad config: managementAgent port must be a positive integer', - ); - this.managementAgent.port = config.managementAgent.port; - } - if (config.managementAgent.host !== undefined) { - assert.strictEqual( - typeof config.managementAgent.host, - 'string', - 'bad config: management agent host must be a string', - ); - this.managementAgent.host = config.managementAgent.host; - } - } - // Ephemeral token to protect the reporting endpoint: // try inherited from parent first, then hardcoded in conf file, // then create a fresh one as last resort. @@ -2222,14 +2200,6 @@ class Config extends EventEmitter { return this.locationConstraints[locationConstraint].details.serverSideEncryption === true; } - getPublicInstanceId() { - return this.publicInstanceId; - } - - setPublicInstanceId(instanceId) { - this.publicInstanceId = crypto.createHash('sha256').update(instanceId).digest('hex'); - } - isQuotaEnabled() { return !!this.quotaEnabled; } diff --git a/lib/api/apiUtils/object/applyZenkoUserMD.js b/lib/api/apiUtils/object/applyZenkoUserMD.js deleted file mode 100644 index 7657542da4..0000000000 --- a/lib/api/apiUtils/object/applyZenkoUserMD.js +++ /dev/null @@ -1,18 +0,0 @@ -const { zenkoIDHeader } = require('@scality/arsenal').constants; - -const _config = require('../../../Config').config; - -/** - * applyZenkoUserMD - if request is within a Zenko deployment, apply user - * metadata called "zenko-source" to the object - * @param {Object} metaHeaders - user metadata object - * @return {undefined} - */ -function applyZenkoUserMD(metaHeaders) { - if (process.env.REMOTE_MANAGEMENT_DISABLE === '0' && !metaHeaders[zenkoIDHeader]) { - // eslint-disable-next-line no-param-reassign - metaHeaders[zenkoIDHeader] = _config.getPublicInstanceId(); - } -} - -module.exports = applyZenkoUserMD; diff --git a/lib/api/apiUtils/object/createAndStoreObject.js b/lib/api/apiUtils/object/createAndStoreObject.js index 8baef17940..3d2f86beae 100644 --- a/lib/api/apiUtils/object/createAndStoreObject.js +++ b/lib/api/apiUtils/object/createAndStoreObject.js @@ -12,7 +12,6 @@ const removeAWSChunked = require('./removeAWSChunked'); const getReplicationInfo = require('./getReplicationInfo'); const { config } = require('../../../Config'); const validateWebsiteHeader = require('./websiteServing').validateWebsiteHeader; -const applyZenkoUserMD = require('./applyZenkoUserMD'); const { isColdStorageClass } = require('./storageClass'); const { algorithms, @@ -158,9 +157,6 @@ function createAndStoreObject( }); return process.nextTick(() => callback(metaHeaders)); } - // if the request occurs within a Zenko deployment, we place a user-metadata - // field on the object - applyZenkoUserMD(metaHeaders); log.trace('meta headers', { metaHeaders, method: 'objectPut' }); const objectKeyContext = { diff --git a/lib/api/initiateMultipartUpload.js b/lib/api/initiateMultipartUpload.js index 1550ddef00..930dbf964c 100644 --- a/lib/api/initiateMultipartUpload.js +++ b/lib/api/initiateMultipartUpload.js @@ -15,7 +15,6 @@ const locationConstraintCheck = require('./apiUtils/object/locationConstraintChe const validateWebsiteHeader = require('./apiUtils/object/websiteServing').validateWebsiteHeader; const monitoring = require('../utilities/monitoringHandler'); const { data } = require('../data/wrapper'); -const applyZenkoUserMD = require('./apiUtils/object/applyZenkoUserMD'); const { validateStorageClass } = require('./apiUtils/object/storageClass'); const { validateHeaders, compareObjectLockInformation } = require('./apiUtils/object/objectLockHelpers'); const { getObjectSSEConfiguration } = require('./apiUtils/bucket/bucketEncryption'); @@ -102,9 +101,6 @@ function initiateMultipartUpload(authInfo, request, log, callback) { }); return process.nextTick(() => callback(metaHeaders)); } - // if the request occurs within a Zenko deployment, we place a user-metadata - // field on the object - applyZenkoUserMD(metaHeaders); const storageClass = request.headers['x-amz-storage-class'] || 'STANDARD'; const metadataValParams = { diff --git a/lib/api/objectCopy.js b/lib/api/objectCopy.js index 97cc63637c..9e98421c27 100644 --- a/lib/api/objectCopy.js +++ b/lib/api/objectCopy.js @@ -18,7 +18,6 @@ const { standardMetadataValidateBucketAndObj } = require('../metadata/metadataUt const validateWebsiteHeader = require('./apiUtils/object/websiteServing').validateWebsiteHeader; const { config } = require('../Config'); const monitoring = require('../utilities/monitoringHandler'); -const applyZenkoUserMD = require('./apiUtils/object/applyZenkoUserMD'); const { isColdStorageClass, validateStorageClass } = require('./apiUtils/object/storageClass'); const { getObjectSSEConfiguration } = require('./apiUtils/bucket/bucketEncryption'); const { setExpirationHeaders } = require('./apiUtils/object/expirationHeaders'); @@ -336,9 +335,6 @@ function _prepMetadata( }); return { error: userMetadata }; } - // if the request occurs within a Zenko deployment, we place a user-metadata - // field on the object - applyZenkoUserMD(userMetadata); // If metadataDirective is: // - 'COPY' and source object has a location constraint in its metadata // we use the bucket destination location constraint diff --git a/lib/management/ChannelMessageV0.js b/lib/management/ChannelMessageV0.js index deed2b3b05..51ece7fdc8 100644 --- a/lib/management/ChannelMessageV0.js +++ b/lib/management/ChannelMessageV0.js @@ -67,38 +67,6 @@ class ChannelMessageV0 { return this.payload; } - /** - * Creates a wire representation of a channel close message - * - * @param {number} channelId Channel number - * - * @returns {Buffer} wire representation - */ - static encodeChannelCloseMessage(channelId) { - const buf = Buffer.alloc(headerSize); - buf.writeUInt8(MessageType.CHANNEL_CLOSE_MESSAGE, 0); - buf.writeUInt8(channelId, 1); - buf.writeUInt8(TargetType.TARGET_ANY, 2); - return buf; - } - - /** - * Creates a wire representation of a channel data message - * - * @param {number} channelId Channel number - * @param {Buffer} data Payload - * - * @returns {Buffer} wire representation - */ - static encodeChannelDataMessage(channelId, data) { - const buf = Buffer.alloc(data.length + headerSize); - buf.writeUInt8(MessageType.CHANNEL_PAYLOAD_MESSAGE, 0); - buf.writeUInt8(channelId, 1); - buf.writeUInt8(TargetType.TARGET_ANY, 2); - data.copy(buf, headerSize); - return buf; - } - /** * Creates a wire representation of a metrics message * diff --git a/lib/management/agentClient.js b/lib/management/agentClient.js deleted file mode 100644 index 51d6052aa4..0000000000 --- a/lib/management/agentClient.js +++ /dev/null @@ -1,91 +0,0 @@ -const WebSocket = require('ws'); -const arsenal = require('@scality/arsenal'); - -const logger = require('../utilities/logger'); -const _config = require('../Config').config; -const { patchConfiguration } = require('./configuration'); -const { reshapeExceptionError } = arsenal.errorUtils; - -const managementAgentMessageType = { - /** Message that contains the loaded overlay */ - NEW_OVERLAY: 1, -}; - -const CONNECTION_RETRY_TIMEOUT_MS = 5000; - -function initManagementClient() { - const { host, port } = _config.managementAgent; - - const ws = new WebSocket(`ws://${host}:${port}/watch`); - - ws.on('open', () => { - logger.info('connected with management agent'); - }); - - ws.on('close', (code, reason) => { - logger.info('disconnected from management agent', { reason }); - setTimeout(initManagementClient, CONNECTION_RETRY_TIMEOUT_MS); - }); - - ws.on('error', error => { - logger.error('error on connection with management agent', { error }); - }); - - ws.on('message', data => { - const method = 'initManagementclient::onMessage'; - const log = logger.newRequestLogger(); - let msg; - - if (!data) { - log.error('message without data', { method }); - return; - } - try { - msg = JSON.parse(data); - } catch (err) { - log.error('data is an invalid json', { method, err, data }); - return; - } - - if (msg.payload === undefined) { - log.error('message without payload', { method }); - return; - } - if (typeof msg.messageType !== 'number') { - log.error('messageType is not an integer', { - type: typeof msg.messageType, - method, - }); - return; - } - - switch (msg.messageType) { - case managementAgentMessageType.NEW_OVERLAY: - patchConfiguration(msg.payload, log, err => { - if (err) { - log.error('failed to patch overlay', { - error: reshapeExceptionError(err), - method, - }); - } - }); - return; - default: - log.error('new overlay message with unmanaged message type', { - method, - type: msg.messageType, - }); - return; - } - }); -} - -function isManagementAgentUsed() { - return process.env.MANAGEMENT_USE_AGENT === '1'; -} - -module.exports = { - managementAgentMessageType, - initManagementClient, - isManagementAgentUsed, -}; diff --git a/lib/management/configuration.js b/lib/management/configuration.js deleted file mode 100644 index fe8d20c5f8..0000000000 --- a/lib/management/configuration.js +++ /dev/null @@ -1,250 +0,0 @@ -const arsenal = require('@scality/arsenal'); - -const { buildAuthDataAccount } = require('../auth/in_memory/builder'); -const _config = require('../Config').config; -const metadata = require('../metadata/wrapper'); - -const { getStoredCredentials } = require('./credentials'); - -const latestOverlayVersionKey = 'configuration/overlay-version'; -const managementDatabaseName = 'PENSIEVE'; -const replicatorEndpoint = 'zenko-cloudserver-replicator'; -const { decryptSecret } = arsenal.pensieve.credentialUtils; -const { patchLocations } = arsenal.patches.locationConstraints; -const { reshapeExceptionError } = arsenal.errorUtils; -const { replicationBackends } = require('@scality/arsenal').constants; - -function overlayHasVersion(overlay) { - return overlay && overlay.version !== undefined; -} - -function remoteOverlayIsNewer(cachedOverlay, remoteOverlay) { - return ( - overlayHasVersion(remoteOverlay) && - (!overlayHasVersion(cachedOverlay) || remoteOverlay.version > cachedOverlay.version) - ); -} - -/** - * Updates the live {Config} object with the new overlay configuration. - * - * No-op if this version was already applied to the live {Config}. - * - * @param {object} newConf Overlay configuration to apply - * @param {werelogs~Logger} log Request-scoped logger - * @param {function} cb Function to call with (error, newConf) - * - * @returns {undefined} - */ -function patchConfiguration(newConf, log, cb) { - if (newConf.version === undefined) { - log.debug('no remote configuration created yet'); - return process.nextTick(cb, null, newConf); - } - - if (_config.overlayVersion !== undefined && newConf.version <= _config.overlayVersion) { - log.debug('configuration version already applied', { configurationVersion: newConf.version }); - return process.nextTick(cb, null, newConf); - } - return getStoredCredentials(log, (err, creds) => { - if (err) { - return cb(err); - } - const accounts = []; - if (newConf.users) { - newConf.users.forEach(u => { - if (u.secretKey && u.secretKey.length > 0) { - const secretKey = decryptSecret(creds, u.secretKey); - // accountType will be service-replication or service-clueso - let serviceName; - if (u.accountType && u.accountType.startsWith('service-')) { - serviceName = u.accountType.split('-')[1]; - } - const newAccount = buildAuthDataAccount( - u.accessKey, - secretKey, - u.canonicalId, - serviceName, - u.userName, - ); - accounts.push(newAccount.accounts[0]); - } - }); - } - - const restEndpoints = Object.assign({}, _config.restEndpoints); - if (newConf.endpoints) { - newConf.endpoints.forEach(e => { - restEndpoints[e.hostname] = e.locationName; - }); - } - - if (!restEndpoints[replicatorEndpoint]) { - restEndpoints[replicatorEndpoint] = 'us-east-1'; - } - - const locations = patchLocations(newConf.locations, creds, log); - if (Object.keys(locations).length !== 0) { - try { - _config.setLocationConstraints(locations); - } catch (error) { - const exceptionError = reshapeExceptionError(error); - log.error('could not apply configuration version location constraints', { - error: exceptionError, - method: 'getStoredCredentials', - }); - return cb(exceptionError); - } - try { - const locationsWithReplicationBackend = Object.keys(locations) - // NOTE: In Orbit, we don't need to have Scality location in our - // replication endpoind config, since we do not replicate to - // any Scality Instance yet. - .filter(key => replicationBackends[locations[key].type]) - .reduce((obj, key) => { - /* eslint no-param-reassign:0 */ - obj[key] = locations[key]; - return obj; - }, {}); - _config.setReplicationEndpoints(locationsWithReplicationBackend); - } catch (error) { - const exceptionError = reshapeExceptionError(error); - log.error('could not apply replication endpoints', { - error: exceptionError, - method: 'getStoredCredentials', - }); - return cb(exceptionError); - } - } - - _config.setAuthDataAccounts(accounts); - _config.setRestEndpoints(restEndpoints); - _config.setPublicInstanceId(newConf.instanceId); - - if (newConf.browserAccess) { - if (Boolean(_config.browserAccessEnabled) !== Boolean(newConf.browserAccess.enabled)) { - _config.browserAccessEnabled = Boolean(newConf.browserAccess.enabled); - _config.emit('browser-access-enabled-change'); - } - } - - _config.overlayVersion = newConf.version; - - log.info('applied configuration version', { configurationVersion: _config.overlayVersion }); - - return cb(null, newConf); - }); -} - -/** - * Writes configuration version to the management database - * - * @param {object} cachedOverlay Latest stored configuration version - * for freshness comparison purposes - * @param {object} remoteOverlay New configuration version - * @param {werelogs~Logger} log Request-scoped logger - * @param {function} cb Function to call with (error, remoteOverlay) - * - * @returns {undefined} - */ -function saveConfigurationVersion(cachedOverlay, remoteOverlay, log, cb) { - if (remoteOverlayIsNewer(cachedOverlay, remoteOverlay)) { - const objName = `configuration/overlay/${remoteOverlay.version}`; - metadata.putObjectMD(managementDatabaseName, objName, remoteOverlay, {}, log, error => { - if (error) { - const exceptionError = reshapeExceptionError(error); - log.error('could not save configuration', { - error: exceptionError, - method: 'saveConfigurationVersion', - configurationVersion: remoteOverlay.version, - }); - cb(exceptionError); - return; - } - metadata.putObjectMD( - managementDatabaseName, - latestOverlayVersionKey, - remoteOverlay.version, - {}, - log, - error => { - if (error) { - log.error('could not save configuration version', { - configurationVersion: remoteOverlay.version, - }); - } - cb(error, remoteOverlay); - }, - ); - }); - } else { - log.debug('no remote configuration to cache yet'); - process.nextTick(cb, null, remoteOverlay); - } -} - -/** - * Loads the latest cached configuration overlay from the management - * database, without contacting the Orbit API. - * - * @param {werelogs~Logger} log Request-scoped logger - * @param {function} callback Function called with (error, cachedOverlay) - * - * @returns {undefined} - */ -function loadCachedOverlay(log, callback) { - return metadata.getObjectMD(managementDatabaseName, latestOverlayVersionKey, {}, log, (err, version) => { - if (err) { - if (err.is.NoSuchKey) { - return process.nextTick(callback, null, {}); - } - return callback(err); - } - return metadata.getObjectMD( - managementDatabaseName, - `configuration/overlay/${version}`, - {}, - log, - (err, conf) => { - if (err) { - if (err.is.NoSuchKey) { - return process.nextTick(callback, null, {}); - } - return callback(err); - } - return callback(null, conf); - }, - ); - }); -} - -function applyAndSaveOverlay(overlay, log) { - patchConfiguration(overlay, log, err => { - if (err) { - log.error('could not apply pushed overlay', { - error: reshapeExceptionError(err), - method: 'applyAndSaveOverlay', - }); - return; - } - saveConfigurationVersion(null, overlay, log, err => { - if (err) { - log.error('could not cache overlay version', { - error: reshapeExceptionError(err), - method: 'applyAndSaveOverlay', - }); - return; - } - log.info('overlay push processed'); - }); - }); -} - -module.exports = { - loadCachedOverlay, - managementDatabaseName, - patchConfiguration, - saveConfigurationVersion, - remoteOverlayIsNewer, - applyAndSaveOverlay, -}; diff --git a/lib/management/credentials.js b/lib/management/credentials.js deleted file mode 100644 index 4184a6091e..0000000000 --- a/lib/management/credentials.js +++ /dev/null @@ -1,147 +0,0 @@ -const arsenal = require('@scality/arsenal'); -const forge = require('node-forge'); -const request = require('../utilities/request'); - -const metadata = require('../metadata/wrapper'); - -const managementDatabaseName = 'PENSIEVE'; -const tokenConfigurationKey = 'auth/zenko/remote-management-token'; -const tokenRotationDelay = 3600 * 24 * 7 * 1000; // 7 days -const { reshapeExceptionError } = arsenal.errorUtils; - -/** - * Retrieves Orbit API token from the management database. - * - * The token is used to authenticate stat posting and - * - * @param {werelogs~Logger} log Request-scoped logger to be able to trace - * initialization process - * @param {function} callback Function called with (error, result) - * - * @returns {undefined} - */ -function getStoredCredentials(log, callback) { - metadata.getObjectMD(managementDatabaseName, tokenConfigurationKey, {}, log, callback); -} - -function issueCredentials(managementEndpoint, instanceId, log, callback) { - log.info('registering with API to get token'); - - const keyPair = forge.pki.rsa.generateKeyPair({ bits: 2048, e: 0x10001 }); - const privateKey = forge.pki.privateKeyToPem(keyPair.privateKey); - const publicKey = forge.pki.publicKeyToPem(keyPair.publicKey); - - const postData = { - publicKey, - }; - - request.post( - `${managementEndpoint}/${instanceId}/register`, - { body: postData, json: true }, - (error, response, body) => { - if (error) { - return callback(error); - } - if (response.statusCode !== 201) { - log.error('could not register instance', { - statusCode: response.statusCode, - }); - return callback(arsenal.errors.InternalError); - } - /* eslint-disable no-param-reassign */ - body.privateKey = privateKey; - /* eslint-enable no-param-reassign */ - return callback(null, body); - }, - ); -} - -function confirmInstanceCredentials(managementEndpoint, instanceId, creds, log, callback) { - const postData = { - serial: creds.serial || 0, - publicKey: creds.publicKey, - }; - - const opts = { - headers: { - 'x-instance-authentication-token': creds.token, - }, - body: postData, - }; - - request.post(`${managementEndpoint}/${instanceId}/confirm`, opts, (error, response) => { - if (error) { - return callback(error); - } - if (response.statusCode === 200) { - return callback(null, instanceId, creds.token); - } - return callback(arsenal.errors.InternalError); - }); -} - -/** - * Initializes credentials and PKI in the management database. - * - * In case the management database is new and empty, the instance - * is registered as new against the Orbit API with newly-generated - * RSA key pair. - * - * @param {string} managementEndpoint API endpoint - * @param {string} instanceId UUID of this deployment - * @param {werelogs~Logger} log Request-scoped logger to be able to trace - * initialization process - * @param {function} callback Function called with (error, result) - * - * @returns {undefined} - */ -function initManagementCredentials(managementEndpoint, instanceId, log, callback) { - getStoredCredentials(log, (error, value) => { - if (error) { - if (error.is.NoSuchKey) { - return issueCredentials(managementEndpoint, instanceId, log, (error, value) => { - if (error) { - log.error('could not issue token', { - error: reshapeExceptionError(error), - method: 'initManagementCredentials', - }); - return callback(error); - } - log.debug('saving token'); - return metadata.putObjectMD( - managementDatabaseName, - tokenConfigurationKey, - value, - {}, - log, - error => { - if (error) { - log.error('could not save token', { - error: reshapeExceptionError(error), - method: 'initManagementCredentials', - }); - return callback(error); - } - log.info('saved token locally, confirming instance'); - return confirmInstanceCredentials(managementEndpoint, instanceId, value, log, callback); - }, - ); - }); - } - log.debug('could not get token', { error }); - return callback(error); - } - - log.info('returning existing token'); - if (Date.now() - value.issueDate > tokenRotationDelay) { - log.warn('management API token is too old, should re-issue'); - } - - return callback(null, instanceId, value.token); - }); -} - -module.exports = { - getStoredCredentials, - initManagementCredentials, -}; diff --git a/lib/management/index.js b/lib/management/index.js deleted file mode 100644 index 067495eab2..0000000000 --- a/lib/management/index.js +++ /dev/null @@ -1,137 +0,0 @@ -const arsenal = require('@scality/arsenal'); -const async = require('async'); - -const metadata = require('../metadata/wrapper'); -const logger = require('../utilities/logger'); - -const { loadCachedOverlay, managementDatabaseName, patchConfiguration } = require('./configuration'); -const { initManagementCredentials } = require('./credentials'); -const { startWSManagementClient } = require('./push'); -const { startPollingManagementClient } = require('./poll'); -const { reshapeExceptionError } = arsenal.errorUtils; -const { isManagementAgentUsed } = require('./agentClient'); - -const initRemoteManagementRetryDelay = 10000; - -const managementEndpointRoot = process.env.MANAGEMENT_ENDPOINT || 'https://api.zenko.io'; -const managementEndpoint = `${managementEndpointRoot}/api/v1/instance`; - -const pushEndpointRoot = process.env.PUSH_ENDPOINT || 'https://push.api.zenko.io'; -const pushEndpoint = `${pushEndpointRoot}/api/v1/instance`; - -function initManagementDatabase(log, callback) { - // XXX choose proper owner names - const md = new arsenal.models.BucketInfo( - managementDatabaseName, - 'owner', - 'owner display name', - new Date().toJSON(), - ); - - metadata.createBucket(managementDatabaseName, md, log, error => { - if (error) { - if (error.is.BucketAlreadyExists) { - log.info('created management database'); - return callback(); - } - log.error('could not initialize management database', { - error: reshapeExceptionError(error), - method: 'initManagementDatabase', - }); - return callback(error); - } - log.info('initialized management database'); - return callback(); - }); -} - -function startManagementListeners(instanceId, token) { - const mode = process.env.MANAGEMENT_MODE || 'push'; - if (mode === 'push') { - const url = `${pushEndpoint}/${instanceId}/ws`; - startWSManagementClient(url, token); - } else { - startPollingManagementClient(managementEndpoint, instanceId, token); - } -} - -/** - * Initializes Orbit-based management by: - * - creating the management database in metadata - * - generating a key pair for credentials encryption - * - generating an instance-unique ID - * - getting an authentication token for the API - * - loading and applying the latest cached overlay configuration - * - starting a configuration update and metrics push background task - * - * @param {werelogs~Logger} log Request-scoped logger to be able to trace - * initialization process - * @param {function} callback Function to call once the overlay is loaded - * (overlay) - * - * @returns {undefined} - */ -function initManagement(log, callback) { - if ( - (process.env.REMOTE_MANAGEMENT_DISABLE && process.env.REMOTE_MANAGEMENT_DISABLE !== '0') || - process.env.S3BACKEND === 'mem' - ) { - log.info('remote management disabled'); - return; - } - - /* Temporary check before to fully move to the process management agent. */ - if (isManagementAgentUsed() ^ (typeof callback === 'function')) { - let msg = 'misuse of initManagement function: '; - msg += `MANAGEMENT_USE_AGENT: ${process.env.MANAGEMENT_USE_AGENT}`; - msg += `, callback type: ${typeof callback}`; - throw new Error(msg); - } - - async.waterfall( - [ - // eslint-disable-next-line arrow-body-style - cb => { - return isManagementAgentUsed() ? metadata.setup(cb) : cb(); - }, - cb => initManagementDatabase(log, cb), - cb => metadata.getUUID(log, cb), - (instanceId, cb) => initManagementCredentials(managementEndpoint, instanceId, log, cb), - (instanceId, token, cb) => { - if (!isManagementAgentUsed()) { - cb(null, instanceId, token, {}); - return; - } - loadCachedOverlay(log, (err, overlay) => cb(err, instanceId, token, overlay)); - }, - (instanceId, token, overlay, cb) => { - if (!isManagementAgentUsed()) { - cb(null, instanceId, token, overlay); - return; - } - patchConfiguration(overlay, log, err => cb(err, instanceId, token, overlay)); - }, - ], - (error, instanceId, token, overlay) => { - if (error) { - log.error('could not initialize remote management, retrying later', { - error: reshapeExceptionError(error), - method: 'initManagement', - }); - setTimeout(initManagement, initRemoteManagementRetryDelay, logger.newRequestLogger()); - } else { - log.info(`this deployment's Instance ID is ${instanceId}`); - log.end('management init done'); - startManagementListeners(instanceId, token); - if (callback) { - callback(overlay); - } - } - }, - ); -} - -module.exports = { - initManagement, - initManagementDatabase, -}; diff --git a/lib/management/poll.js b/lib/management/poll.js deleted file mode 100644 index f0df7ea2dd..0000000000 --- a/lib/management/poll.js +++ /dev/null @@ -1,147 +0,0 @@ -const arsenal = require('@scality/arsenal'); -const async = require('async'); -const request = require('../utilities/request'); - -const _config = require('../Config').config; -const logger = require('../utilities/logger'); -const metadata = require('../metadata/wrapper'); -const { loadCachedOverlay, patchConfiguration, saveConfigurationVersion } = require('./configuration'); -const { reshapeExceptionError } = arsenal.errorUtils; - -const pushReportDelay = 30000; -const pullConfigurationOverlayDelay = 60000; - -function loadRemoteOverlay(managementEndpoint, instanceId, remoteToken, cachedOverlay, log, cb) { - log.debug('loading remote overlay'); - const opts = { - headers: { - 'x-instance-authentication-token': remoteToken, - 'x-scal-request-uids': log.getSerializedUids(), - }, - json: true, - }; - request.get(`${managementEndpoint}/${instanceId}/config/overlay`, opts, (error, response, body) => { - if (error) { - return cb(error); - } - if (response.statusCode === 200) { - return cb(null, cachedOverlay, body); - } - if (response.statusCode === 404) { - return cb(null, cachedOverlay, {}); - } - return cb(arsenal.errors.AccessForbidden, cachedOverlay, {}); - }); -} - -// TODO save only after successful patch -function applyConfigurationOverlay(managementEndpoint, instanceId, remoteToken, log) { - async.waterfall( - [ - wcb => loadCachedOverlay(log, wcb), - (cachedOverlay, wcb) => patchConfiguration(cachedOverlay, log, wcb), - (cachedOverlay, wcb) => - loadRemoteOverlay(managementEndpoint, instanceId, remoteToken, cachedOverlay, log, wcb), - (cachedOverlay, remoteOverlay, wcb) => saveConfigurationVersion(cachedOverlay, remoteOverlay, log, wcb), - (remoteOverlay, wcb) => patchConfiguration(remoteOverlay, log, wcb), - ], - error => { - if (error) { - log.error('could not apply managed configuration', { - error: reshapeExceptionError(error), - method: 'applyConfigurationOverlay', - }); - } - setTimeout( - applyConfigurationOverlay, - pullConfigurationOverlayDelay, - managementEndpoint, - instanceId, - remoteToken, - logger.newRequestLogger(), - ); - }, - ); -} - -function postStats(managementEndpoint, instanceId, remoteToken, report, next) { - const toURL = `${managementEndpoint}/${instanceId}/stats`; - const toOptions = { - json: true, - headers: { - 'content-type': 'application/json', - 'x-instance-authentication-token': remoteToken, - }, - body: report, - }; - const toCallback = (err, response, body) => { - if (err) { - logger.info('could not post stats', { error: err }); - } - if (response && response.statusCode !== 201) { - logger.info('could not post stats', { - body, - statusCode: response.statusCode, - }); - } - if (next) { - next(null, instanceId, remoteToken); - } - }; - return request.post(toURL, toOptions, toCallback); -} - -function getStats(next) { - const fromURL = `http://localhost:${_config.port}/_/report`; - const fromOptions = { - headers: { - 'x-scal-report-token': process.env.REPORT_TOKEN, - }, - }; - return request.get(fromURL, fromOptions, next); -} - -function pushStats(managementEndpoint, instanceId, remoteToken, next) { - if (process.env.PUSH_STATS === 'false') { - return; - } - - getStats((err, res, report) => { - if (err) { - logger.info('could not retrieve stats', { error: err }); - return; - } - - logger.debug('report', { report }); - postStats(managementEndpoint, instanceId, remoteToken, report, next); - return; - }); - - setTimeout(pushStats, pushReportDelay, managementEndpoint, instanceId, remoteToken); -} - -/** - * Starts background task that updates configuration and pushes stats. - * - * Periodically polls for configuration updates, and pushes stats at - * a fixed interval. - * - * @param {string} managementEndpoint API endpoint - * @param {string} instanceId UUID of this deployment - * @param {string} remoteToken API authentication token - * - * @returns {undefined} - */ -function startPollingManagementClient(managementEndpoint, instanceId, remoteToken) { - metadata.notifyBucketChange(() => { - pushStats(managementEndpoint, instanceId, remoteToken); - }); - - pushStats(managementEndpoint, instanceId, remoteToken); - applyConfigurationOverlay(managementEndpoint, instanceId, remoteToken, logger.newRequestLogger()); -} - -module.exports = { - startPollingManagementClient, - loadRemoteOverlay, -}; diff --git a/lib/management/push.js b/lib/management/push.js index 6ce847ae11..2eb1f7339f 100644 --- a/lib/management/push.js +++ b/lib/management/push.js @@ -1,10 +1,8 @@ const arsenal = require('@scality/arsenal'); const { HttpsProxyAgent } = require('https-proxy-agent'); -const net = require('net'); const request = require('../utilities/request'); const { URL: _URL } = require('url'); const WebSocket = require('ws'); -const assert = require('assert'); const http = require('http'); const _config = require('../Config').config; @@ -12,11 +10,9 @@ const logger = require('../utilities/logger'); const metadata = require('../metadata/wrapper'); const { reshapeExceptionError } = arsenal.errorUtils; -const { isManagementAgentUsed } = require('./agentClient'); -const { applyAndSaveOverlay } = require('./configuration'); const { ChannelMessageV0, MessageType } = require('./ChannelMessageV0'); -const { CONFIG_OVERLAY_MESSAGE, METRICS_REQUEST_MESSAGE, CHANNEL_CLOSE_MESSAGE, CHANNEL_PAYLOAD_MESSAGE } = MessageType; +const { CONFIG_OVERLAY_MESSAGE, METRICS_REQUEST_MESSAGE } = MessageType; const PING_INTERVAL_MS = 10000; const subprotocols = [ChannelMessageV0.protocolName]; @@ -24,7 +20,6 @@ const subprotocols = [ChannelMessageV0.protocolName]; const cloudServerHost = process.env.SECURE_CHANNEL_DEFAULT_FORWARD_TO_HOST || 'localhost'; const cloudServerPort = process.env.SECURE_CHANNEL_DEFAULT_FORWARD_TO_PORT || _config.port; -let overlayMessageListener = null; let connected = false; // No wildcard nor cidr/mask match for now @@ -62,10 +57,9 @@ function createWSAgent(pushEndpoint, env, log) { } /** - * Starts background task that updates configuration and pushes stats. + * Starts background task that pushes stats. * - * Receives pushed Websocket messages on configuration updates, and - * sends stat messages in response to API sollicitations. + * Sends stat messages in response to API sollicitations. * * @param {string} url API endpoint * @param {string} token API authentication token @@ -81,7 +75,6 @@ function startWSManagementClient(url, token, cb) { } } - const socketsByChannelId = []; const headers = { 'x-instance-authentication-token': token, }; @@ -125,56 +118,6 @@ function startWSManagementClient(url, token, cb) { }); } - function closeChannel(channelId) { - const socket = socketsByChannelId[channelId]; - if (socket) { - socket.destroy(); - delete socketsByChannelId[channelId]; - } - } - - function receiveChannelData(channelId, payload) { - let socket = socketsByChannelId[channelId]; - if (!socket) { - socket = net.createConnection(cloudServerPort, cloudServerHost); - - socket.on('data', data => { - ws.send(ChannelMessageV0.encodeChannelDataMessage(channelId, data), err => - _logError(err, 'failed to send channel data message', 'receiveChannelData'), - ); - }); - - socket.on('connect', () => {}); - - socket.on('drain', () => {}); - - socket.on('error', error => { - logger.error('failed to connect to S3', { - code: error.code, - host: error.address, - port: error.port, - }); - }); - - socket.on('end', () => { - socket.destroy(); - socketsByChannelId[channelId] = null; - ws.send(ChannelMessageV0.encodeChannelCloseMessage(channelId), err => - _logError(err, 'failed to send channel close message', 'receiveChannelData'), - ); - }); - - socketsByChannelId[channelId] = socket; - } - socket.write(payload); - } - - function browserAccessChangeHandler() { - if (!_config.browserAccessEnabled) { - socketsByChannelId.forEach(s => s.close()); - } - } - ws.on('open', () => { connected = true; logger.info('connected to push server'); @@ -182,7 +125,6 @@ function startWSManagementClient(url, token, cb) { metadata.notifyBucketChange(() => { pushStats({ noCache: true }); }); - _config.on('browser-access-enabled-change', browserAccessChangeHandler); initiatePing(); }); @@ -192,7 +134,6 @@ function startWSManagementClient(url, token, cb) { ws.on('close', () => { logger.info('disconnected from push server, reconnecting in 10s'); metadata.notifyBucketChange(null); - _config.removeListener('browser-access-enabled-change', browserAccessChangeHandler); setTimeout(startWSManagementClient, 10000, url, token); connected = false; @@ -225,37 +166,18 @@ function startWSManagementClient(url, token, cb) { const message = new ChannelMessageV0(data); switch (message.getType()) { case CONFIG_OVERLAY_MESSAGE: - if (!isManagementAgentUsed()) { - applyAndSaveOverlay(JSON.parse(message.getPayload()), log); - } else { - if (overlayMessageListener) { - overlayMessageListener(message.getPayload().toString()); - } - } + // remote configuration management is not supported anymore + log.debug('ignoring configuration overlay from push server'); break; case METRICS_REQUEST_MESSAGE: pushStats(); break; - case CHANNEL_CLOSE_MESSAGE: - closeChannel(message.getChannelNumber()); - break; - case CHANNEL_PAYLOAD_MESSAGE: - // browserAccessEnabled defaults to true unless explicitly false - if (_config.browserAccessEnabled !== false) { - receiveChannelData(message.getChannelNumber(), message.getPayload()); - } - break; default: logger.error('unknown message type from push server', { messageType: message.getType() }); } }); } -function addOverlayMessageListener(callback) { - assert(typeof callback === 'function'); - overlayMessageListener = callback; -} - function startPushConnectionHealthCheckServer(cb) { const server = http.createServer((req, res) => { if (req.url !== '/_/healthcheck') { @@ -278,5 +200,4 @@ module.exports = { createWSAgent, startWSManagementClient, startPushConnectionHealthCheckServer, - addOverlayMessageListener, }; diff --git a/lib/server.js b/lib/server.js index dc251ab8d1..349b44170f 100644 --- a/lib/server.js +++ b/lib/server.js @@ -20,8 +20,6 @@ const kms = require('./kms/wrapper'); const locationStorageCheck = require('./api/apiUtils/object/locationStorageCheck'); const vault = require('./auth/vault'); const metadata = require('./metadata/wrapper'); -const { initManagement } = require('./management'); -const { initManagementClient, isManagementAgentUsed } = require('./management/agentClient'); const { startCleanupJob } = require('./api/apiUtils/rateLimit/cleanup'); const { startRefillJob, stopRefillJob } = require('./api/apiUtils/rateLimit/refillJob'); @@ -57,7 +55,6 @@ if (_config.localCache) { const STATS_INTERVAL = 5; // 5 seconds const STATS_EXPIRY = 30; // 30 seconds const statsClient = new StatsClient(localCacheClient, STATS_INTERVAL, STATS_EXPIRY); -const enableRemoteManagement = true; class S3Server { /** @@ -407,18 +404,6 @@ class S3Server { QuotaService?.setup(log); } - // TODO this should wait for metadata healthcheck to be ok - // TODO only do this in cluster master - if (enableRemoteManagement) { - if (!isManagementAgentUsed()) { - setTimeout(() => { - initManagement(logger.newRequestLogger()); - }, 5000); - } else { - initManagementClient(); - } - } - logger.info('integrityChecks config', { config: _config.integrityChecks }); if (!_config.integrityChecks.enabled) { logger.warn('x-amz-checksum-* digests are disabled: not computed, not validated, and not stored'); diff --git a/managementAgent.js b/managementAgent.js deleted file mode 100644 index 4413d36c3b..0000000000 --- a/managementAgent.js +++ /dev/null @@ -1,170 +0,0 @@ -const Uuid = require('uuid'); -const WebSocket = require('ws'); - -const logger = require('./lib/utilities/logger'); -const { initManagement } = require('./lib/management'); -const _config = require('./lib/Config').config; -const { managementAgentMessageType } = require('./lib/management/agentClient'); -const { addOverlayMessageListener } = require('./lib/management/push'); -const { saveConfigurationVersion } = require('./lib/management/configuration'); - -// TODO: auth? -// TODO: werelogs with a specific name. - -const CHECK_BROKEN_CONNECTIONS_FREQUENCY_MS = 15000; - -class ManagementAgentServer { - constructor() { - this.port = _config.managementAgent.port || 8010; - this.wss = null; - this.loadedOverlay = null; - - this.stop = this.stop.bind(this); - process.on('SIGINT', this.stop); - process.on('SIGHUP', this.stop); - process.on('SIGQUIT', this.stop); - process.on('SIGTERM', this.stop); - process.on('SIGPIPE', () => {}); - } - - start(_cb) { - const cb = _cb || function noop() {}; - - /* Define REPORT_TOKEN env variable needed by the management - * module. */ - process.env.REPORT_TOKEN = process.env.REPORT_TOKEN || _config.reportToken || Uuid.v4(); - - initManagement(logger.newRequestLogger(), overlay => { - let error = null; - - if (overlay) { - this.loadedOverlay = overlay; - this.startServer(); - } else { - error = new Error('failed to init management'); - } - return cb(error); - }); - } - - stop() { - if (!this.wss) { - process.exit(0); - return; - } - this.wss.close(() => { - logger.info('server shutdown'); - process.exit(0); - }); - } - - startServer() { - this.wss = new WebSocket.Server({ - port: this.port, - clientTracking: true, - path: '/watch', - }); - - this.wss.on('connection', this.onConnection.bind(this)); - this.wss.on('listening', this.onListening.bind(this)); - this.wss.on('error', this.onError.bind(this)); - - setInterval(this.checkBrokenConnections.bind(this), CHECK_BROKEN_CONNECTIONS_FREQUENCY_MS); - - addOverlayMessageListener(this.onNewOverlay.bind(this)); - } - - onConnection(socket, request) { - function hearthbeat() { - this.isAlive = true; - } - logger.info('client connected to watch route', { - ip: request.connection.remoteAddress, - }); - - /* eslint-disable no-param-reassign */ - socket.isAlive = true; - socket.on('pong', hearthbeat.bind(socket)); - - if (socket.readyState !== socket.OPEN) { - logger.error('client socket not in ready state', { - state: socket.readyState, - client: socket._socket._peername, - }); - return; - } - - const msg = { - messageType: managementAgentMessageType.NEW_OVERLAY, - payload: this.loadedOverlay, - }; - socket.send(JSON.stringify(msg), error => { - if (error) { - logger.error('failed to send remoteOverlay to client', { - error, - client: socket._socket._peername, - }); - } - }); - } - - onListening() { - logger.info('websocket server listening', { port: this.port }); - } - - onError(error) { - logger.error('websocket server error', { error }); - } - - _sendNewOverlayToClient(client) { - if (client.readyState !== client.OPEN) { - logger.error('client socket not in ready state', { - state: client.readyState, - client: client._socket._peername, - }); - return; - } - - const msg = { - messageType: managementAgentMessageType.NEW_OVERLAY, - payload: this.loadedOverlay, - }; - client.send(JSON.stringify(msg), error => { - if (error) { - logger.error('failed to send remoteOverlay to management agent client', { - error, - client: client._socket._peername, - }); - } - }); - } - - onNewOverlay(remoteOverlay) { - const remoteOverlayObj = JSON.parse(remoteOverlay); - saveConfigurationVersion(this.loadedOverlay, remoteOverlayObj, logger, err => { - if (err) { - logger.error('failed to save remote overlay', { err }); - return; - } - this.loadedOverlay = remoteOverlayObj; - this.wss.clients.forEach(this._sendNewOverlayToClient.bind(this)); - }); - } - - checkBrokenConnections() { - this.wss.clients.forEach(client => { - if (!client.isAlive) { - logger.info('close broken connection', { - client: client._socket._peername, - }); - client.terminate(); - return; - } - client.isAlive = false; - client.ping(); - }); - } -} - -const server = new ManagementAgentServer(); -server.start(); diff --git a/package.json b/package.json index 9ad6807f59..d552f4359b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@scality/cloudserver", - "version": "9.5.0-preview.4", + "version": "9.5.0-preview.5", "description": "Zenko CloudServer, an open-source Node.js implementation of a server handling the Amazon S3 protocol", "main": "index.js", "engines": { @@ -33,10 +33,10 @@ "@opentelemetry/instrumentation-http": "~0.222.0", "@opentelemetry/instrumentation-ioredis": "~0.70.0", "@opentelemetry/instrumentation-mongodb": "~0.75.0", - "@scality/arsenal": "8.6.0-preview.2", + "@scality/arsenal": "8.6.0-preview.5", "@scality/bucketclient": "scality/bucketclient#8.3.0", - "@scality/cloudserverclient": "1.0.12", - "@scality/scubaclient": "1.2.0", + "@scality/cloudserverclient": "1.0.13", + "@scality/scubaclient": "1.2.1", "@scality/utapi": "github:scality/utapi#8.4.0", "@smithy/node-http-handler": "^3.0.0", "async": "2.6.4", @@ -51,7 +51,6 @@ "moment": "^2.30.1", "mongodb": "^6.11.0", "node-fetch": "^2.6.0", - "node-forge": "^1.3.1", "npm-run-all": "^4.1.5", "prom-client": "^15.1.3", "sql-where-parser": "^2.2.1", @@ -65,7 +64,7 @@ }, "devDependencies": { "@eslint/compat": "^1.2.2", - "@scality/cloudserverclient": "1.0.12", + "@scality/cloudserverclient": "1.0.13", "@scality/eslint-config-scality": "scality/Guidelines#8.3.3", "eslint": "^9.14.0", "eslint-plugin-import": "^2.31.0", @@ -89,7 +88,8 @@ "resolutions": { "jsonwebtoken": "^9.0.0", "fast-xml-parser": "^5.5.6", - "express": "^4.22.3" + "express": "^4.22.3", + "**/request/form-data": "^2.5.6" }, "countAsyncSourcePaths": [ "lib/**/*.js", @@ -97,7 +97,6 @@ "dataserver.js", "mdserver.js", "pfsserver.js", - "managementAgent.js", "bin/**/*.js" ], "mocha": { @@ -146,11 +145,9 @@ "start_s3server": "node index.js", "start_dmd": "npm-run-all --parallel start_mdserver start_dataserver", "start_utapi": "node lib/utapi/utapi.js", - "start_secure_channel_proxy": "node bin/secure_channel_proxy.js", "start_metrics_server": "node bin/metrics_server.js", "utapi_replay": "node lib/utapi/utapiReplay.js", "utapi_reindex": "node lib/utapi/utapiReindex.js", - "management_agent": "node managementAgent.js", "test": "NO_PROXY=\"test.scality.com,scality.com\" CI=true S3BACKEND=mem S3QUOTA=scuba mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json --recursive tests/unit --exit", "test_versionid_base62": "S3_VERSION_ID_ENCODING_TYPE=base62 CI=true S3BACKEND=mem mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json --recursive tests/unit/api --exit", "test_legacy_location": "CI=true S3QUOTA=scuba S3_LOCATION_FILE=tests/locationConfig/locationConfigLegacy.json S3BACKEND=mem mocha --reporter mocha-multi-reporters --reporter-options configFile=$INIT_CWD/tests/reporter-config.json --recursive tests/unit --exit", diff --git a/tests/unit/api/objectReplicationMD.js b/tests/unit/api/objectReplicationMD.js index 69336e148b..3635f76e61 100644 --- a/tests/unit/api/objectReplicationMD.js +++ b/tests/unit/api/objectReplicationMD.js @@ -762,6 +762,10 @@ describe('Replication object MD with CRR and cloud destinations on the same obje destination: 'arn:aws:s3:::aws-bucket', }; + // awsbackend is a real location in the test config: keep it to restore it + const originalCrrSite = config.locationConstraints[crrSite]; + const originalCloudSite = config.locationConstraints[cloudSite]; + function setupBucket(rules) { cleanup(); createBucket(); @@ -787,8 +791,16 @@ describe('Replication object MD with CRR and cloud destinations on the same obje afterEach(() => { cleanup(); - delete config.locationConstraints[crrSite]; - delete config.locationConstraints[cloudSite]; + [ + [crrSite, originalCrrSite], + [cloudSite, originalCloudSite], + ].forEach(([site, original]) => { + if (original === undefined) { + delete config.locationConstraints[site]; + } else { + config.locationConstraints[site] = original; + } + }); }); it( diff --git a/tests/unit/management/agent.js b/tests/unit/management/agent.js deleted file mode 100644 index 57c7c7c1a4..0000000000 --- a/tests/unit/management/agent.js +++ /dev/null @@ -1,114 +0,0 @@ -const assert = require('assert'); - -const { createWSAgent } = require('../../../lib/management/push'); - -const proxy = 'http://proxy:3128/'; -const logger = { info: () => {} }; - -function testVariableSet(httpProxy, httpsProxy, allProxy, noProxy) { - return () => { - it(`should use ${httpProxy} environment variable`, () => { - let agent = createWSAgent( - 'https://pushserver', - { - [httpProxy]: 'http://proxy:3128', - }, - logger, - ); - assert.equal(agent, null); - - agent = createWSAgent( - 'http://pushserver', - { - [httpProxy]: proxy, - }, - logger, - ); - assert.equal(agent.proxy.href, proxy); - }); - - it(`should use ${httpsProxy} environment variable`, () => { - let agent = createWSAgent( - 'http://pushserver', - { - [httpsProxy]: proxy, - }, - logger, - ); - assert.equal(agent, null); - - agent = createWSAgent( - 'https://pushserver', - { - [httpsProxy]: proxy, - }, - logger, - ); - assert.equal(agent.proxy.href, proxy); - }); - - it(`should use ${allProxy} environment variable`, () => { - let agent = createWSAgent( - 'http://pushserver', - { - [allProxy]: proxy, - }, - logger, - ); - assert.equal(agent.proxy.href, proxy); - - agent = createWSAgent( - 'https://pushserver', - { - [allProxy]: proxy, - }, - logger, - ); - assert.equal(agent.proxy.href, proxy); - }); - - it(`should use ${noProxy} environment variable`, () => { - let agent = createWSAgent( - 'http://pushserver', - { - [noProxy]: 'pushserver', - }, - logger, - ); - assert.equal(agent, null); - - agent = createWSAgent( - 'http://pushserver', - { - [noProxy]: 'pushserver', - [httpProxy]: proxy, - }, - logger, - ); - assert.equal(agent, null); - - agent = createWSAgent( - 'http://pushserver', - { - [noProxy]: 'pushserver2', - [httpProxy]: proxy, - }, - logger, - ); - assert.equal(agent.proxy.href, proxy); - }); - }; -} - -describe('Websocket connection agent', () => { - describe('with no proxy env', () => { - it('should handle empty proxy environment', () => { - const agent = createWSAgent('https://pushserver', {}, logger); - assert.equal(agent, null); - }); - }); - - describe('with lowercase proxy env', testVariableSet('http_proxy', 'https_proxy', 'all_proxy', 'no_proxy')); - - describe('with uppercase proxy env', testVariableSet('HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY', 'NO_PROXY')); -}); diff --git a/tests/unit/management/configuration.js b/tests/unit/management/configuration.js deleted file mode 100644 index a2717fb208..0000000000 --- a/tests/unit/management/configuration.js +++ /dev/null @@ -1,232 +0,0 @@ -const assert = require('assert'); -const crypto = require('crypto'); - -const { DummyRequestLogger } = require('../helpers'); -const log = new DummyRequestLogger(); - -const metadata = require('../../../lib/metadata/wrapper'); -const managementDatabaseName = 'PENSIEVE'; -const tokenConfigurationKey = 'auth/zenko/remote-management-token'; - -const { privateKey, accessKey, decryptedSecretKey, secretKey, canonicalId, userName } = require('./resources.json'); -const shortid = '123456789012'; -const email = 'customaccount1@setbyenv.com'; -const arn = 'arn:aws:iam::123456789012:root'; -const { config } = require('../../../lib/Config'); - -const { remoteOverlayIsNewer, patchConfiguration } = require('../../../lib/management/configuration'); - -const { initManagementDatabase } = require('../../../lib/management/index'); - -function initManagementCredentialsMock(cb) { - return metadata.putObjectMD(managementDatabaseName, tokenConfigurationKey, { privateKey }, {}, log, error => - cb(error), - ); -} - -function getConfig() { - return config; -} - -// Original Config -const overlayVersionOriginal = Object.assign({}, config.overlayVersion); -const authDataOriginal = Object.assign({}, config.authData).accounts; -const locationConstraintsOriginal = Object.assign({}, config.locationConstraints); -const restEndpointsOriginal = Object.assign({}, config.restEndpoints); -const browserAccessEnabledOriginal = config.browserAccessEnabled; -const instanceId = '19683e55-56f7-4a4c-98a7-706c07e4ec30'; -const publicInstanceId = crypto.createHash('sha256').update(instanceId).digest('hex'); - -function resetConfig() { - config.overlayVersion = overlayVersionOriginal; - config.authData = { accounts: authDataOriginal }; - config.locationConstraints = locationConstraintsOriginal; - config.restEndpoints = restEndpointsOriginal; - config.browserAccessEnabled = browserAccessEnabledOriginal; - // reset auth data inside the in-memory vault backend - config.emit('authdata-update'); -} - -function assertConfig(actualConf, expectedConf) { - Object.keys(expectedConf).forEach(key => { - assert.deepStrictEqual(actualConf[key], expectedConf[key]); - }); -} - -describe('patchConfiguration', () => { - before(done => - initManagementDatabase(log, err => { - if (err) { - return done(err); - } - return initManagementCredentialsMock(done); - }), - ); - beforeEach(() => { - resetConfig(); - }); - after(() => { - resetConfig(); - }); - - it('should modify config using the new config', done => { - const newConf = { - version: 1, - instanceId, - users: [ - { - secretKey, - accessKey, - canonicalId, - userName, - }, - ], - endpoints: [ - { - hostname: '1.1.1.1', - locationName: 'us-east-1', - }, - ], - locations: { - 'us-east-1': { - name: 'us-east-1', - objectId: 'us-east-1', - locationType: 'location-file-v1', - legacyAwsBehavior: true, - details: {}, - }, - }, - browserAccess: { - enabled: true, - }, - }; - return patchConfiguration(newConf, log, err => { - assert.ifError(err); - const actualConf = getConfig(); - const expectedConf = { - overlayVersion: 1, - publicInstanceId, - browserAccessEnabled: true, - authData: { - accounts: [ - { - name: userName, - email, - arn, - canonicalID: canonicalId, - shortid, - keys: [ - { - access: accessKey, - secret: decryptedSecretKey, - }, - ], - }, - ], - }, - locationConstraints: { - 'us-east-1': { - type: 'file', - objectId: 'us-east-1', - legacyAwsBehavior: true, - isTransient: false, - sizeLimitGB: null, - details: { supportsVersioning: true }, - name: 'us-east-1', - locationType: 'location-file-v1', - }, - }, - }; - assertConfig(actualConf, expectedConf); - assert.deepStrictEqual(actualConf.restEndpoints['1.1.1.1'], 'us-east-1'); - return done(); - }); - }); - - it('should apply second configuration if version (2) is greater than overlayVersion (1)', done => { - const newConf1 = { - version: 1, - instanceId, - }; - const newConf2 = { - version: 2, - instanceId, - browserAccess: { - enabled: true, - }, - }; - patchConfiguration(newConf1, log, err => { - assert.ifError(err); - return patchConfiguration(newConf2, log, err => { - assert.ifError(err); - const actualConf = getConfig(); - const expectedConf = { - overlayVersion: 2, - browserAccessEnabled: true, - }; - assertConfig(actualConf, expectedConf); - return done(); - }); - }); - }); - - it('should not apply the second configuration if version equals overlayVersion', done => { - const newConf1 = { - version: 1, - instanceId, - }; - const newConf2 = { - version: 1, - instanceId, - browserAccess: { - enabled: true, - }, - }; - patchConfiguration(newConf1, log, err => { - assert.ifError(err); - return patchConfiguration(newConf2, log, err => { - assert.ifError(err); - const actualConf = getConfig(); - const expectedConf = { - overlayVersion: 1, - browserAccessEnabled: undefined, - }; - assertConfig(actualConf, expectedConf); - return done(); - }); - }); - }); -}); - -describe('remoteOverlayIsNewer', () => { - it('should return remoteOverlayIsNewer equals false if remote overlay is less than the cached', () => { - const cachedOverlay = { - version: 2, - }; - const remoteOverlay = { - version: 1, - }; - const isRemoteOverlayNewer = remoteOverlayIsNewer(cachedOverlay, remoteOverlay); - assert.equal(isRemoteOverlayNewer, false); - }); - it('should return remoteOverlayIsNewer equals false if remote overlay and the cached one are equal', () => { - const cachedOverlay = { - version: 1, - }; - const remoteOverlay = { - version: 1, - }; - const isRemoteOverlayNewer = remoteOverlayIsNewer(cachedOverlay, remoteOverlay); - assert.equal(isRemoteOverlayNewer, false); - }); - it('should return remoteOverlayIsNewer equals true if remote overlay version is greater than the cached one ', () => { - const cachedOverlay = { - version: 0, - }; - const remoteOverlay = { - version: 1, - }; - const isRemoteOverlayNewer = remoteOverlayIsNewer(cachedOverlay, remoteOverlay); - assert.equal(isRemoteOverlayNewer, true); - }); -}); diff --git a/tests/unit/management/poll.js b/tests/unit/management/poll.js deleted file mode 100644 index bec9c28f13..0000000000 --- a/tests/unit/management/poll.js +++ /dev/null @@ -1,30 +0,0 @@ -const assert = require('assert'); -const sinon = require('sinon'); - -const request = require('../../../lib/utilities/request'); -const { loadRemoteOverlay } = require('../../../lib/management/poll'); -const { DummyRequestLogger } = require('../helpers'); - -describe('management poll loadRemoteOverlay', () => { - const managementEndpoint = 'https://management.example.com'; - const instanceId = 'instance-id'; - const remoteToken = 'remote-token'; - const log = new DummyRequestLogger(); - - afterEach(() => { - sinon.restore(); - }); - - it('should forward the werelogs request uids under the x-scal-request-uids header', done => { - const getStub = sinon.stub(request, 'get').callsFake((url, opts, cb) => cb(null, { statusCode: 200 }, {})); - - loadRemoteOverlay(managementEndpoint, instanceId, remoteToken, {}, log, err => { - assert.ifError(err); - assert(getStub.calledOnce); - const opts = getStub.firstCall.args[1]; - assert.strictEqual(opts.headers['x-scal-request-uids'], log.getSerializedUids()); - assert.strictEqual(opts.headers['x-scal-request-id'], undefined); - done(); - }); - }); -}); diff --git a/tests/unit/management/resources.json b/tests/unit/management/resources.json deleted file mode 100644 index 962ff806cd..0000000000 --- a/tests/unit/management/resources.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\r\nMIIEowIBAAKCAQEAj13sSYE40lAX2qpBvfdGfcSVNtBf8i5FH+E8FAhORwwPu+2S\r\n3yBQbgwHq30WWxunGb1NmZL1wkVZ+vf12DtxqFRnMA08LfO4oO6oC4V8XfKeuHyJ\r\n1qlaKRINz6r9yDkTHtwWoBnlAINurlcNKgGD5p7D+G26Chbr/Oo0ZwHula9DxXy6\r\neH8/bJ5/BynyNyyWRPoAO+UkUdY5utkFCUq2dbBIhovMgjjikf5p2oWqnRKXc+JK\r\nBegr6lSHkkhyqNhTmd8+wA+8Cace4sy1ajY1t5V4wfRZea5vwl/HlyyKodvHdxng\r\nJgg6H61JMYPkplY6Gr9OryBKEAgq02zYoYTDfwIDAQABAoIBAAuDYGlavkRteCzw\r\nRU1LIVcSRWVcgIgDXTu9K8T0Ec0008Kkxomyn6LmxmroJbZ1VwsDH8s4eRH73ckA\r\nxrZxt6Pr+0lplq6eBvKtl8MtGhq1VDe+kJczjHEF6SQHOFAu/TEaPZrn2XMcGvRX\r\nO1BnRL9tepFlxm3u/06VRFYNWqqchM+tFyzLu2AuiuKd5+slSX7KZvVgdkY1ErKH\r\ngB75lPyhPb77C/6ptqUisVMSO4JhLhsD0+ekDVY982Sb7KkI+szdWSbtMx9Ek2Wo\r\ntXwJz7I8T7IbODy9aW9G+ydyhMDFmaEYIaDVFKJj5+fluNza3oQ5PtFNVE50GQJA\r\nsisGqfECgYEAwpkwt0KpSamSEH6qknNYPOwxgEuXWoFVzibko7is2tFPvY+YJowb\r\n68MqHIYhf7gHLq2dc5Jg1TTbGqLECjVxp4xLU4c95KBy1J9CPAcuH4xQLDXmeLzP\r\nJ2YgznRocbzAMCDAwafCr3uY9FM7oGDHAi5bE5W11xWx+9MlFExL3JkCgYEAvJp5\r\nf+JGN1W037bQe2QLYUWGszewZsvplnNOeytGQa57w4YdF42lPhMz6Kc/zdzKZpN9\r\njrshiIDhAD5NCno6dwqafBAW9WZl0sn7EnlLhD4Lwm8E9bRHnC9H82yFuqmNrzww\r\nzxBCQogJISwHiVz4EkU48B283ecBn0wT/fAa19cCgYEApKWsnEHgrhy1IxOpCoRh\r\nUhqdv2k1xDPN/8DUjtnAFtwmVcLa/zJopU/Zn4y1ZzSzjwECSTi+iWZRQ/YXXHPf\r\nl92SFjhFW92Niuy8w8FnevXjF6T7PYiy1SkJ9OR1QlZrXc04iiGBDazLu115A7ce\r\nanACS03OLw+CKgl6Q/RR83ECgYBCUngDVoimkMcIHHt3yJiP3ikeAKlRnMdJlsa0\r\nXWVZV4hCG3lDfRXsnEgWuimftNKf+6GdfYSvQdLdiQsCcjT5A4uLsQTByv5nf4uA\r\n1ZKOsFrmRrARzxGXhLDikvj7yP//7USkq+0BBGFhfuAvl7fMhPceyPZPehqB7/jf\r\nxX1LBQKBgAn5GgSXzzS0e06ZlP/VrKxreOHa5Z8wOmqqYQ0QTeczAbNNmuITdwwB\r\nNkbRqpVXRIfuj0BQBegAiix8om1W4it0cwz54IXBwQULxJR1StWxj3jo4QtpMQ+z\r\npVPdB1Ilb9zPV1YvDwRfdS1xsobzznAx56ecsXduZjs9mF61db8Q\r\n-----END RSA PRIVATE KEY-----\r\n", - "publicKey": "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj13sSYE40lAX2qpBvfdG\r\nfcSVNtBf8i5FH+E8FAhORwwPu+2S3yBQbgwHq30WWxunGb1NmZL1wkVZ+vf12Dtx\r\nqFRnMA08LfO4oO6oC4V8XfKeuHyJ1qlaKRINz6r9yDkTHtwWoBnlAINurlcNKgGD\r\n5p7D+G26Chbr/Oo0ZwHula9DxXy6eH8/bJ5/BynyNyyWRPoAO+UkUdY5utkFCUq2\r\ndbBIhovMgjjikf5p2oWqnRKXc+JKBegr6lSHkkhyqNhTmd8+wA+8Cace4sy1ajY1\r\nt5V4wfRZea5vwl/HlyyKodvHdxngJgg6H61JMYPkplY6Gr9OryBKEAgq02zYoYTD\r\nfwIDAQAB\r\n-----END PUBLIC KEY-----\r\n", - "accessKey": "QXP3VDG3SALNBX2QBJ1C", - "secretKey": "K5FyqZo5uFKfw9QBtn95o6vuPuD0zH/1seIrqPKqGnz8AxALNSx6EeRq7G1I6JJpS1XN13EhnwGn2ipsml3Uf2fQ00YgEmImG8wzGVZm8fWotpVO4ilN4JGyQCah81rNX4wZ9xHqDD7qYR5MyIERxR/osoXfctOwY7GGUjRKJfLOguNUlpaovejg6mZfTvYAiDF+PTO1sKUYqHt1IfKQtsK3dov1EFMBB5pWM7sVfncq/CthKN5M+VHx9Y87qdoP3+7AW+RCBbSDOfQgxvqtS7PIAf10mDl8k2kEURLz+RqChu4O4S0UzbEmtja7wa7WYhYKv/tM/QeW7kyNJMmnPg==", - "decryptedSecretKey": "n7PSZ3U6SgerF9PCNhXYsq3S3fRKVGdZTicGV8Ur", - "canonicalId": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be", - "userName": "orbituser" -} diff --git a/tests/unit/management/testChannelMessageV0.js b/tests/unit/management/testChannelMessageV0.js index f43d6f7687..9d976c765a 100644 --- a/tests/unit/management/testChannelMessageV0.js +++ b/tests/unit/management/testChannelMessageV0.js @@ -2,13 +2,7 @@ const assert = require('assert'); const { ChannelMessageV0, MessageType, TargetType } = require('../../../lib/management/ChannelMessageV0'); -const { - CONFIG_OVERLAY_MESSAGE, - METRICS_REQUEST_MESSAGE, - METRICS_REPORT_MESSAGE, - CHANNEL_CLOSE_MESSAGE, - CHANNEL_PAYLOAD_MESSAGE, -} = MessageType; +const { CONFIG_OVERLAY_MESSAGE, METRICS_REQUEST_MESSAGE, METRICS_REPORT_MESSAGE } = MessageType; const { TARGET_ANY } = TargetType; @@ -23,26 +17,6 @@ describe('ChannelMessageV0', () => { assert.strictEqual(m.getTarget(), TARGET_ANY); assert.strictEqual(m.getPayload().toString(), '{"a":1}'); }); - - it('should roundtrip channel data', () => { - const data = Buffer.from('dummydata'); - const b = ChannelMessageV0.encodeChannelDataMessage(50, data); - const m = new ChannelMessageV0(b); - - assert.strictEqual(CHANNEL_PAYLOAD_MESSAGE, m.getType()); - assert.strictEqual(50, m.getChannelNumber()); - assert.strictEqual(m.getTarget(), TARGET_ANY); - assert.strictEqual(m.getPayload().toString(), 'dummydata'); - }); - - it('should roundtrip channel close', () => { - const b = ChannelMessageV0.encodeChannelCloseMessage(3); - const m = new ChannelMessageV0(b); - - assert.strictEqual(CHANNEL_CLOSE_MESSAGE, m.getType()); - assert.strictEqual(3, m.getChannelNumber()); - assert.strictEqual(m.getTarget(), TARGET_ANY); - }); }); describe('decoder', () => { diff --git a/yarn.lock b/yarn.lock index 79bb167f3b..77421698c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -80,9 +80,9 @@ tslib "^2.6.2" "@aws-sdk/client-iam@^3.930.0", "@aws-sdk/client-iam@^3.975.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.1141.0.tgz#765735bf67162eef8bc36c9ef454d4efd4a274c9" - integrity sha512-np1yIEHbIm5AMKG5IlbhrD6Si7KhzY2lN4XOHlIo7gLeKtBhGEnHhKrf1y+x7dKh0ipEq4LIyhhge11AhPAwsw== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-iam/-/client-iam-3.1147.0.tgz#88391211dee0dddbb790f3da0c3086a282efaf01" + integrity sha512-YoBBlfqRFWe5KB+zWH5OorHzPjpv49X0NA8rS5lTngU2qwN89U5mEjQqn+fRqYxk3kDLNzw7UzAp4c2+swSYnA== dependencies: "@aws-sdk/core" "^3.978.1" "@aws-sdk/credential-provider-node" "^3.972.84" @@ -94,9 +94,9 @@ tslib "^2.6.2" "@aws-sdk/client-kms@^3.975.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.1141.0.tgz#164d0de9adfa6f75839db2213787eb20fc09a5c2" - integrity sha512-dfdarFBC2U0j0oyb3PQPdQX0m/jrjNXmxD162OU/Ln+ZGUIAHYseeqo5XqgITKYM+83NnSzv3QpWmuELI7nirQ== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kms/-/client-kms-3.1147.0.tgz#32c1de3fa42598dac7e04f35bcb95ea4c3e683e0" + integrity sha512-DqFDAAPtuxT7cJ4JnFfqzY9PPow/Ut4932O1jPmZ2o3ReFJOwaCqC0zvFdXGI1b9LKzlFNhce0xyWdwfPO4Q8Q== dependencies: "@aws-sdk/core" "^3.978.1" "@aws-sdk/credential-provider-node" "^3.972.84" @@ -108,9 +108,9 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.1009.0", "@aws-sdk/client-s3@^3.1013.0", "@aws-sdk/client-s3@^3.975.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.1141.0.tgz#11209f5f212145525a4219e4edf71700b52e80b4" - integrity sha512-uOVH37xGLenAdJkCPCin/JJG2PgWrFcSsDnQ9+C9Zq8N9Oalo5ol4xmn5fG28iWAlA/b/9boQZgHbMh+UsIhcg== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.1147.0.tgz#d80909b9b1aa34b53b356bd68fa5ba27fae4259d" + integrity sha512-uTrcJxnJKPr8bc1z7cMxopYSQyAm2dPfiMK+UiBr51L8MzimDxHbW/d9GR6X/LFbWDpMzfFPLhB4UohDrCSaPQ== dependencies: "@aws-sdk/checksums" "^3.1001.1" "@aws-sdk/core" "^3.978.1" @@ -125,9 +125,9 @@ tslib "^2.6.2" "@aws-sdk/client-sts@^3.930.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.1141.0.tgz#2468aa2169e46d9d6eb5788feeb51c58e33f8827" - integrity sha512-HwpL6eD2Zckc99ftZtewwBqOU2LvMG3ORv5t6zV/deS8zarGLNSQ2AHiV/UVC5m5iVW7SJpVv5Qyt0F0/NlaWg== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.1147.0.tgz#47cd0f8d469dbf5423ffeb060df85b1ddae20c02" + integrity sha512-o44v8eslmnAPYmTmZcIjq8KDJJnGdLwenhX18CDgqiKF44EVUvevzvWPnVHV6rEGmRWrjh63y5uJS9xmZuiDGw== dependencies: "@aws-sdk/core" "^3.978.1" "@aws-sdk/credential-provider-node" "^3.972.84" @@ -154,9 +154,9 @@ tslib "^2.6.2" "@aws-sdk/crc64-nvme-crt@^3.989.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme-crt/-/crc64-nvme-crt-3.1141.0.tgz#4df67067560c853be5a23c6bed286c60c0f25138" - integrity sha512-MtuOSOIW5GG5CDxnPnG9dDc2c9qcLUJOdC59+6FTo799RlDZuxE3hatgDwZFH8mVzN/+C6F/eUL2dLhqU05aog== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme-crt/-/crc64-nvme-crt-3.1147.0.tgz#dcc3f8da5b70d5f7dad08cec933c329d7a3c444e" + integrity sha512-HdfIdNMdmDH6xzZte+DQucTnCp3buqTy6xdrWi+COdni20GEmS0wAHKCl5TuPJpJaGuFiGSY7IT/WK8eA/gH4Q== dependencies: "@aws-sdk/checksums" "^3.1001.1" "@aws-sdk/crt-loader" "^3.972.76" @@ -284,9 +284,9 @@ tslib "^2.6.2" "@aws-sdk/credential-providers@^3.864.0", "@aws-sdk/credential-providers@^3.975.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.1141.0.tgz#8382346893fafe3c5de178e31ae431c93b75f0ea" - integrity sha512-NgnEx9d4QGxbtNW3qf/LUgKSm4svcexwxJH/ksEgYibqohq25SYULXk0lq7gzk25NRt6LA/B01MW68SGsgHUOg== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.1147.0.tgz#fce4e7668dbc7b53e2ecfa00fb1a412b4aab2e24" + integrity sha512-KWsvnLIpbJUf2JUtSOAg7txO2amdENkQp8JhljgNI2vY5/y7FV6tmmM/Q7ySa2c1zqeSE9qgirfyq+btyspTDA== dependencies: "@aws-sdk/core" "^3.978.1" "@aws-sdk/credential-provider-cognito-identity" "^3.972.71" @@ -323,9 +323,9 @@ tslib "^2.5.0" "@aws-sdk/lib-storage@^3.975.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.1141.0.tgz#2a24dd1278cea5ea197c5332edb66640bf04f1fe" - integrity sha512-Qkn5bI3ESne9iJX1hX3CVkuyikgNP/3MbO5nql4sd1wcV0S79yJdCBANNJBTgW0bnd/Z2sujsy0JVbuaoMsAhQ== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.1147.0.tgz#2f18be24cefb257860fb678e1bbf166df53da3b2" + integrity sha512-f2eAbdiABtmJOgojJlAI7epzHDC9BO9bij788FDIk1LM1gvN6ibQLPx192f+oCL8A4gc4BH6qnxJZRBb8B3REA== dependencies: "@smithy/core" "^3.35.0" "@smithy/types" "^4.19.0" @@ -377,9 +377,9 @@ tslib "^2.5.0" "@aws-sdk/s3-request-presigner@^3.901.0": - version "3.1141.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1141.0.tgz#fcd1bb8685a50f5c7a2b35d69efb2251c61aef5c" - integrity sha512-HHHcP3gvLqeY9GPptpxLvA6VwDu+MWKCoaGGm0UtSUBh1hC7xJ9nNHoybgFfstC4lrj+k8oD6a1rWbGBWKYdag== + version "3.1147.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.1147.0.tgz#fb53c7f054a2a03ecb69d39179e5d07059708a77" + integrity sha512-9za8GOn8IRFz+foPbLfjFFfqDV87mLBhNbUg+8YgqaSIuvzx+o6bWgOAETqPev5wul6DAImTQSCgt8mBsKtGUg== dependencies: "@aws-sdk/core" "^3.978.1" "@aws-sdk/signature-v4-multi-region" "^3.996.47" @@ -575,17 +575,22 @@ tslib "^2.6.2" "@azure/msal-browser@^5.5.0": - version "5.23.0" - resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-5.23.0.tgz#e1ca85dcd727241c97c1306a0a5427ce0bb71801" - integrity sha512-IRCwkRCK47hBXK+7bu67UZWY7HS0Jx1dZgi4C1HVbjlBum8Jy8fb2l87xFr6HxdQJWy951zRUHtwwDITHFAtaA== + version "5.25.0" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-5.25.0.tgz#269a4796dc29bfe726c94f13dd608b0aca518032" + integrity sha512-7GyXzDUrdLG5zPDCYJbQdJqbl9a2U9SWUSC4lxr7cXjkBq6diTfWcJsi0UjdGWlqy+EevQg9dSC4g3s3BEp19g== dependencies: - "@azure/msal-common" "16.14.1" + "@azure/msal-common" "16.14.2" "@azure/msal-common@16.14.1": version "16.14.1" resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-16.14.1.tgz#2c987f31da858e544e72b6faa986fecdb3de20f8" integrity sha512-Or6xhPNyi4zHW25158yxBoyxuCqNSPa5YBVqfF1J5Ks4MJWBo/USXdp05DQIPu1Zli00YZu6t0+h6KvHJealxQ== +"@azure/msal-common@16.14.2": + version "16.14.2" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-16.14.2.tgz#742eb4603448ba5700d3582423cc5781c96ca971" + integrity sha512-HOBR0Gfo39TMrkxNG8k6cfjRkrRjXZc3JQs3ebMWQc9S4cihuknMYra3sgmzbZB752oQBqBN9+WF7c826p2vIQ== + "@azure/msal-node@^6.0.0": version "6.0.1" resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-6.0.1.tgz#48b9d5a472f16b403bd3a32494227ecfc54cafd4" @@ -725,14 +730,14 @@ integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== "@babel/helpers@^7.29.7": - version "7.29.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.7.tgz#45abfde7548997e34376c3e69feb475cffb4a607" - integrity sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg== + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.10.tgz#d662b4a2d66cc6cf02bc50e8aced023fbc8649e9" + integrity sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg== dependencies: "@babel/template" "^7.29.7" - "@babel/types" "^7.29.7" + "@babel/types" "^7.29.8" -"@babel/parser@^7.29.7", "@babel/parser@^7.29.8": +"@babel/parser@^7.29.7", "@babel/parser@^7.29.8", "@babel/parser@^7.29.9": version "7.29.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.9.tgz#e7ee0a24f752c5296c6455855ccb72662e67ea96" integrity sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA== @@ -749,14 +754,14 @@ "@babel/types" "^7.29.7" "@babel/traverse@^7.29.7": - version "7.29.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.8.tgz#4111014cdc71a0f95d9471907590baa0b8a6b28a" - integrity sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg== + version "7.29.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.10.tgz#08ab387639b4a67304511259c7da6cf23a82e91c" + integrity sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ== dependencies: "@babel/code-frame" "^7.29.7" "@babel/generator" "^7.29.8" "@babel/helper-globals" "^7.29.7" - "@babel/parser" "^7.29.8" + "@babel/parser" "^7.29.9" "@babel/template" "^7.29.7" "@babel/types" "^7.29.8" debug "^4.3.1" @@ -1080,16 +1085,16 @@ integrity sha512-ieYQ8WlBPKYzEo81H3q0DFbd8WtFRXXABb4+vRCF0AO3WWtJZFxYvRGdipUXGrd6tlSySmqhcPuO3J6SCodCxg== "@mongodb-js/saslprep@^1.3.0": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.5.4.tgz#3642b46addbc9668b95bb2795c482b457a5f9d00" - integrity sha512-05UC0jQsjKAOuXQ0H9Ud9vUTJpZIg+n/FinpR30tI5I8pY2inTfPOZ5OF/cg3Ce/N9MoD1xhRCeOsJtuTbFYlw== + version "1.6.0" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.6.0.tgz#7d2ef0576437562c4f54b39379a9d9c1b8164db7" + integrity sha512-19jGXfpctLDJUELLUZGJ5BllcLT7rHdF+gTTaN2jzqu0bGkUhpdcYtgK2Vux+g3zuBAa0TM/W666QMIjYhYujw== dependencies: sparse-bitfield "^3.0.3" -"@nodable/entities@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-3.0.0.tgz#694703bc864d30eaed55c2e3def00dbd61493670" - integrity sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw== +"@nodable/entities@^3.0.1": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-3.1.0.tgz#2ab366e0e607fdef8d65c5d84c58d191812bbd4b" + integrity sha512-LsS/DjHr+uDM647Gru/cA8+J3a3HfhttwCKLyuoyN7yXTFCxKBtSgMQBvrW9yNPa2/zDRUNuGPaH5QUFoa4arQ== "@npmcli/agent@^3.0.0": version "3.0.0" @@ -1148,6 +1153,13 @@ dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" +"@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/core@2.9.0": version "2.9.0" resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.9.0.tgz#49de86106f86255b471b2ff035ef1003a851b252" @@ -1371,12 +1383,12 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/redis-common/-/redis-common-0.38.3.tgz#31a0464a48a991c29408614e3725d94db7c11aee" integrity sha512-VCghU1JYs/4gP6Gqf/xro9MEsZ7LrMv2uONVsaESKL38ZOB9BqnI98FfS23wjMnHlpuE+TTaWSoAVNpTwYXzjw== -"@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== +"@opentelemetry/resources@2.12.0", "@opentelemetry/resources@^2.9.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.11.0" + "@opentelemetry/core" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" "@opentelemetry/resources@2.9.0": @@ -1449,13 +1461,13 @@ "@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== + 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": @@ -1467,13 +1479,13 @@ "@opentelemetry/core" "2.9.0" "@opentelemetry/sdk-trace-base" "2.9.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/core" "2.12.0" + "@opentelemetry/resources" "2.12.0" "@opentelemetry/semantic-conventions" "^1.29.0" "@opentelemetry/sdk-trace@2.9.0": @@ -1547,10 +1559,10 @@ resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== -"@scality/arsenal@8.6.0-preview.2", "@scality/arsenal@^8.6.0-0": - version "8.6.0-preview.2" - resolved "https://registry.yarnpkg.com/@scality/arsenal/-/arsenal-8.6.0-preview.2.tgz#ee13753728ae3425c67cbd1bbd7b3867b48b3685" - integrity sha512-JI4wv54WvXArdE8l887bLfulGkMMcfvCJjTjEMFbACG82ZAmpplslCWONOb8euk4bcWilLXMtn3Vu+C31ha6DA== +"@scality/arsenal@8.6.0-preview.5", "@scality/arsenal@^8.6.0-0": + version "8.6.0-preview.5" + resolved "https://registry.yarnpkg.com/@scality/arsenal/-/arsenal-8.6.0-preview.5.tgz#936e699b5ca494f23ccc2399113a6ee071f0006a" + integrity sha512-YfqqI8D5dvUcYVBRcC39kBA5Ikz3L8wNq9yedBdrg5/skoICGTRuHZwKECeYRagl3XN7fZReoCeY4gSsXWfbKw== dependencies: "@aws-sdk/client-kms" "^3.975.0" "@aws-sdk/client-s3" "^3.975.0" @@ -1573,6 +1585,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 @@ -1580,10 +1593,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" @@ -1603,15 +1613,23 @@ httpagent "git+https://github.com/scality/httpagent#1.1.0" werelogs scality/werelogs#8.2.2 -"@scality/cloudserverclient@1.0.12": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@scality/cloudserverclient/-/cloudserverclient-1.0.12.tgz#cbef36fb65b9cb9f7235d6d7dec291a535cd8dd2" - integrity sha512-A85ki+dQSdBt7C9pGxTA2NXRbg74azZ2LV/dBWf2A5soQFYXabDAnKQl/4+hnar8OAbIZ8XFoJjqqQzRZ4mGhg== +"@scality/cloudserverclient@1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@scality/cloudserverclient/-/cloudserverclient-1.0.13.tgz#45fecaf81a655df7a37e2adeb7442b63dce855f4" + integrity sha512-hfjiatdUTmUPtOb13AuSjz5ObbyjDPoUZ2WatSUZMt4wTKqbywf5HV88YQMDIB6L9q52E3YcAaIgbdE09vSxwA== dependencies: "@aws-sdk/client-s3" "^3.1009.0" + "@aws-sdk/core" "^3.978.1" + "@aws-sdk/credential-provider-node" "^3.972.84" "@aws-sdk/middleware-expect-continue" "^3.972.8" + "@aws-sdk/types" "^3.974.6" + "@smithy/core" "^3.35.0" + "@smithy/fetch-http-handler" "^5.8.0" + "@smithy/node-http-handler" "^4.12.1" + "@smithy/types" "^4.19.0" JSONStream "^1.3.5" fast-xml-parser "^5.5.7" + tslib "^2.6.2" "@scality/eslint-config-scality@scality/Guidelines#8.3.3": version "8.3.3" @@ -1628,14 +1646,14 @@ httpagent "github:scality/httpagent#1.1.0" werelogs "github:scality/werelogs#8.2.2" -"@scality/scubaclient@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@scality/scubaclient/-/scubaclient-1.2.0.tgz#d3bd0342d35a9b1049d3037d642fc2ab7a771f1c" - integrity sha512-8pGePyYJkl6A/8K/qeNJMBnGb2d6yA+E813rZbEBHjLRpySyR/KmThMpV2Gj917N8WC8dJ4sxn9D4yjq62gL+Q== +"@scality/scubaclient@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scality/scubaclient/-/scubaclient-1.2.1.tgz#f593c817fcc534db65453ab1d2261ebd7f2b4f83" + integrity sha512-rbo7+D7Upw9x4TyCY9WamF4f8QqQNgivOotVW79kvykxzZlKVYZaprrZgKUS0ut4hvBC03XP9HI0JegAuV25mg== dependencies: "@aws-crypto/sha256-js" "^5.2.0" "@smithy/signature-v4" "^5.3.7" - axios "~1.18.1" + axios "~1.20.0" "@scality/utapi@github:scality/utapi#8.4.0": version "8.4.0" @@ -1734,9 +1752,9 @@ tslib "^2.6.2" "@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" - integrity sha512-zRMhfkByhT2snNdr1si24vJitU6Cr9ix2MikUfWmkAgp4jrNP0GcKSP5YvwQ+TlI8AZXER5QOGJn3JsVtSD9/A== + version "3.35.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.35.1.tgz#9bcc2a52d331027021db17ed699d251ca041797a" + integrity sha512-i4YPS4B6ts7bjn7UwLnGjiZdprOvHvgGobFZsYK3GIY3E5hIqtj0rReU69BcTpGp+fvtraSNXeG1l+jtJvF55w== dependencies: "@smithy/types" "^4.19.0" tslib "^2.6.2" @@ -2098,16 +2116,16 @@ integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*", "@types/node@>=10.0.0", "@types/node@>=13.7.0": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-26.6.3.tgz#411dccb5fc25687c958fe35b6ca3741d48a8d13c" - integrity sha512-dsqMQQoeTLqu9wynDD00q573mNzso3IdQOAfHRJqLCcmCFPoGo9A1bDpUcv/9tnKpErQWv9uKeGfl37EIS02Yg== + version "26.6.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-26.6.4.tgz#5aaac1a7337945f7f9a2de4e0d14e7107157e813" + integrity sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg== dependencies: undici-types "~8.9.0" "@types/node@^25.2.0": - version "25.9.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.8.tgz#a460865b194c2c416a8f11841613207848b92583" - integrity sha512-VfMrScDmMhUJQmd5hArdQnFvK0OIeD36uN2Va1FcpYaLB/BgkgM8Ulc50XtYISPMz7APJ30+N0T5EM0jlcdfRw== + version "25.9.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.9.tgz#19f1b689ab7558ed910664b6078113b8abbef1d0" + integrity sha512-b4e2xxj/yMeT2hNlD6x7zNFiQK2Dlmkb9CQ6v3/1G2RezKN4YS2lcEv8lzGm1mhs4f2lM4yNAMI/zUDBZBBt7w== dependencies: undici-types ">=7.24.0 <7.24.7" @@ -2141,9 +2159,9 @@ "@types/webidl-conversions" "*" "@types/ws@*", "@types/ws@^8.5.12": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" - integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + version "8.18.2" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.2.tgz#25d6321b30ef0fddf6cc7052b4eef9ce4e412b6e" + integrity sha512-67MQl+fpWKVTT1NYdnmo3U4sc/xPo/zQBncVnI74qmQa0z/b+1g6iYqNmGCPbxO+zz2aklb08a0oHfegiVd0/w== dependencies: "@types/node" "*" @@ -2169,6 +2187,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@^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.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" @@ -2180,21 +2210,6 @@ abstract-leveldown@^6.2.1: 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" @@ -2232,9 +2247,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.15.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.18.0.tgz#4faf01b2d6d326bfeed97aea1f52220b5f4c1940" - integrity sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ== + version "8.19.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.19.0.tgz#6b26fd97ce1cc9dc50bdf7ad305e9f1384d4f28a" + integrity sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw== agent-base@6: version "6.0.2" @@ -2279,9 +2294,9 @@ ansi-regex@^5.0.1: integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.2.2: - version "6.3.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.3.0.tgz#247c8e7b70a1a43b10ce14c0226fcbf58e8815d5" - integrity sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ== + version "6.4.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.4.0.tgz#69093d6436d30dbb9b04fe7bdcbcfe16c697d8a1" + integrity sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw== ansi-styles@^3.2.1: version "3.2.1" @@ -2490,7 +2505,7 @@ aws4@^1.13.2, aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== -axios@^1.12.2: +axios@^1.12.2, axios@~1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/axios/-/axios-1.20.0.tgz#515513445aa60e71d04b6521ca6210829ccb4786" integrity sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg== @@ -2500,16 +2515,6 @@ axios@^1.12.2: https-proxy-agent "^5.0.1" proxy-from-env "^2.1.0" -axios@~1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.18.1.tgz#d63f9863bcd8938815c86f9e2abd380189d96dfe" - integrity sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g== - dependencies: - follow-redirects "^1.16.0" - form-data "^4.0.5" - https-proxy-agent "^5.0.1" - proxy-from-env "^2.1.0" - backo@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/backo/-/backo-1.1.0.tgz#a36c4468923f2d265c9e8a709ea56ecdaff807e6" @@ -2542,10 +2547,10 @@ base64-js@^1.0.2, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.11.25: - version "2.11.26" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.26.tgz#01bf6774efb3fbb9de20afc6b923ab85c7d230a6" - integrity sha512-GLQdD3y6UF8iVuMJl5fHgE4jdn/ua7n+toKfLgNlg3BqQtOZjpy68T8Tup8/wGWZCDlm7KMg7tPb4MPn7oN0TQ== +baseline-browser-mapping@^2.11.26: + version "2.11.27" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.27.tgz#9bb9242d87ab1cdc9e35607148791e20e4398b20" + integrity sha512-ElY12DaROGuan+lMmZ8Cvo/ZUbXPe7Enc/9VU/b1T3Kp4dwytRcNdR8DoSJN5SNJT/CuvcCA0DHDVmMOCePdRQ== bcrypt-pbkdf@^1.0.0: version "1.0.2" @@ -2571,13 +2576,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@^1.18.3, body-parser@^1.20.3, body-parser@~1.20.5: version "1.20.8" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.8.tgz#328d51ce46cb19c983f3d9661016df2765283a37" @@ -2636,13 +2634,13 @@ browser-stdout@^1.3.1: integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserslist@^4.24.0: - version "4.29.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.29.1.tgz#f723071987a4f094177d94e01f6dc6e7493b972c" - integrity sha512-AUdjuRyCNGUYtqpqfTmWyM4fXay8yIQhmLnvYe/THMGfT9B/34X7xQd3ifKxwyNPPpowVBjLb+64BN9Rn1mizw== + version "4.29.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.29.3.tgz#9c8dafe96ab1c8e40e21c1274bdfa05aaee46476" + integrity sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA== dependencies: - baseline-browser-mapping "^2.11.25" - caniuse-lite "^1.0.30001810" - electron-to-chromium "^1.5.438" + baseline-browser-mapping "^2.11.26" + caniuse-lite "^1.0.30001813" + electron-to-chromium "^1.5.439" node-releases "^2.0.57" update-browserslist-db "^1.3.3" @@ -2704,21 +2702,6 @@ 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" @@ -2806,10 +2789,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001810: - version "1.0.30001812" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001812.tgz#55b32ed819d120b384149a4f9fd59d179ce008f9" - integrity sha512-qN+QNNBr93TCmFrmte0bBCjSDMuRvt78VlHT99qIGPszm4QsqCX8lnyWUFkHi8B7ZBAPq8SH+UqyXNy/odMdng== +caniuse-lite@^1.0.30001813: + version "1.0.30001815" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001815.tgz#7cf8faa82c998b06873a113e9d3d9544f2022ac0" + integrity sha512-uDybUEyfgbyJJ93J1vikTylBX31AkdVYeVPeffMQpf8XN7hSfr0oZOn4VFOIMNvtU5+rHvC5Udg2TgtJKHm23Q== caseless@~0.12.0: version "0.12.0" @@ -2881,9 +2864,19 @@ chownr@^3.0.0: integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== 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== + version "2.3.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.3.0.tgz#4eb71c63d5f70f0b1d8a39a595c134a6692493f2" + integrity sha512-lmNyBzi6iYiqyrExTctfmjd8tInx+dHu9PBomTfH5RXS53c27JMFJgzNv5TyAnm3PgGf+MLy0+Ws41/HlVxdKQ== + +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 "^3.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" clean-stack@^2.0.0: version "2.2.0" @@ -2986,7 +2979,7 @@ colorette@^2.0.7: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3247,13 +3240,6 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -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" @@ -3391,10 +3377,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.438: - version "1.5.439" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.439.tgz#d14ad21f157ee83b77d1e46fc031776eec9013c9" - integrity sha512-qu6QIPXhsb+CRcAiTMNjR4A1y/7tCYKkKjr5CZXRVih6qkDf79peZ2BpEU3qoDBNCRrcy3Mra3X9nG5oruuA7Q== +electron-to-chromium@^1.5.439: + version "1.5.449" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.449.tgz#94cc7307abf5ec39d1afa619e53072c26a8ef8d1" + integrity sha512-dKeYk/3SFQz+nXi5whp3OuJzeWABEG4zCtkWJ9+Vby1E1iFM2y0gElRtQvNXRPJTsj8WAF4HMP7hvP790QtJ9g== emoji-regex@^8.0.0: version "8.0.0" @@ -3472,9 +3458,9 @@ engine.io@~6.6.0: ws "~8.21.0" enhanced-resolve@^5.17.1: - version "5.25.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz#9d919bfa898b116e58f20e95127c047693158771" - integrity sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w== + version "5.26.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz#9dfb47d050ed6c87f2c6d43b4d7e30f8c0a91ed7" + integrity sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw== dependencies: graceful-fs "^4.2.4" tapable "^2.3.3" @@ -3584,9 +3570,9 @@ es-errors@^1.3.0: integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 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== + version "3.0.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-3.0.3.tgz#3c4b64e116d69fe523e332134ef088962d78f288" + integrity sha512-yWGe1O/j+almnV4hOYrmZo8u58JdnmXEMneRQAYkWtqSiT86yoMIEKF4rpqEDj52tbYl3xceBD3DQIBwcsC9Pw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1, es-object-atoms@^1.1.2: version "1.1.2" @@ -3612,7 +3598,7 @@ es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: dependencies: hasown "^2.0.2" -es-to-primitive@^1.3.0: +es-to-primitive@^1.3.0, es-to-primitive@^1.3.4: 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== @@ -3970,9 +3956,9 @@ extsprintf@^1.2.0: integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-copy@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-4.1.1.tgz#e39f2d403aa77a7e10628e3d8d4d8ed4b2ac5256" - integrity sha512-A4QTJmuiztpGtr6AMeJts9R4hbj2ZBUwtOaKrG6rw2y7t6+IaJKjz5M3XDs8BUznxDH43FVc6A0y/gWlMl4UtA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-4.1.2.tgz#9119c178a5f2aa568074cf21cd6823068fbfea15" + integrity sha512-DUHggaYcouhy5I1LacDJ+JDSqGlumVJP2EAi5Nwt1pWPeLpSvIjkrY+x4fsoI1/+GlTyq+DM9zdgWCFSfqNODA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -4003,11 +3989,11 @@ fast-xml-builder@^1.2.0: xml-naming "^0.3.0" fast-xml-parser@^5.5.6, fast-xml-parser@^5.5.7, fast-xml-parser@^5.5.9: - version "5.11.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.11.1.tgz#0ee672fcce1710c38185b8290d77e98806ff0bfb" - integrity sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw== + version "5.11.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.11.2.tgz#0d4987adf4e7934af11d82a73b2841eca9928a42" + integrity sha512-R9iDuNrQYeQut46cn2r2wHKn4HYzVDvDm5J1wW+koZewykv0yuO2HChTYeZtrULyHIDM9cj9TUXloCsueCQUog== dependencies: - "@nodable/entities" "^3.0.0" + "@nodable/entities" "^3.0.1" fast-xml-builder "^1.2.0" is-unsafe "^2.0.0" path-expression-matcher "^1.6.2" @@ -4118,9 +4104,9 @@ fn.name@1.x.x: integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" - integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== + version "1.16.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.1.tgz#6e0efa40a727fb369b98dab15883ec34787d675e" + integrity sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg== for-each@^0.3.3, for-each@^0.3.5: version "0.3.5" @@ -4150,25 +4136,28 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== -form-data@^4.0.5, form-data@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.6.tgz#28e864e1b786dbebb68db1f452f9635278665827" - integrity sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ== +form-data@^2.5.6, form-data@~2.3.2: + version "2.5.6" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.6.tgz#ef39b3d99e2fc9f25420c0db7962fe36cafcd244" + integrity sha512-Ogz/E85h9tlfJzpI6TuFpGcHZFhLrb9Gw8wq9v40CxSCPnv7ahKr6Xgtkn0KYCDQJ8DNn5VoMO8EXr9V5PadyA== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" es-set-tostringtag "^2.1.0" hasown "^2.0.4" mime-types "^2.1.35" + safe-buffer "^5.2.1" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.6.tgz#28e864e1b786dbebb68db1f452f9635278665827" + integrity sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.4" + mime-types "^2.1.35" forwarded-parse@2.1.2: version "2.1.2" @@ -4509,9 +4498,9 @@ html-escaper@^2.0.0: integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" - integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.3.0.tgz#09eead3b16c6d85552857cc3fbd888d8353a2aaf" + integrity sha512-M5t5LlJpS1UHMjvwRQVdFHvPISGeLAxNcrWuJkeGh0KxsqCHZ1O3NXZU/8x7cD0BDcGW8kapxMKTvwlqrNkHkA== http-errors@~2.0.0, http-errors@~2.0.1: version "2.0.1" @@ -4577,6 +4566,7 @@ http2-wrapper@^1.0.0-beta.5.2: "httpagent@github:scality/httpagent#1.1.1", httpagent@scality/httpagent#1.1.1: version "1.1.1" + uid "7c6ef8be1cd89b56651f4a922ea5c92d7673ee2e" resolved "https://codeload.github.com/scality/httpagent/tar.gz/7c6ef8be1cd89b56651f4a922ea5c92d7673ee2e" dependencies: agentkeepalive "^4.6.0" @@ -4652,9 +4642,9 @@ import-fresh@^3.2.1: resolve-from "^4.0.0" import-in-the-middle@^3.0.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-3.5.1.tgz#74fc490851751005dc2f776a87bc8a075904b474" - integrity sha512-mPKuL8bPQzecui2KK6Gb+M8JvJoHnhS1FeYGa22QopBmlevF5F0FE6ued/B5EgHDeIoMTONIpDWWFKUPOG0DBQ== + version "3.5.2" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-3.5.2.tgz#c017ecf4fe1f83da743793ea9321519131cd3135" + integrity sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw== dependencies: cjs-module-lexer "^2.2.0" es-module-lexer "^3.0.2" @@ -4714,9 +4704,9 @@ ioredis@^5.4.1, ioredis@^5.4.2, ioredis@^5.8.1: standard-as-callback "2.1.0" ip-address@^10.1.1: - version "10.7.2" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.7.2.tgz#5b3b2b7d46c6293861b82dfcd49cc203aa8f2c5c" - integrity sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w== + version "10.7.3" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.7.3.tgz#4cb77d274a4e2484a3ea438cfe98dbe0c502e8c5" + integrity sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg== ipaddr.js@1.9.1: version "1.9.1" @@ -4788,6 +4778,11 @@ is-boolean-object@^1.2.1: 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-buffer@~1.1.1, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -4798,7 +4793,7 @@ is-callable@^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: +is-core-module@^2.16.1, is-core-module@^2.16.2, is-core-module@^2.17.0: 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== @@ -5043,11 +5038,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@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -5356,17 +5346,6 @@ level-iterator-stream@~4.0.0: 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-mem@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" @@ -5375,7 +5354,7 @@ level-mem@^5.0.1: level-packager "^5.0.3" memdown "^5.0.0" -level-packager@^5.0.0, level-packager@^5.0.3: +level-packager@^5.0.3: 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== @@ -5383,26 +5362,10 @@ level-packager@^5.0.0, level-packager@^5.0.3: 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.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" @@ -5411,24 +5374,13 @@ level-supports@~1.0.0: dependencies: xtend "^4.0.2" -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== +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" + buffer "^6.0.3" + module-error "^1.0.1" levelup@^4.3.2: version "4.4.0" @@ -5441,19 +5393,6 @@ levelup@^4.3.2: 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" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -5601,16 +5540,6 @@ 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== - lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" @@ -5628,16 +5557,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -ltgt@^2.1.2, ltgt@~2.2.0: +ltgt@~2.2.0: 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" @@ -5693,6 +5617,11 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +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" + integrity sha512-eefp6IduNPT6fVdwPp+1NgD0PML1NU5P6j1Mj5nz1nidX8/sWY7119WL8vTAHgqfsY74TzW0w1XPgdYEKkGZ5A== + md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" @@ -6038,7 +5967,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -6200,6 +6129,11 @@ module-details-from-path@^1.0.3, module-details-from-path@^1.0.4: resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.4.tgz#b662fdcd93f6c83d3f25289da0ce81c8d9685b94" integrity sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w== +module-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + moment@^2.30.1: version "2.31.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.31.0.tgz#6e19184e8005a9dfc61c9351263d4d6ea2ace7aa" @@ -6237,10 +6171,10 @@ nan@^2.14.0, nan@^2.18.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.29.0.tgz#95bace50f153289240573c08401acc63a30659d4" integrity sha512-GlGk3HIvitbvs+LT3g6XUP1kpirKNvmDFwF/bmo6XNWSb/eYEs/O4bfgIEIXCZ+lIOTS5xNwDvSGMw6FJdAhtA== -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-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== natural-compare@^1.4.0: version "1.4.0" @@ -6310,21 +6244,11 @@ node-fetch@^2.6.0: dependencies: whatwg-url "^5.0.0" -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" @@ -6563,7 +6487,7 @@ object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" -on-exit-leak-free@^2.1.0: +on-exit-leak-free@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== @@ -6599,11 +6523,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" @@ -6822,9 +6741,9 @@ pino-abstract-transport@^3.0.0: split2 "^4.0.0" pino-pretty@^13.1.3: - version "13.1.3" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-13.1.3.tgz#2274cccda925dd355c104079a5029f6598d0381b" - integrity sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg== + version "13.2.0" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-13.2.0.tgz#3598d57af318518398ba2a8c6903452a8b7575ce" + integrity sha512-jjghD1ML+Di/WxjJDz6j6Y4FT7hIXOlb8h27AyJ+ohtAXJXH4PS/xkv7si+RCCIW59HMgZsMKTDgzdr0RhuRrg== dependencies: colorette "^2.0.7" dateformat "^4.6.3" @@ -6833,12 +6752,12 @@ pino-pretty@^13.1.3: help-me "^5.0.0" joycon "^3.1.1" minimist "^1.2.6" - on-exit-leak-free "^2.1.0" + on-exit-leak-free "^2.1.2" pino-abstract-transport "^3.0.0" - pump "^3.0.0" - secure-json-parse "^4.0.0" - sonic-boom "^4.0.1" - strip-json-comments "^5.0.2" + pump "^3.0.3" + secure-json-parse "^4.1.0" + sonic-boom "^5.0.0" + strip-json-comments "^5.0.3" pkg-dir@^4.1.0: version "4.2.0" @@ -6930,11 +6849,6 @@ proxy-from-env@^2.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba" integrity sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== -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" @@ -6952,55 +6866,7 @@ pstree.remy@^1.1.8: resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -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" - -pump@^3.0.0: +pump@^3.0.0, pump@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.4.tgz#1f313430527fa8b905622ebd22fe1444e757ab3c" integrity sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA== @@ -7094,16 +6960,6 @@ readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.2: 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" - readdirp@^4.0.1: version "4.1.2" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" @@ -7226,12 +7082,12 @@ resolve-pkg-maps@^1.0.0: integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve@^1.10.0: - version "1.22.12" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" - integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== + version "1.22.13" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.13.tgz#d542f97758d768f36091251a6b07540b4343f7b5" + integrity sha512-Dj/cW9zBV2aRj6XzCxuGIs3ESZKv02jixne3q6jFZYZ3/Tg09gHHviSMDL4kObh9pqSahdRHEnDoaP2gn8YLhA== dependencies: es-errors "^1.3.0" - is-core-module "^2.16.1" + is-core-module "^2.17.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -7282,7 +7138,7 @@ safe-array-concat@^1.1.3: has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -7329,7 +7185,7 @@ sax@>=0.6.0, sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.1.tgz#4c23cf608c0b693ab54b4b5888e92cfe977b9843" integrity sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q== -secure-json-parse@^4.0.0: +secure-json-parse@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-4.1.0.tgz#4f1ab41c67a13497ea1b9131bb4183a22865477c" integrity sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA== @@ -7349,11 +7205,6 @@ semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: 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@~0.19.0, send@~0.19.1: version "0.19.2" resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" @@ -7456,9 +7307,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.10.0.tgz#482033e192e4f5c07151521ffa03400ec71b1b0f" - integrity sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.12.0.tgz#e98fdfd2e921d8a58ae2820f4fc0f75c39f09675" + integrity sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q== side-channel-list@^1.0.1: version "1.0.1" @@ -7599,10 +7450,10 @@ socks@^2.8.3: ip-address "^10.1.1" smart-buffer "^4.2.0" -sonic-boom@^4.0.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.1.tgz#28598250df4899c0ac572d7e2f0460690ba6a030" - integrity sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q== +sonic-boom@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-5.0.2.tgz#a2ce0c7c70e71f5ef1d5511f67063b0bbaf41705" + integrity sha512-/JEruzo6yhNVhsLblTRchgTQHIt7SsdJP0YyrfWaNKjIOQDfrdZv9gwYraYCAsmKV39/LAdV31FLL5NCDpoL/A== dependencies: atomic-sleep "^1.0.0" @@ -7745,14 +7596,6 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== -stream-to-pull-stream@^1.7.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" - integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== - dependencies: - looper "^3.0.0" - pull-stream "^3.2.3" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -7830,11 +7673,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== - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -7878,7 +7716,7 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@^5.0.2: +strip-json-comments@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-5.0.3.tgz#b7304249dd402ee67fd518ada993ab3593458bcf" integrity sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw== @@ -8014,13 +7852,15 @@ tr46@~0.0.3: integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== traverse@~0.6.6: - version "0.6.11" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.11.tgz#e8daa071b101ae66767fffa6f177aa6f7110068e" - integrity sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w== + version "0.6.14" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.14.tgz#664c14548c5b1e1b39ba70d5313d09e2da7a177f" + integrity sha512-CYRAVGfnSSe+4Wlof62oUH6y9fGwo0NNS84hMq76MTZtwXQU7Oqna9SgWfrCGj5JPUtHQudnIEt1BP7PInPkPQ== dependencies: + define-data-property "^1.1.4" + es-to-primitive "^1.3.4" gopd "^1.2.0" - typedarray.prototype.slice "^1.0.5" - which-typed-array "^1.1.18" + typedarray.prototype.slice "^1.0.6" + which-typed-array "^1.1.24" triple-beam@^1.3.0: version "1.4.1" @@ -8139,7 +7979,7 @@ typed-array-byte-length@^1.0.3: has-proto "^1.2.0" is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.4: +typed-array-byte-offset@^1.0.4, typed-array-byte-offset@^1.0.5: 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== @@ -8163,43 +8003,26 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.1.0" reflect.getprototypeof "^1.0.10" -typedarray-to-buffer@^3.1.5, typedarray-to-buffer@~3.1.5: +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" -typedarray.prototype.slice@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz#a40f896968573b33cbb466a61622d3ee615a0728" - integrity sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg== +typedarray.prototype.slice@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.6.tgz#c8a99a54201aa7573b3ac747441bee4a9f7f5e00" + integrity sha512-r+7YvGfM5TkTiDQ5EqWi/Z4L4KP3jUI+YCmTtWg1tmTHUw6xladLJqzR2heMaHBIM0TTFLZmn/EkIaEHYs/bIA== dependencies: - call-bind "^1.0.8" + call-bind "^1.0.9" define-properties "^1.2.1" - es-abstract "^1.23.9" + es-abstract "^1.24.2" es-errors "^1.3.0" get-proto "^1.0.1" math-intrinsics "^1.1.0" typed-array-buffer "^1.0.3" - typed-array-byte-offset "^1.0.4" - -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== + typed-array-byte-offset "^1.0.5" unbox-primitive@^1.1.0: version "1.1.0" @@ -8430,7 +8253,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.16, which-typed-array@^1.1.18, which-typed-array@^1.1.19: +which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.24: version "1.1.24" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.24.tgz#211f5877c29e6213d50e8f2dce4ac9ca2d0008cf" integrity sha512-wk4Mf4pR5mRP7eYuuTBCIQ9d0ud2Fv2jRLQpfgnRjbOxAFHmjKFValgTpitVKzJJS8ajnYQV2Du1SZ8j6b/EUQ== @@ -8551,7 +8374,12 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@*, ws@^8.18.0, ws@~8.21.0: +ws@*, ws@^8.18.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.22.0.tgz#40f16e1d7588ac0575041be5c49b8eb261c28e73" + integrity sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg== + +ws@~8.21.0: version "8.21.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.3.tgz#660b4faddb6a3e575c86e078126919961f4de4fc" integrity sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw== @@ -8596,11 +8424,6 @@ xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0: 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@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"