From f994dd1dddf4b0ea74cd20e23c3b3ce4c0217429 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 11 Sep 2024 09:42:55 +0200 Subject: [PATCH 001/112] example added --- components/ssdp/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/ssdp/index.js b/components/ssdp/index.js index b722d0d..a140bf2 100644 --- a/components/ssdp/index.js +++ b/components/ssdp/index.js @@ -27,6 +27,11 @@ const messageHandler = require("./message-handler.js"); * ``` * * @example + * ```sh + * nc -ulvv 239.255.255.250 1900 + * ``` + * + * @example * ```json * { * host: '239.255.255.250:1900', From 03c14acc99d5bb034a980df06ce707d12f437553 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 12 Sep 2024 10:32:56 +0200 Subject: [PATCH 002/112] fix #491 --- components/devices/index.js | 2 +- components/mdns/index.js | 2 +- components/mqtt/index.js | 2 +- components/plugins/index.js | 2 +- components/rooms/index.js | 2 +- components/scenes/index.js | 2 +- components/ssdp/index.js | 2 +- components/users/index.js | 2 +- components/webhooks/index.js | 2 +- system/component/class.component.js | 6 +----- 10 files changed, 10 insertions(+), 14 deletions(-) diff --git a/components/devices/index.js b/components/devices/index.js index 0bae134..4083df9 100644 --- a/components/devices/index.js +++ b/components/devices/index.js @@ -142,7 +142,7 @@ class C_DEVICES extends COMPONENT { // inject logger, collection and schema object // https://stackoverflow.com/a/37746388/5781499 - super("devices", Device.schema(), module); + super("devices", Device.schema()); // create for new added device interfaces diff --git a/components/mdns/index.js b/components/mdns/index.js index 787bffc..f4aeced 100644 --- a/components/mdns/index.js +++ b/components/mdns/index.js @@ -27,7 +27,7 @@ class C_MDNS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("mdns", MDNS.schema(), module); + super("mdns", MDNS.schema()); this.hooks.post("add", (data, next) => { next(null, new MDNS(data)); diff --git a/components/mqtt/index.js b/components/mqtt/index.js index e11b917..9f19f15 100644 --- a/components/mqtt/index.js +++ b/components/mqtt/index.js @@ -46,7 +46,7 @@ class C_MQTT extends COMPONENT { constructor() { // inject logger, collection and schema object - super("mqtt", MQTT.schema(), module); + super("mqtt", MQTT.schema()); this.hooks.post("add", (data, next) => { next(null, new MQTT(data)); diff --git a/components/plugins/index.js b/components/plugins/index.js index a1c0192..a9a59e2 100644 --- a/components/plugins/index.js +++ b/components/plugins/index.js @@ -31,7 +31,7 @@ class C_PLUGINS extends COMPONENT { // inject logger, collection and schema object // super(logger, mongodb.client.collection("plugins"), { - super("plugins", Plugin.schema(), module); + super("plugins", Plugin.schema()); this.hooks.post("add", (data, next) => { // NOTE: use path to plugins set via env, see #432 diff --git a/components/rooms/index.js b/components/rooms/index.js index 9aff9e1..8fbd783 100644 --- a/components/rooms/index.js +++ b/components/rooms/index.js @@ -48,7 +48,7 @@ class C_ROOMS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("rooms", Room.schema(), module); + super("rooms", Room.schema()); this.hooks.post("add", (data, next) => { next(null, new Room(data)); diff --git a/components/scenes/index.js b/components/scenes/index.js index 77ce557..1676bbc 100644 --- a/components/scenes/index.js +++ b/components/scenes/index.js @@ -18,7 +18,7 @@ class C_SCENES extends COMPONENT { constructor() { // inject logger, collection and schema object - super("scenes", Scene.schema(), module); + super("scenes", Scene.schema()); this.hooks.post("add", (data, next) => { next(null, new Scene(data)); diff --git a/components/ssdp/index.js b/components/ssdp/index.js index a140bf2..87254b1 100644 --- a/components/ssdp/index.js +++ b/components/ssdp/index.js @@ -50,7 +50,7 @@ class C_SSDP extends COMPONENT { constructor() { // inject logger, collection and schema object - super("ssdp", SSDP.schema(), module); + super("ssdp", SSDP.schema()); this.hooks.post("add", (data, next) => { next(null, new SSDP(data)); diff --git a/components/users/index.js b/components/users/index.js index d1b5654..3fb348e 100644 --- a/components/users/index.js +++ b/components/users/index.js @@ -23,7 +23,7 @@ class C_USERS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("users", User.schema(), module); + super("users", User.schema()); this.hooks.post("add", (data, next) => { next(null, new User(this, data)); diff --git a/components/webhooks/index.js b/components/webhooks/index.js index 67afc8d..b36b9b2 100644 --- a/components/webhooks/index.js +++ b/components/webhooks/index.js @@ -15,7 +15,7 @@ class C_WEBHOOKS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("webhooks", Webhook.schema(), module); + super("webhooks", Webhook.schema()); this.hooks.post("add", (data, next) => { next(null, new Webhook(data)); diff --git a/system/component/class.component.js b/system/component/class.component.js index d6359c4..5d0a3e1 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -45,11 +45,7 @@ const PENDING_CHANGE_EVENTS = new Set(); */ module.exports = class COMPONENT extends COMMON { - constructor(name, schema, parent) { - - if (parent) { - //require("../prevent_cross_load")(parent); - } + constructor(name, schema) { super(require("../../system/logger").create(name)); From 710c68c34c7f0b4149db91bfc1d2c0b9fbe3d932 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 12 Sep 2024 23:54:16 +0200 Subject: [PATCH 003/112] fix #488 --- system/{hooks.js => class.hooks.js} | 2 +- system/{middleware.js => class.middleware.js} | 0 system/component/class.base.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename system/{hooks.js => class.hooks.js} (99%) rename system/{middleware.js => class.middleware.js} (100%) diff --git a/system/hooks.js b/system/class.hooks.js similarity index 99% rename from system/hooks.js rename to system/class.hooks.js index 66a206d..c092206 100644 --- a/system/hooks.js +++ b/system/class.hooks.js @@ -1,4 +1,4 @@ -const Middleware = require("./middleware.js"); +const Middleware = require("./class.middleware.js"); const { v4: uuidv4 } = require("uuid"); /** diff --git a/system/middleware.js b/system/class.middleware.js similarity index 100% rename from system/middleware.js rename to system/class.middleware.js diff --git a/system/component/class.base.js b/system/component/class.base.js index 430671a..6852a04 100644 --- a/system/component/class.base.js +++ b/system/component/class.base.js @@ -1,7 +1,7 @@ const process = require("process"); const events = require("events"); -const Hooks = require("../hooks.js"); +const Hooks = require("../class.hooks.js"); /** * @description From ceeabe1c8a1e393c73f445ed9e9f55ec08ae40de Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Sat, 14 Sep 2024 13:53:14 +0200 Subject: [PATCH 004/112] comments added --- components/scenes/class.makro.js | 1 + components/scenes/class.scene.js | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/components/scenes/class.makro.js b/components/scenes/class.makro.js index b0b8689..ce11a0c 100644 --- a/components/scenes/class.makro.js +++ b/components/scenes/class.makro.js @@ -120,6 +120,7 @@ module.exports = class Makro { }), type: Joi.string().valid("command", "timer", "scene"/*, "state"*/).required(), enabled: Joi.boolean().default(true), + // comment: Joi.string().allow(null).default(null) timestamps: Joi.object({ created: Joi.number().allow(null), updated: Joi.number().allow(null) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index 626a66c..5118d89 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -94,6 +94,14 @@ module.exports = class Scene extends Item { let ac = new AbortController(); this._ac = ac; + // wrap this in a custom method + // that returns the state? + // `getStates()` or so... + this.running = true; + this.aborted = false; + this.finished = false; + this.index = 0; + let init = this.makros.filter(({ // enabled is per default "true" @@ -124,6 +132,9 @@ module.exports = class Scene extends Item { // But the general idea of this is not bad await setTimeout(Number(process.env.SCENES_MAKRO_DELAY)); + // represents the current index of makro + // e.g. timer takes 90min to finish, + // index = timer makro in `makros` array this.index = i; return cur(r, this._ac.signal); @@ -136,11 +147,6 @@ module.exports = class Scene extends Item { }; }); - this.running = true; - this.aborted = false; - this.finished = false; - this.index = 0; - return init(true, this._ac).then((result) => { console.log("Makro stack done", result); this.finished = true; From ecaf8b8720471280a1891ae4f68dffe7886b24aa Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 23 Sep 2024 13:22:07 +0200 Subject: [PATCH 005/112] fix #488 --- system/{hooks.js => class.hooks.js} | 2 +- system/{middleware.js => class.middleware.js} | 0 system/component/class.base.js | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename system/{hooks.js => class.hooks.js} (99%) rename system/{middleware.js => class.middleware.js} (100%) diff --git a/system/hooks.js b/system/class.hooks.js similarity index 99% rename from system/hooks.js rename to system/class.hooks.js index 66a206d..c092206 100644 --- a/system/hooks.js +++ b/system/class.hooks.js @@ -1,4 +1,4 @@ -const Middleware = require("./middleware.js"); +const Middleware = require("./class.middleware.js"); const { v4: uuidv4 } = require("uuid"); /** diff --git a/system/middleware.js b/system/class.middleware.js similarity index 100% rename from system/middleware.js rename to system/class.middleware.js diff --git a/system/component/class.base.js b/system/component/class.base.js index 430671a..6852a04 100644 --- a/system/component/class.base.js +++ b/system/component/class.base.js @@ -1,7 +1,7 @@ const process = require("process"); const events = require("events"); -const Hooks = require("../hooks.js"); +const Hooks = require("../class.hooks.js"); /** * @description From 49411b8b89316a21b02c246a7187766aff6851ab Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 23 Sep 2024 13:26:49 +0200 Subject: [PATCH 006/112] fix #484 --- components/devices/class.device.js | 6 ++++-- components/devices/index.js | 14 ++++++++++---- components/endpoints/class.endpoint.js | 18 +++++++++++------- components/endpoints/index.js | 8 +++++--- components/store/class.store.js | 9 +++++---- components/store/index.js | 8 +++++--- components/vault/class.vault.js | 9 +++++---- components/vault/index.js | 8 +++++--- system/component/class.component.js | 11 ++++++++++- 9 files changed, 60 insertions(+), 31 deletions(-) diff --git a/components/devices/class.device.js b/components/devices/class.device.js index 3cf52d1..6ca0400 100644 --- a/components/devices/class.device.js +++ b/components/devices/class.device.js @@ -6,7 +6,7 @@ const Interface = require("./class.interface.js"); const Item = require("../../system/component/class.item.js"); const mixins = require("../../helper/mixins.js"); -const injectMethod = require("../../helper/injectMethod.js"); +//const injectMethod = require("../../helper/injectMethod.js"); //const { parse, calculateChecksum } = require("./net-helper.js"); @@ -28,7 +28,7 @@ const injectMethod = require("../../helper/injectMethod.js"); * @see interfaceStream components/devices/class.interfaceStream.js */ module.exports = class Device extends Item { - constructor(props, scope) { + constructor(props) { super(props); @@ -64,6 +64,7 @@ module.exports = class Device extends Item { // NOTE: remove "device" for bridging requests (only needed in connector)? // > See: https://github.com/OpenHausIO/connector/issues/54 // > When done, "device" property can be removed, and the `.bridge()` method can be moved into Interface class + /* injectMethod(iface, "bridge", (cb) => { return Interface._bridge({ events: scope.events, @@ -71,6 +72,7 @@ module.exports = class Device extends Item { device: this._id }, cb); }); + */ // "hide" stream behind iface object diff --git a/components/devices/index.js b/components/devices/index.js index 4083df9..92bb8f5 100644 --- a/components/devices/index.js +++ b/components/devices/index.js @@ -17,6 +17,8 @@ const COMPONENT = require("../../system/component/class.component.js"); //require("./class.interfaceStream"); const Device = require("./class.device.js"); +const Interface = require("./class.interface.js"); +const InterfaceStream = require("./class.interfaceStream.js"); /** * @description @@ -142,7 +144,11 @@ class C_DEVICES extends COMPONENT { // inject logger, collection and schema object // https://stackoverflow.com/a/37746388/5781499 - super("devices", Device.schema()); + super("devices", Device.schema(), [ + Device, + Interface, + InterfaceStream + ]); // create for new added device interfaces @@ -153,7 +159,7 @@ class C_DEVICES extends COMPONENT { return next(); } - // NOTE Needed if defined in schema?! + // NOTE: Needed if defined in schema?! data.interfaces.forEach((iface) => { iface._id = String(new mongodb.ObjectId()); }); @@ -166,7 +172,7 @@ class C_DEVICES extends COMPONENT { // create after db manipulation a new device instace // use ["add", "update"]?! this.hooks.post("add", (data, next) => { - next(null, new Device(data, this)); + next(null, new Device(data)); }); /* @@ -219,7 +225,7 @@ instance.init((scope, ready) => { data = data.map((item) => { - return new Device(item, scope); + return new Device(item); }); diff --git a/components/endpoints/class.endpoint.js b/components/endpoints/class.endpoint.js index 0e32e65..9bef6fe 100644 --- a/components/endpoints/class.endpoint.js +++ b/components/endpoints/class.endpoint.js @@ -33,7 +33,7 @@ const _debounce = require("../../helper/debounce.js"); * @see InterfaceStream components/devices/class.interfaceStream.js */ module.exports = class Endpoint extends Item { - constructor(obj, scope) { + constructor(obj) { super(obj); @@ -43,6 +43,7 @@ module.exports = class Endpoint extends Item { //this.commands = new Commands(obj.commands); //this.states = new States(obj.states); + let { events, logger, update } = Endpoint.scope; // see 407 & 420 let updater = _debounce(async () => { @@ -50,17 +51,17 @@ module.exports = class Endpoint extends Item { // trigger update on endpoint item // otherwise ui is not rendered/refreshed on state changed - await scope.update(this._id, this); + await update(this._id, this); // feedback - scope.logger.verbose("Endpoint states updated", this.states); + logger.verbose("Endpoint states updated", this.states); } catch (err) { - scope.logger.warn(err, "Could not update item states after debouncing"); + logger.warn(err, "Could not update item states after debouncing"); } - }, 100); + }, 100); // TODO: remove time, or set to 1/0 // see 407 & 420 this.states = obj.states.map((item) => { @@ -68,7 +69,10 @@ module.exports = class Endpoint extends Item { try { // feedback - scope.logger.verbose(`Value in endpoint ("${obj._id}") state ("${item._id}") changed: ${item.alias}=${item.value}`); + logger.verbose(`Value in endpoint ("${obj._id}") state ("${item._id}") changed: ${item.alias}=${item.value}`); + + // notify event listener + events.emit("state", item); // update item in database //await scope.update(this._id, this); @@ -76,7 +80,7 @@ module.exports = class Endpoint extends Item { } catch (err) { - scope.logger.warn(err, `Could not update item (${obj._id}) state ("${item._id}") in database: ${item.alias}=${item.value}`); + logger.warn(err, `Could not update item (${obj._id}) state ("${item._id}") in database: ${item.alias}=${item.value}`); } }); diff --git a/components/endpoints/index.js b/components/endpoints/index.js index a810c2a..76a3076 100644 --- a/components/endpoints/index.js +++ b/components/endpoints/index.js @@ -41,11 +41,13 @@ class C_ENDPOINTS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("endpoints", Endpoint.schema(), module); + super("endpoints", Endpoint.schema(), [ + Endpoint + ]); this.hooks.post("add", (data, next) => { - next(null, new Endpoint(data, this)); + next(null, new Endpoint(data)); }); @@ -132,7 +134,7 @@ instance.init((scope, ready) => { } else { data = data.map((item) => { - return new Endpoint(item, scope); + return new Endpoint(item); }); scope.items.push(...data); diff --git a/components/store/class.store.js b/components/store/class.store.js index 25848cf..7c5ed97 100644 --- a/components/store/class.store.js +++ b/components/store/class.store.js @@ -25,7 +25,7 @@ module.exports = class Store extends Item { #privates = new Map(); - constructor(obj, scope) { + constructor(obj) { super(obj); @@ -35,6 +35,7 @@ module.exports = class Store extends Item { // create event emitter for lean object let events = new EventEmitter(); + let { logger, update } = Store.scope; this.#privates.set("events", events); this.config = obj.config.map((data) => { @@ -42,14 +43,14 @@ module.exports = class Store extends Item { try { // feedback - scope.logger.debug(`Value in store "${this._id}" changed: ${data.key}=${data.value}`); + logger.debug(`Value in store "${this._id}" changed: ${data.key}=${data.value}`); // update item in database - await scope.update(this._id, this); + await update(this._id, this); } catch (err) { - scope.logger.warn(err, `Could not update item value in database. (${obj._id}) ${data.key}=${data.value}`); + logger.warn(err, `Could not update item value in database. (${obj._id}) ${data.key}=${data.value}`); } finally { diff --git a/components/store/index.js b/components/store/index.js index 393ca9b..2a1712a 100644 --- a/components/store/index.js +++ b/components/store/index.js @@ -34,10 +34,12 @@ class C_STORE extends COMPONENT { constructor() { // inject logger, collection and schema object - super("store", Store.schema(), module); + super("store", Store.schema(), [ + Store + ]); this.hooks.post("add", (data, next) => { - next(null, new Store(data, this)); + next(null, new Store(data)); }); // fix #406 @@ -79,7 +81,7 @@ instance.init((scope, ready) => { } else { data = data.map((obj) => { - return new Store(obj, scope); + return new Store(obj); }); scope.items.push(...data); diff --git a/components/vault/class.vault.js b/components/vault/class.vault.js index 38443aa..d99ae9c 100644 --- a/components/vault/class.vault.js +++ b/components/vault/class.vault.js @@ -28,26 +28,27 @@ module.exports = class Vault extends Item { #privates = new Map(); - constructor(obj, scope) { + constructor(obj) { super(obj); // create event emitter for lean object let events = new EventEmitter(); + let { logger, update } = Vault.scope; this.#privates.set("events", events); let changed = _debounce(async (secret) => { try { // feedback - scope.logger.debug(`Secret "${secret.key}" changed`); + logger.debug(`Secret "${secret.key}" changed`); // update item in database - await scope.update(this._id, this); + await update(this._id, this); } catch (err) { - scope.logger.warn(err, `Could not update secret value. (${obj._id}) ${secret.key}=${secret.value}`); + logger.warn(err, `Could not update secret value. (${obj._id}) ${secret.key}=${secret.value}`); } finally { diff --git a/components/vault/index.js b/components/vault/index.js index 485b193..f3f2d39 100644 --- a/components/vault/index.js +++ b/components/vault/index.js @@ -31,7 +31,9 @@ class C_VAULT extends COMPONENT { constructor() { // inject logger, collection and schema object - super("vault", Vault.schema(), module); + super("vault", Vault.schema(), [ + Vault + ]); this.hooks.pre("add", (data, next) => { try { @@ -56,7 +58,7 @@ class C_VAULT extends COMPONENT { }); this.hooks.post("add", (data, next) => { - next(null, new Vault(data, this)); + next(null, new Vault(data)); }); /* @@ -107,7 +109,7 @@ instance.init((scope, ready) => { } else { data = data.map((obj) => { - return new Vault(obj, scope); + return new Vault(obj); }); scope.items.push(...data); diff --git a/system/component/class.component.js b/system/component/class.component.js index 5d0a3e1..8fdd88e 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -45,10 +45,19 @@ const PENDING_CHANGE_EVENTS = new Set(); */ module.exports = class COMPONENT extends COMMON { - constructor(name, schema) { + constructor(name, schema, classes = []) { super(require("../../system/logger").create(name)); + classes.forEach((cls) => { + Object.defineProperty(cls, "scope", { + value: this, + writable: false, + enumerable: false, + configurable: false + }); + }); + // "secret" items array let items = []; From 467ca35a8051317717cd101d065e1d1aa536e56d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 23 Sep 2024 13:30:37 +0200 Subject: [PATCH 007/112] fix #491 --- system/{prevent_cross_load.js => !prevent_cross_load.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename system/{prevent_cross_load.js => !prevent_cross_load.js} (100%) diff --git a/system/prevent_cross_load.js b/system/!prevent_cross_load.js similarity index 100% rename from system/prevent_cross_load.js rename to system/!prevent_cross_load.js From ee1c658cf6e821778b08343ae23570fe6f2ea5b8 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 23 Sep 2024 19:55:12 +0200 Subject: [PATCH 008/112] use `iface.stream` instead `iface.write` --- components/endpoints/class.command.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index d68010f..d61ca38 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -97,21 +97,23 @@ module.exports = class Command { this.#privates.set("timeout", Number(process.env.COMMAND_RESPONSE_TIMEOUT)); // set default command handler worker function - this.#privates.set("handler", (cmd, iface, params, done) => { + this.#privates.set("handler", (cmd, { stream }, params, done) => { if (!cmd.payload) { done(new Error("NO_PAYLOAD_DEFINED")); return; } - iface.write(cmd.payload, (err) => { + // switched to `iface.stream.write` + // `.stream` should implement the needed adapter stack + stream.write(cmd.payload, (err) => { if (err) { done(err); } else { - iface.once("data", (chunk) => { + stream.once("data", (chunk) => { // read chunk //let chunk = iface.read(); From 56287bcd1d3e21523dcf0049b2cd76c3c2907d5a Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 23 Sep 2024 19:55:50 +0200 Subject: [PATCH 009/112] `iface` property added --- routes/router.api.devices.js | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/router.api.devices.js b/routes/router.api.devices.js index 1bf2f11..d2556a2 100644 --- a/routes/router.api.devices.js +++ b/routes/router.api.devices.js @@ -65,6 +65,7 @@ module.exports = (app, router) => { C_DEVICES.events.emit("socket", { uuid: req.query.uuid, + iface: req.params._iid, type: "response", socket: true, stream From 8bcc89ce859cad63a11571bc2b5452e888bf953f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 23 Sep 2024 19:57:31 +0200 Subject: [PATCH 010/112] impelmented `bridge()` requests --- components/devices/class.interface.js | 222 +++++++++++++++++++++++++- 1 file changed, 217 insertions(+), 5 deletions(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index f95a6a8..c9d53f6 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -1,7 +1,7 @@ const Joi = require("joi"); const { Agent } = require("http"); const mongodb = require("mongodb"); -const { Transform, Duplex } = require("stream"); +const { Duplex, PassThrough } = require("stream"); const { randomUUID } = require("crypto"); //const path = require("path"); @@ -40,6 +40,7 @@ module.exports = class Interface { // hide stream object on interface Object.defineProperty(this, "stream", { value: stream + //value: new InterfaceStream(this) }); // share/set interface stream @@ -49,12 +50,14 @@ module.exports = class Interface { interfaceStreams.set(this._id, stream); // hot fix for #350 + /* Object.defineProperty(this, "cachedAgent", { value: null, enumerable: false, configurable: false, writable: true }); + */ } @@ -214,6 +217,7 @@ module.exports = class Interface { // NEW VERSION, fix for #329 + /* httpAgent(options = {}) { if (this.cachedAgent) { @@ -242,7 +246,7 @@ module.exports = class Interface { agent.reuseSocket = (socket, request) => { console.log("agent.reuseSocket called"); }; - */ + * agent.createConnection = ({ headers = {} }) => { @@ -262,7 +266,7 @@ module.exports = class Interface { throw new Error(msg); } - */ + * //let readable = new PassThrough(); //let writable = new PassThrough(); @@ -336,7 +340,7 @@ module.exports = class Interface { } }); - */ + * let stream = new Duplex.from({ @@ -375,14 +379,138 @@ module.exports = class Interface { }; + /* + agent.createConnection = () => { + + let readable = new PassThrough(); + let writable = new PassThrough(); + + let stream = new Duplex.from({ + readable, + writable + }); + + stream.destroy = () => { }; + stream.ref = () => { }; + stream.unref = () => { }; + stream.setKeepAlive = () => { }; + stream.setTimeout = () => { }; + stream.setNoDelay = () => { }; + + Interface.socket({ + iface: this, + events: this.scope.events + }, (err, socket) => { + if (err) { + + stream.emit("error", err); + + } else { + + writable.pipe(socket) + socket.pipe(readable); + + } + }); + + return stream; + + }; + * + this.cachedAgent = agent; return agent; } + */ + + httpAgent(options = {}) { + + options = Object.assign({ + keepAlive: true, + maxSockets: 1, + }, options); + + let agent = new Agent(options); + + agent.createConnection = () => { + return this.bridge(); + }; + + return agent; + + } + + + bridge() { + + let readable = new PassThrough(); + let writable = new PassThrough(); + + let socket = new Duplex.from({ + readable, + writable + }); + + // TODO: destroy ws stream here + //socket.destroy = () => { }; + socket.ref = () => { }; + socket.unref = () => { }; + + // forward calls here to connector + // like socket request/response, use a `type=settings` + socket.setKeepAlive = () => { }; + socket.setTimeout = () => { }; + socket.setNoDelay = () => { }; + + // stream = WebSocket.createWebSocketStream + // see routes/router.api.device.js + Interface.socket(this._id, (err, stream) => { + if (err) { + + socket.emit("error", err); + + } else { + + if (process.env.NODE_ENV === "development") { + + let { logger } = Interface.scope; + let { host, port, socket: proto } = this.settings; + + socket.once("open", () => { + logger.debug(`Bridge open: iface ${this._id} <-> ${proto}://${host}:${port}`); + }); + + socket.once("close", () => { + logger.debug(`Bridge closed: iface ${this._id} <-> ${proto}://${host}:${port}`); + }); + + } + + writable.pipe(stream); + stream.pipe(readable); + + socket.destroy = () => { + stream.destroy(); + }; + + socket.emit("open", stream); + + stream.once("close", () => { + socket.emit("close"); + }); + + } + }); + + return socket; + + } // bridge methods connects adapter with the underlaying network socket // create a `.socket()` method that returns the palin websocket stream + /* static _bridge({ device, interface: iface, events }, cb) { return promisfy((done) => { @@ -432,7 +560,7 @@ module.exports = class Interface { }); console.log("stream", stream) - */ + * caller(stream); @@ -450,6 +578,90 @@ module.exports = class Interface { }, cb); } + */ + + static socket(iface, cb) { + return promisfy((done) => { + + let cleanup = () => { }; + + // timeout after certain time + // no connector available, not mocks or whatever reaseon + // TODO: Make Socket time configurable + let caller = timeout(5000, (timedout, duration, args) => { + if (timedout) { + + // removes pending event listnener + // which may never triggers + cleanup(); + + // pass timeot error + done(new Error("TIMEDOUT")); + + } else { + + // resolve with socket + done(null, args[0]); + + } + }); + + // returns removeHandler function + // cleanup registered event handler + // otherwise "MaxListenersExceededWarning: Possible EventEmitter memory leak" + cleanup = Interface.createBridge(iface, caller); + + }, cb); + } + + + static createBridgeRequest(iface) { + return { + iface, + type: "request", + uuid: randomUUID(), + socket: true // TODO: remove, unecessary + // NOTE: add a "options" object for net/udp options? + }; + } + + static parseBridgeRequest(request, cb) { + return ({ uuid, iface, type, socket, stream }) => { + // TODO: remove `socket` property + if (uuid === request.uuid && iface === request.iface && type === "response" && socket) { + + cb(stream); + + } + }; + } + + static createBridge(iface, cb) { + + let { events } = Interface.scope; + let request = Interface.createBridgeRequest(iface); + + let handler = Interface.parseBridgeRequest(request, (socket) => { + events.off("socket", handler); + process.nextTick(cb, socket); + }); + + events.emit("socket", request); + events.on("socket", handler); + + return function removeHandler() { + + // NOTE: + // when pending sockets are somehwere stored + // here could they be removed, if needed + + // remove handler, which is never "resolves" + // Interface.parseBridgeRequest cb is never fired + events.off("socket", handler); + + }; + + } }; \ No newline at end of file From ffb84bb4ea9b9ef37a38192e3584938e9e805dfb Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 24 Sep 2024 16:06:22 +0200 Subject: [PATCH 011/112] comment added --- components/endpoints/class.command.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index d61ca38..2043ca1 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -113,6 +113,11 @@ module.exports = class Command { } else { + + // NOTE: define timeout here + // timeout sould only apply when the data was written + // not when `.trigger()` was called, see #500 + stream.once("data", (chunk) => { // read chunk From f7ae29cf342767ce76cda69f2895c9182c22d6f9 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 24 Sep 2024 18:48:25 +0200 Subject: [PATCH 012/112] logging added & timeout configurable --- components/devices/class.interface.js | 6 ++++-- index.js | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index c9d53f6..81476e6 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -587,10 +587,12 @@ module.exports = class Interface { // timeout after certain time // no connector available, not mocks or whatever reaseon - // TODO: Make Socket time configurable - let caller = timeout(5000, (timedout, duration, args) => { + let caller = timeout(Number(process.env.CONNECT_TIMEOUT), (timedout, duration, args) => { if (timedout) { + let { logger } = Interface.scope; + logger.warn(`Connection attempt timedout for interface "${iface}"`); + // removes pending event listnener // which may never triggers cleanup(); diff --git a/index.js b/index.js index c1cea04..db34209 100644 --- a/index.js +++ b/index.js @@ -57,7 +57,8 @@ process.env = Object.assign({ USERS_JWT_ALGORITHM: "HS384", MQTT_BROKER_VERSION: "4", MQTT_CLIENT_ID: "OpenHaus", - MQTT_PING_INTERVAL: "5000" + MQTT_PING_INTERVAL: "5000", + CONNECT_TIMEOUT: "10000" }, env.parsed, process.env); From d19cd2878b25df3882e9eb294740c5826becbb63 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 24 Sep 2024 19:06:17 +0200 Subject: [PATCH 013/112] fix #340 --- components/devices/class.interface.js | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index 81476e6..73269ce 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -1,5 +1,7 @@ const Joi = require("joi"); const { Agent } = require("http"); +const https = require("https"); +const tls = require("tls"); const mongodb = require("mongodb"); const { Duplex, PassThrough } = require("stream"); const { randomUUID } = require("crypto"); @@ -442,6 +444,33 @@ module.exports = class Interface { } + httpsAgent(options = {}) { + + options = Object.assign({ + keepAlive: true, + maxSockets: 1, + }, options); + + let agent = new https.Agent(options); + + agent.createConnection = () => { + + let socket = this.bridge(); + let { host, port } = this.settings; + + return tls.connect({ + socket, + host, + port, + ...options + }); + + }; + + return agent; + + } + bridge() { From d4d4ff86f945407cc30188986125b6d33375c53b Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 4 Oct 2024 16:28:34 +0200 Subject: [PATCH 014/112] added, fix #487 --- routes/router.api.events.js | 21 +++++++++++++-- system/component/class.base.js | 8 +++--- system/component/class.common.js | 7 ++--- system/component/class.component.js | 2 +- system/component/class.events.js | 42 +++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 system/component/class.events.js diff --git a/routes/router.api.events.js b/routes/router.api.events.js index 83c0494..93005d7 100644 --- a/routes/router.api.events.js +++ b/routes/router.api.events.js @@ -2,6 +2,8 @@ const WebSocket = require("ws"); const path = require("path"); const fs = require("fs"); +const { emitter, emitted } = require("../system/component/class.events.js"); + module.exports = (app, router) => { let wss = new WebSocket.Server({ @@ -39,10 +41,23 @@ module.exports = (app, router) => { ]; */ + emitter.on(emitted, (obj) => { + wss.clients.forEach((client) => { + + let { readyState, filter } = client; + let { event, component } = obj; + + if (readyState === WebSocket.OPEN && filter.events.includes(event) && filter.components.includes(component)) { + client.send(JSON.stringify(obj)); + } + + }); + }); + // fix #403 "Add missing components" let componentNames = fs.readdirSync(path.resolve(process.cwd(), "components")); - + /* function reemit(event, component) { return (...args) => { @@ -60,7 +75,7 @@ module.exports = (app, router) => { if (client.intents.includes(event) /*&& client.components.includes(component)* && client.readyState === WebSocket.OPEN) { client.send(obj); } - */ + * let { readyState, filter } = client; @@ -73,6 +88,7 @@ module.exports = (app, router) => { }; } + // create reemit more automaticly // TODO: loop over events defined in .events // https://nodejs.org/dist/latest-v16.x/docs/api/events.html#emittereventnames @@ -101,6 +117,7 @@ module.exports = (app, router) => { } }); + */ router.get("/", (req, res) => { diff --git a/system/component/class.base.js b/system/component/class.base.js index 6852a04..e99a037 100644 --- a/system/component/class.base.js +++ b/system/component/class.base.js @@ -1,7 +1,8 @@ const process = require("process"); -const events = require("events"); +//const events = require("events"); const Hooks = require("../class.hooks.js"); +const Events = require("./class.events.js"); /** * @description @@ -22,10 +23,11 @@ const Hooks = require("../class.hooks.js"); */ module.exports = class BASE { - constructor() { + constructor(name) { this.ready = false; - this.events = new events(); + this.events = new Events(name); this.hooks = new Hooks(); + // this.logger = ...? } // NOTE improve/change function name diff --git a/system/component/class.common.js b/system/component/class.common.js index c80ad6b..2d35f92 100644 --- a/system/component/class.common.js +++ b/system/component/class.common.js @@ -2,6 +2,7 @@ const _expose = require("../../helper/expose.js"); const BASE = require("./class.base.js"); +const Logger = require("../../system/logger"); const promisify = require("../../helper/promisify"); /** @@ -20,11 +21,11 @@ const promisify = require("../../helper/promisify"); */ module.exports = class COMMON extends BASE { - constructor(logger) { + constructor(name) { - super(); + super(name); - this.logger = logger; + this.logger = Logger.create(name); } diff --git a/system/component/class.component.js b/system/component/class.component.js index 8fdd88e..130253d 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -47,7 +47,7 @@ module.exports = class COMPONENT extends COMMON { constructor(name, schema, classes = []) { - super(require("../../system/logger").create(name)); + super(name); classes.forEach((cls) => { Object.defineProperty(cls, "scope", { diff --git a/system/component/class.events.js b/system/component/class.events.js new file mode 100644 index 0000000..b4b9488 --- /dev/null +++ b/system/component/class.events.js @@ -0,0 +1,42 @@ +const { EventEmitter } = require("events"); + +module.exports = class Events extends EventEmitter { + + static emitted = Symbol("emitted"); + static registered = Symbol("registerd"); + static emitter = new EventEmitter(); + + constructor(name) { + super(); + this.name = name; + this._registeredEvents = new Set(); + } + + emit(event, ...args) { + + // the idea behin this was that it is used for /api/events ws route + // but the static "side chain" emitter, can also be used + // the purpuse of it was to transfer events between workers + // see #6 when implmented + // also, the "scenes" component can use it to detect state changes, e.g. for triggers + if (!this._registeredEvents.has(event)) { + + this._registeredEvents.add(event); + + process.nextTick(() => { + super.emit(Events.registered, ...args); + }); + + } + + Events.emitter.emit(Events.emitted, { + component: this.name, + event, + args + }); + + return super.emit(event, ...args); + + } + +}; \ No newline at end of file From 3c80dfb65c9f98f200fad5781f1f8877e1468dc0 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 4 Oct 2024 17:21:49 +0200 Subject: [PATCH 015/112] added state value trigger --- components/scenes/class.trigger.js | 7 ++++--- components/scenes/trigger-types.js | 29 ++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/components/scenes/class.trigger.js b/components/scenes/class.trigger.js index 3f57e54..5406f83 100644 --- a/components/scenes/class.trigger.js +++ b/components/scenes/class.trigger.js @@ -58,7 +58,7 @@ module.exports = class Trigger { _id: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).default(() => { return String(new mongodb.ObjectId()); }), - type: Joi.string().valid("cronjob", "webhook"/*, "state", "scene"*/).required(), + type: Joi.string().valid("cronjob", "webhook", "state", /*"scene"*/).required(), enabled: Joi.boolean().default(true), //params: Joi.object().... timestamps: Joi.object({ @@ -80,15 +80,16 @@ module.exports = class Trigger { _id: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).required() }) }) - }/*,{ + }, { is: "state", then: Joi.object({ params: Joi.object({ _id: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).required(), threshold: Joi.alternatives(Joi.number(), Joi.string(), Joi.boolean()).required(), + lower: Joi.boolean().default(false) }) }) - },{ + }/*,{ is: "scene", then: Joi.object({ params: Joi.object({ diff --git a/components/scenes/trigger-types.js b/components/scenes/trigger-types.js index 335f1fc..63c6dab 100644 --- a/components/scenes/trigger-types.js +++ b/components/scenes/trigger-types.js @@ -1,6 +1,8 @@ const { Cron } = require("../../system/cronjob"); const cron = new Cron(); +const { emitter, emitted } = require("../../system/component/class.events.js"); + module.exports = { "cronjob": (trigger, params) => { @@ -9,15 +11,36 @@ module.exports = { }); }, - /* - "state": (trigger, { params }) => { + "state": (trigger, params) => { + // this should check for state changes of endpoints // requires a "eventbus" and some additionl code in endpoints // params.endpoint = endpoint object id // params.state = endpoint state object id // check if greater/lower than threshold or how to react? + + emitter.on(emitted, (obj) => { + if (obj.event === "state") { + + let match = 1; + + match &= obj.component === "endpoints"; + match &= obj.args[0]._id === params._id; + + if (params.lower) { + match &= obj.args[0].value <= params.threshold; + } else { + match &= obj.args[0].value >= params.threshold; + } + + if (match) { + trigger.fire(); + } + + } + }); + } - */ /* "webhook": (trigger, { param }) => { From 11ff6ea80583ac393d2167836f7fe2b976f1be43 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Sun, 6 Oct 2024 20:08:21 +0200 Subject: [PATCH 016/112] destory handling improved --- components/devices/class.interface.js | 40 +++++++++++++++------------ routes/router.api.devices.js | 6 ++++ 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index 73269ce..66c769a 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -474,6 +474,9 @@ module.exports = class Interface { bridge() { + let { logger } = Interface.scope; + let { host, port, socket: proto } = this.settings; + let readable = new PassThrough(); let writable = new PassThrough(); @@ -495,7 +498,7 @@ module.exports = class Interface { // stream = WebSocket.createWebSocketStream // see routes/router.api.device.js - Interface.socket(this._id, (err, stream) => { + Interface.socket(this._id, (err, stream, { uuid }) => { if (err) { socket.emit("error", err); @@ -504,32 +507,31 @@ module.exports = class Interface { if (process.env.NODE_ENV === "development") { - let { logger } = Interface.scope; - let { host, port, socket: proto } = this.settings; - socket.once("open", () => { - logger.debug(`Bridge open: iface ${this._id} <-> ${proto}://${host}:${port}`); + logger.debug(`Bridge open: iface ${this._id} <-> ${proto}://${host}:${port} (${uuid})`); }); socket.once("close", () => { - logger.debug(`Bridge closed: iface ${this._id} <-> ${proto}://${host}:${port}`); + logger.debug(`Bridge closed: iface ${this._id} <-> ${proto}://${host}:${port} (${uuid})`); }); } - writable.pipe(stream); - stream.pipe(readable); + stream.once("close", () => { - socket.destroy = () => { - stream.destroy(); - }; + // feedback + logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${uuid})`); - socket.emit("open", stream); + // destroy everything + socket.destroy(); + readable.destroy(); + writable.destroy(); - stream.once("close", () => { - socket.emit("close"); }); + writable.pipe(stream); + stream.pipe(readable); + } }); @@ -612,6 +614,7 @@ module.exports = class Interface { static socket(iface, cb) { return promisfy((done) => { + let { logger } = Interface.scope; let cleanup = () => { }; // timeout after certain time @@ -619,7 +622,7 @@ module.exports = class Interface { let caller = timeout(Number(process.env.CONNECT_TIMEOUT), (timedout, duration, args) => { if (timedout) { - let { logger } = Interface.scope; + // feedback logger.warn(`Connection attempt timedout for interface "${iface}"`); // removes pending event listnener @@ -631,8 +634,11 @@ module.exports = class Interface { } else { + // feedback + logger.debug(`Bridge created for interface "${iface}" (${args[1].uuid})`); + // resolve with socket - done(null, args[0]); + done(null, ...args); } }); @@ -674,7 +680,7 @@ module.exports = class Interface { let handler = Interface.parseBridgeRequest(request, (socket) => { events.off("socket", handler); - process.nextTick(cb, socket); + process.nextTick(cb, socket, request); }); events.emit("socket", request); diff --git a/routes/router.api.devices.js b/routes/router.api.devices.js index d2556a2..38146b8 100644 --- a/routes/router.api.devices.js +++ b/routes/router.api.devices.js @@ -63,6 +63,12 @@ module.exports = (app, router) => { let stream = WebSocket.createWebSocketStream(ws); + ws.once("close", (...args) => { + stream.emit("close", ...args); + stream.destroy(); + }); + + C_DEVICES.events.emit("socket", { uuid: req.query.uuid, iface: req.params._iid, From 8b6aeb0e93f858badeaaa1e5decc8d3b7207fe8d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 7 Oct 2024 13:36:56 +0200 Subject: [PATCH 017/112] fix #499 --- routes/router.system.backup.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/routes/router.system.backup.js b/routes/router.system.backup.js index dad9b84..16e6cd8 100644 --- a/routes/router.system.backup.js +++ b/routes/router.system.backup.js @@ -105,6 +105,16 @@ module.exports = (router) => { router.post("/import", async (req, res) => { + // NOTE: this also deletes .gitkeep + if (req.query?.truncate === "true") { + for (let file of await fs.promises.readdir(BASE_PATH)) { + await fs.promises.rm(path.join(BASE_PATH, file), { + recursive: true, + force: true + }); + } + } + const extract = tar.extract(); // NOTE: switch to `.once`? @@ -165,7 +175,7 @@ module.exports = (router) => { extract.on("entry", async (header, stream, next) => { if (header.name.startsWith("database/")) { - console.log("restartoe database collection", header); + console.log("restartoe database collection", header.name, header.size); let chunks = []; let name = header.name.replace("database/", ""); @@ -191,7 +201,7 @@ module.exports = (router) => { return; } - console.log("collection name", path.basename(name, ".json")); + //console.log("collection name", path.basename(name, ".json")); let collection = client.collection(path.basename(name, ".json")); @@ -213,17 +223,7 @@ module.exports = (router) => { } else if (header.name.startsWith("plugins/")) { - console.log("restroe plugin file", header); - - // NOTE: this also deletes .gitkeep - if (req.query?.truncate === "true") { - for (let file of await fs.promises.readdir(BASE_PATH)) { - await fs.promises.rm(path.join(BASE_PATH, file), { - recursive: true, - force: true - }); - } - } + console.log("restroe plugin file", header.name, header.size); let name = header.name.replace("plugins/", ""); From d48027c254e9847826631d6b99da235ac9f75d8f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 7 Oct 2024 13:37:24 +0200 Subject: [PATCH 018/112] fix #502 --- package-lock.json | 4493 +++++++++++++++++++++++++-------------------- 1 file changed, 2481 insertions(+), 2012 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa307e3..39c6f1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "backend", - "version": "2.2.0", + "version": "3.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "backend", - "version": "2.2.0", + "version": "3.0.0", "hasInstallScript": true, "license": "ISC", "dependencies": { @@ -42,640 +42,737 @@ "sinon": "^14.0.2" }, "engines": { - "node": ">=0.16.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/crc32/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - }, - "node_modules/@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } }, "node_modules/@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - }, "node_modules/@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - }, "node_modules/@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-crypto/util/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.423.0.tgz", - "integrity": "sha512-9nyilMrihznN7Y6T/dVhbg4YGsdk7szzShoyoSGwofOg61ugobnHbBvh0tPPOQcHhlzXvD8LZdOQ6Kd4KvNp/A==", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.423.0", - "@aws-sdk/credential-provider-node": "3.423.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-signing": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/region-config-resolver": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/protocol-http": "^3.0.5", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.423.0.tgz", - "integrity": "sha512-znIufHkwhCIePgaYciIs3x/+BpzR57CZzbCKHR9+oOvGyufEPPpUT5bFLvbwTgfiVkTjuk6sG/ES3U5Bc+xtrA==", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/region-config-resolver": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/protocol-http": "^3.0.5", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.423.0.tgz", - "integrity": "sha512-EcpkKu02QZbRX6dQE0u7a8RgWrn/5riz1qAlKd7rM8FZJpr/D6GGX8ZzWxjgp7pRUgfNvinTmIudDnyQY3v9Mg==", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.423.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-sdk-sts": "3.418.0", - "@aws-sdk/middleware-signing": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/region-config-resolver": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/protocol-http": "^3.0.5", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.664.0.tgz", + "integrity": "sha512-kOk4hIJy51xta2Tq2bNonHXdOZEZ3b3IdctxSYPtXMxATvhGPxEYm4reiIabDxBxWv+blF5qM54pBQXV/dsfrQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.664.0", + "@aws-sdk/client-sts": "3.664.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.664.0.tgz", + "integrity": "sha512-E0MObuGylqY2yf47bZZAFK+4+C13c4Cs3HobXgCV3+myoHaxxQHltQuGrapxWOiJJzNmABKEPjBcMnRWnZHXCQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.664.0.tgz", + "integrity": "sha512-VgnAnQwt88oj6OSnIEouvTKN8JI2PzcC3qWQSL87ZtzBSscfrSwbtBNqBxk6nQWwE7AlZuzvT7IN6loz6c7kGA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.664.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.664.0.tgz", + "integrity": "sha512-+kFS+B/U/thLi8yxYgKc7QFsababYrgrIkbVgTvSzudkzk5RIlDu753L/DfXqYOtecbc6WUwlTKA+Ltee3OVXg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.664.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.664.0.tgz", + "integrity": "sha512-QdfMpTpJqtpuFIFfUJEgJ+Rq/dO3I5iaViLKr9Zad4Gfi/GiRWTeXd4IvjcyRntB5GkyCak9RKMkxkECQavPJg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.664.0", + "@smithy/core": "^2.4.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.423.0.tgz", - "integrity": "sha512-FuuCOeUkAn3tZU2GUN3eUjs4AC88t5je4N5/NVbTaSN0e2FGf9PnN5nrwTKwaOGVLSe6/FvfudW01LZ/+PRQOQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.664.0.tgz", + "integrity": "sha512-wOWir00Ve38kSnkoP8CS8Vq4UqRSCSrHm7Nym1iAL0Hmf4hOQRcWXBKP08/dHpk4nt4+LqVd+dT8V2LhN7RCog==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.423.0", - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/client-cognito-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.418.0.tgz", - "integrity": "sha512-e74sS+x63EZUBO+HaI8zor886YdtmULzwKdctsZp5/37Xho1CVUNtEC+fYa69nigBD9afoiH33I4JggaHgrekQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.664.0.tgz", + "integrity": "sha512-95rE+9Voaco0nmKJrXqfJAxSSkSWqlBy76zomiZrUrv7YuijQtHCW8jte6v6UHAFAaBzgFsY7QqBxs15u9SM7g==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.423.0.tgz", - "integrity": "sha512-y/mutbiCU/4HGN/ChcNBhPaXo4pgg6lAcWyuMTSSfAR03hjoXe1cMwbPcUiEwzQrZ/+1yufLpZhmoiAWsgAkNw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.664.0.tgz", + "integrity": "sha512-svaPwVfWV3g/qjd4cYHTUyBtkdOwcVjC+tSj6EjoMrpZwGUXcCbYe04iU0ARZ6tuH/u3vySbTLOGjSa7g8o9Qw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.423.0.tgz", - "integrity": "sha512-7CsFWz8g7dQmblp57XzzxMirO4ClowGZIOwAheBkmk6q1XHbllcHFnbh2kdPyQQ0+JmjDg6waztIc7dY7Ycfvw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.664.0.tgz", + "integrity": "sha512-ykRLQi9gqY7xlgC33iEWyPMv19JDMpOqQfqb5zaV46NteT60ouBrS3WsCrDiwygF7HznGLpr0lpt17/C6Mq27g==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.418.0", - "@aws-sdk/credential-provider-process": "3.418.0", - "@aws-sdk/credential-provider-sso": "3.423.0", - "@aws-sdk/credential-provider-web-identity": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.664.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.423.0.tgz", - "integrity": "sha512-lygbGJJUnDpgo8OEqdoYd51BKkyBVQ1Catiua/m0aHvL+SCmVrHiYPQPawWYGxpH8X3DXdXa0nd0LkEaevrHRg==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.664.0.tgz", + "integrity": "sha512-JrLtx4tEtEzqYAmk+pz8B7QcBCNRN+lZAh3fbQox7q9YQaIELLM3MA6LM5kEp/uHop920MQvdhHOMtR5jjJqWA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "3.418.0", - "@aws-sdk/credential-provider-ini": "3.423.0", - "@aws-sdk/credential-provider-process": "3.418.0", - "@aws-sdk/credential-provider-sso": "3.423.0", - "@aws-sdk/credential-provider-web-identity": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-ini": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.418.0.tgz", - "integrity": "sha512-xPbdm2WKz1oH6pTkrJoUmr3OLuqvvcPYTQX0IIlc31tmDwDWPQjXGGFD/vwZGIZIkKaFpFxVMgAzfFScxox7dw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.664.0.tgz", + "integrity": "sha512-sQicIw/qWTsmMw8EUQNJXdrWV5SXaZc2zGdCQsQxhR6wwNO2/rZ5JmzdcwUADmleBVyPYk3KGLhcofF/qXT2Ng==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.423.0.tgz", - "integrity": "sha512-zAH68IjRMmW22USbsCVQ5Q6AHqhmWABwLbZAMocSGMasddTGv/nkA/nUiVCJ/B4LI3P81FoPQVrG5JxNmkNH0w==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.664.0.tgz", + "integrity": "sha512-r7m+XkTAvGT9nW4aHqjWOHcoo3EfUsXx6d9JJjWn/gnvdsvhobCJx8p621aR9WeSBUTKJg5+EXGhZF6awRdZGQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/client-sso": "3.423.0", - "@aws-sdk/token-providers": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/client-sso": "3.664.0", + "@aws-sdk/token-providers": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.418.0.tgz", - "integrity": "sha512-do7ang565n9p3dS1JdsQY01rUfRx8vkxQqz5M8OlcEHBNiCdi2PvSjNwcBdrv/FKkyIxZb0TImOfBSt40hVdxQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.664.0.tgz", + "integrity": "sha512-10ltP1BfSKRJVXd8Yr5oLbo+VSDskWbps0X3szSsxTk0Dju1xvkz7hoIjylWLvtGbvQ+yb2pmsJYKCudW/4DJg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.664.0" } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.423.0.tgz", - "integrity": "sha512-jsjIrnu+bVUz2lekcg9wxpPlO8jWd9q26MP/rRwdkm9LHqroICjZY7tIYqSJliVkeSyJHJ9pq/jNDceWhy6a0A==", - "optional": true, - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.423.0", - "@aws-sdk/client-sso": "3.423.0", - "@aws-sdk/client-sts": "3.423.0", - "@aws-sdk/credential-provider-cognito-identity": "3.423.0", - "@aws-sdk/credential-provider-env": "3.418.0", - "@aws-sdk/credential-provider-http": "3.423.0", - "@aws-sdk/credential-provider-ini": "3.423.0", - "@aws-sdk/credential-provider-node": "3.423.0", - "@aws-sdk/credential-provider-process": "3.418.0", - "@aws-sdk/credential-provider-sso": "3.423.0", - "@aws-sdk/credential-provider-web-identity": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.664.0.tgz", + "integrity": "sha512-9xxEyvZVsXvf0Dpm7eVYIrLiqOiNSWY8mAk594HldL/GYDokUzokA6NmZyQtCY2rYPSInB/4TCZ1tH4IeXRKeQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.664.0", + "@aws-sdk/client-sso": "3.664.0", + "@aws-sdk/client-sts": "3.664.0", + "@aws-sdk/credential-provider-cognito-identity": "3.664.0", + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-ini": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.418.0.tgz", - "integrity": "sha512-LrMTdzalkPw/1ujLCKPLwCGvPMCmT4P+vOZQRbSEVZPnlZk+Aj++aL/RaHou0jL4kJH3zl8iQepriBt4a7UvXQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.664.0.tgz", + "integrity": "sha512-4tCXJ+DZWTq38eLmFgnEmO8X4jfWpgPbWoCyVYpRHCPHq6xbrU65gfwS9jGx25L4YdEce641ChI9TKLryuUgRA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.418.0.tgz", - "integrity": "sha512-StKGmyPVfoO/wdNTtKemYwoJsqIl4l7oqarQY7VSf2Mp3mqaa+njLViHsQbirYpyqpgUEusOnuTlH5utxJ1NsQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.664.0.tgz", + "integrity": "sha512-eNykMqQuv7eg9pAcaLro44fscIe1VkFfhm+gYnlxd+PH6xqapRki1E68VHehnIptnVBdqnWfEqLUSLGm9suqhg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.418.0.tgz", - "integrity": "sha512-kKFrIQglBLUFPbHSDy1+bbe3Na2Kd70JSUC3QLMbUHmqipXN8KeXRfAj7vTv97zXl0WzG0buV++WcNwOm1rFjg==", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.418.0.tgz", - "integrity": "sha512-cW8ijrCTP+mgihvcq4+TbhAcE/we5lFl4ydRqvTdtcSnYQAVQADg47rnTScQiFsPFEB3NKq7BGeyTJF9MKolPA==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.664.0.tgz", + "integrity": "sha512-jq27WMZhm+dY8BWZ9Ipy3eXtZj0lJzpaKQE3A3tH5AOIlUV/gqrmnJ9CdqVVef4EJsq9Yil4ZzQjKKmPsxveQg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/middleware-signing": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.418.0.tgz", - "integrity": "sha512-onvs5KoYQE8OlOE740RxWBGtsUyVIgAo0CzRKOQO63ZEYqpL1Os+MS1CGzdNhvQnJgJruE1WW+Ix8fjN30zKPA==", - "optional": true, - "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.3.3", - "@smithy/util-middleware": "^2.0.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.418.0.tgz", - "integrity": "sha512-Jdcztg9Tal9SEAL0dKRrnpKrm6LFlWmAhvuwv0dQ7bNTJxIxyEFbpqdgy7mpQHsLVZgq1Aad/7gT/72c9igyZw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.664.0.tgz", + "integrity": "sha512-Kp5UwXwayO6d472nntiwgrxqay2KS9ozXNmKjQfDrUWbEzvgKI+jgKNMia8MMnjSxYoBGpQ1B8NGh8a6KMEJJg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@smithy/core": "^2.4.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.418.0.tgz", - "integrity": "sha512-lJRZ/9TjZU6yLz+mAwxJkcJZ6BmyYoIJVo1p5+BN//EFdEmC8/c0c9gXMRzfISV/mqWSttdtccpAyN4/goHTYA==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.664.0.tgz", + "integrity": "sha512-o/B8dg8K+9714RGYPgMxZgAChPe/MTSMkf/eHXTUFHNik5i1HgVKfac22njV2iictGy/6GhpFsKa1OWNYAkcUg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.0.12", - "@smithy/types": "^2.3.3", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.2", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.418.0.tgz", - "integrity": "sha512-9P7Q0VN0hEzTngy3Sz5eya2qEOEf0Q8qf1vB3um0gE6ID6EVAdz/nc/DztfN32MFxk8FeVBrCP5vWdoOzmd72g==", - "optional": true, - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.664.0.tgz", + "integrity": "sha512-dBAvXW2/6bAxidvKARFxyCY2uCynYBKRFN00NhS1T5ggxm3sUnuTpWw1DTjl02CVPkacBOocZf10h8pQbHSK8w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.664.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz", - "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.664.0.tgz", + "integrity": "sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.418.0.tgz", - "integrity": "sha512-sYSDwRTl7yE7LhHkPzemGzmIXFVHSsi3AQ1KeNEk84eBqxMHHcCc2kqklaBk2roXWe50QDgRMy1ikZUxvtzNHQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.664.0.tgz", + "integrity": "sha512-KrXoHz6zmAahVHkyWMRT+P6xJaxItgmklxEDrT+npsUB4d5C/lhw16Crcp9TDi828fiZK3GYKRAmmNhvmzvBNg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", + "@smithy/util-endpoints": "^2.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.418.0.tgz", - "integrity": "sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.664.0.tgz", + "integrity": "sha512-c/PV3+f1ss4PpskHbcOxTZ6fntV2oXy/xcDR9nW+kVaz5cM1G702gF0rvGLKPqoBwkj2rWGe6KZvEBeLzynTUQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/types": "^2.3.3", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.418.0.tgz", - "integrity": "sha512-BXMskXFtg+dmzSCgmnWOffokxIbPr1lFqa1D9kvM3l3IFRiFGx2IyDg+8MAhq11aPDLvoa/BDuQ0Yqma5izOhg==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.664.0.tgz", + "integrity": "sha512-l/m6KkgrTw1p/VTJTk0IoP9I2OnpWp3WbBgzxoNeh9cUcxTufIn++sBxKj5hhDql57LKWsckScG/MhFuH0vZZA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-sdk/types": "3.418.0", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -686,20 +783,12 @@ } } }, - "node_modules/@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", - "optional": true, - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -755,7 +844,9 @@ "version": "5.5.3", "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==", - "dev": true + "deprecated": "Please update to a newer version.", + "dev": true, + "license": "MIT" }, "node_modules/@hapi/hoek": { "version": "9.3.0", @@ -899,6 +990,7 @@ "resolved": "https://registry.npmjs.org/@postman/form-data/-/form-data-3.1.1.tgz", "integrity": "sha512-vjh8Q2a8S6UCm/KKs31XFJqEEgmbjBmpPNVV2eVav6905wyFAwaUOBGA1NPBI4ERH9MMZc6w0umFgM6WbEPMdg==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -913,6 +1005,7 @@ "resolved": "https://registry.npmjs.org/@postman/tough-cookie/-/tough-cookie-4.1.3-postman.1.tgz", "integrity": "sha512-txpgUqZOnWYnUHZpHjkfb0IwVH4qJmyq77pPnJLlfhMtdCLMFTEeQHlzQiK906aaNCe4NEB5fGJHo9uzGbFMeA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -924,10 +1017,11 @@ } }, "node_modules/@postman/tunnel-agent": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz", - "integrity": "sha512-k57fzmAZ2PJGxfOA4SGR05ejorHbVAa/84Hxh/2nAztjNXc4ZjOm9NUIk6/Z6LCrBvJZqjRZbN8e/nROVUPVdg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.4.tgz", + "integrity": "sha512-CJJlq8V7rNKhAw4sBfjixKpJW00SHqebqNUQKxMoepgeWZIbdPcD+rguRcivGhS4N12PymDcKgUgSD4rVC+RjQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -998,536 +1092,595 @@ "dev": true }, "node_modules/@smithy/abort-controller": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.10.tgz", - "integrity": "sha512-xn7PnFD3m4rQIG00h1lPuDVnC2QMtTFhzRLX3y56KkgFaCysS7vpNevNBgmNUtmJ4eVFc+66Zucwo2KDLdicOg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", + "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.11.tgz", - "integrity": "sha512-q97FnlUmbai1c4JlQJgLVBsvSxgV/7Nvg/JK76E1nRq/U5UM56Eqo3dn2fY7JibqgJLg4LPsGdwtIyqyOk35CQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz", + "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.0.13", - "@smithy/types": "^2.3.4", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.3", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.13.tgz", - "integrity": "sha512-/xe3wNoC4j+BeTemH9t2gSKLBfyZmk8LXB2pQm/TOEYi+QhBgT+PSolNDfNAhrR68eggNE17uOimsrnwSkCt4w==", + "node_modules/@smithy/core": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.8.tgz", + "integrity": "sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^2.0.13", - "@smithy/property-provider": "^2.0.11", - "@smithy/types": "^2.3.4", - "@smithy/url-parser": "^2.0.10", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.23", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.10.tgz", - "integrity": "sha512-3SSDgX2nIsFwif6m+I4+ar4KDcZX463Noes8ekBgQHitULiWvaDZX8XqPaRQSQ4bl1vbeVXHklJfv66MnVO+lw==", + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz", + "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.4", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.1.tgz", - "integrity": "sha512-bXyM8PBAIKxVV++2ZSNBEposTDjFQ31XWOdHED+2hWMNvJHUoQqFbECg/uhcVOa6vHie2/UnzIZfXBSTpDBnEw==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", + "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^3.0.6", - "@smithy/querystring-builder": "^2.0.10", - "@smithy/types": "^2.3.4", - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.10.tgz", - "integrity": "sha512-jSTf6uzPk/Vf+8aQ7tVXeHfjxe9wRXSCqIZcBymSDTf7/YrVxniBdpyN74iI8ZUOx/Pyagc81OK5FROLaEjbXQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz", + "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.10.tgz", - "integrity": "sha512-zw9p/zsmJ2cFcW4KMz3CJoznlbRvEA6HG2mvEaX5eAca5dq4VGI2MwPDTfmteC/GsnURS4ogoMQ0p6aHM2SDVQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz", + "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.12.tgz", - "integrity": "sha512-QRhJTo5TjG7oF7np6yY4ZO9GDKFVzU/GtcqUqyEa96bLHE3yZHgNmsolOQ97pfxPHmFhH4vDP//PdpAIN3uI1Q==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz", + "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/protocol-http": "^3.0.6", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.10.tgz", - "integrity": "sha512-O6m4puZc16xfenotZUHL4bRlMrwf4gTp+0I5l954M5KNd3dOK18P+FA/IIUgnXF/dX6hlCUcJkBp7nAzwrePKA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz", + "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-serde": "^2.0.10", - "@smithy/types": "^2.3.4", - "@smithy/url-parser": "^2.0.10", - "@smithy/util-middleware": "^2.0.3", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.13.tgz", - "integrity": "sha512-zuOva8xgWC7KYG8rEXyWIcZv2GWszO83DCTU6IKcf/FKu6OBmSE+EYv3EUcCGY+GfiwCX0EyJExC9Lpq9b0w5Q==", - "optional": true, - "dependencies": { - "@smithy/node-config-provider": "^2.0.13", - "@smithy/protocol-http": "^3.0.6", - "@smithy/service-error-classification": "^2.0.3", - "@smithy/types": "^2.3.4", - "@smithy/util-middleware": "^2.0.3", - "@smithy/util-retry": "^2.0.3", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.23.tgz", + "integrity": "sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/service-error-classification": "^3.0.7", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.10.tgz", - "integrity": "sha512-+A0AFqs768256H/BhVEsBF6HijFbVyAwYRVXY/izJFkTalVWJOp4JA0YdY0dpXQd+AlW0tzs+nMQCE1Ew+DcgQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", + "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.4.tgz", - "integrity": "sha512-MW0KNKfh8ZGLagMZnxcLJWPNXoKqW6XV/st5NnCBmmA2e2JhrUjU0AJ5Ca/yjTyNEKs3xH7AQDwp1YmmpEpmQQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz", + "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.13.tgz", - "integrity": "sha512-pPpLqYuJcOq1sj1EGu+DoZK47DUS4gepqSTNgRezmrjnzNlSU2/Dcc9Ebzs+WZ0Z5vXKazuE+k+NksFLo07/AA==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz", + "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.11", - "@smithy/shared-ini-file-loader": "^2.0.12", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.6.tgz", - "integrity": "sha512-NspvD3aCwiUNtoSTcVHz0RZz1tQ/SaRIe1KPF+r0mAdCZ9eWuhIeJT8ZNPYa1ITn7/Lgg64IyFjqPynZ8KnYQw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz", + "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/abort-controller": "^2.0.10", - "@smithy/protocol-http": "^3.0.6", - "@smithy/querystring-builder": "^2.0.10", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.5", + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.11.tgz", - "integrity": "sha512-kzuOadu6XvrnlF1iXofpKXYmo4oe19st9/DE8f5gHNaFepb4eTkR8gD8BSdTnNnv7lxfv6uOwZPg4VS6hemX1w==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz", + "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.6.tgz", - "integrity": "sha512-F0jAZzwznMmHaggiZgc7YoS08eGpmLvhVktY/Taz6+OAOHfyIqWSDNgFqYR+WHW9z5fp2XvY4mEUrQgYMQ71jw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz", + "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.10.tgz", - "integrity": "sha512-uujJGp8jzrrU1UHme8sUKEbawQTcTmUWsh8rbGXYD/lMwNLQ+9jQ9dMDWbbH9Hpoa9RER1BeL/38WzGrbpob2w==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz", + "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.10.tgz", - "integrity": "sha512-WSD4EU60Q8scacT5PIpx4Bahn6nWpt+MiYLcBkFt6fOj7AssrNeaNIU2Z0g40ftVmrwLcEOIKGX92ynbVDb3ZA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz", + "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.3.tgz", - "integrity": "sha512-b+m4QCHXb7oKAkM/jHwHrl5gpqhFoMTHF643L0/vAEkegrcUWyh1UjyoHttuHcP5FnHVVy4EtpPtLkEYD+xMFw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz", + "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4" + "@smithy/types": "^3.5.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.12.tgz", - "integrity": "sha512-umi0wc4UBGYullAgYNUVfGLgVpxQyES47cnomTqzCKeKO5oudO4hyDNj+wzrOjqDFwK2nWYGVgS8Y0JgGietrw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz", + "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.10.tgz", - "integrity": "sha512-S6gcP4IXfO/VMswovrhxPpqvQvMal7ZRjM4NvblHSPpE5aNBYx67UkHFF3kg0hR3tJKqNpBGbxwq0gzpdHKLRA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz", + "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/eventstream-codec": "^2.0.10", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.4", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.3", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.9.tgz", - "integrity": "sha512-HTicQSn/lOcXKJT+DKJ4YMu51S6PzbWsO8Z6Pwueo30mSoFKXg5P0BDkg2VCDqCVR0mtddM/F6hKhjW6YAV/yg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.0.tgz", + "integrity": "sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/middleware-stack": "^2.0.4", - "@smithy/types": "^2.3.4", - "@smithy/util-stream": "^2.0.14", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/types": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.4.tgz", - "integrity": "sha512-D7xlM9FOMFyFw7YnMXn9dK2KuN6+JhnrZwVt1fWaIu8hCk5CigysweeIT/H/nCo4YV+s8/oqUdLfexbkPZtvqw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz", + "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.10.tgz", - "integrity": "sha512-4TXQFGjHcqru8aH5VRB4dSnOFKCYNX6SR1Do6fwxZ+ExT2onLsh2W77cHpks7ma26W5jv6rI1u7d0+KX9F0aOw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz", + "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^2.0.10", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.13.tgz", - "integrity": "sha512-UmmOdUzaQjqdsl1EjbpEaQxM0VDFqTj6zDuI26/hXN7L/a1k1koTwkYpogHMvunDX3fjrQusg5gv1Td4UsGyog==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.23.tgz", + "integrity": "sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/property-provider": "^2.0.11", - "@smithy/smithy-client": "^2.1.9", - "@smithy/types": "^2.3.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.15.tgz", - "integrity": "sha512-g6J7MHAibVPMTlXyH3mL+Iet4lMJKFVhsOhJmn+IKG81uy9m42CkRSDlwdQSJAcprLQBIaOPdFxNXQvrg2w1Uw==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.23.tgz", + "integrity": "sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/config-resolver": "^2.0.11", - "@smithy/credential-provider-imds": "^2.0.13", - "@smithy/node-config-provider": "^2.0.13", - "@smithy/property-provider": "^2.0.11", - "@smithy/smithy-client": "^2.1.9", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^3.0.9", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, + "node_modules/@smithy/util-endpoints": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz", + "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.3.tgz", - "integrity": "sha512-+FOCFYOxd2HO7v/0hkFSETKf7FYQWa08wh/x/4KUeoVBnLR4juw8Qi+TTqZI6E2h5LkzD9uOaxC9lAjrpVzaaA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz", + "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.3.tgz", - "integrity": "sha512-gw+czMnj82i+EaH7NL7XKkfX/ZKrCS2DIWwJFPKs76bMgkhf0y1C94Lybn7f8GkBI9lfIOUdPYtzm19zQOC8sw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz", + "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^2.0.3", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.14.tgz", - "integrity": "sha512-XjvlDYe+9DieXhLf7p+EgkXwFtl34kHZcWfHnc5KaILbhyVfDLWuqKTFx6WwCFqb01iFIig8trGwExRIqqkBYg==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz", + "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^2.2.1", - "@smithy/node-http-handler": "^2.1.6", - "@smithy/types": "^2.3.4", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "optional": true, "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@types/node": { @@ -1851,6 +2004,7 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } @@ -1860,36 +2014,41 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" }, "node_modules/b4a": { "version": "1.6.6", @@ -1944,6 +2103,7 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } @@ -1997,20 +2157,21 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -2023,6 +2184,7 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT", "optional": true }, "node_modules/brace-expansion": { @@ -2035,12 +2197,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -2051,6 +2214,7 @@ "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "dev": true, + "license": "MIT", "dependencies": { "base64-js": "^1.1.2" } @@ -2113,17 +2277,25 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2154,7 +2326,8 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/chalk": { "version": "4.1.2", @@ -2173,16 +2346,18 @@ } }, "node_modules/chardet": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.6.0.tgz", - "integrity": "sha512-+QOTw3otC4+FxdjK9RopGpNOglADbr4WPFi0SonkO99JbpkTPbMxmdm4NenhF5Zs+4gPXLI1+y2uazws5TMe8w==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.0.0.tgz", + "integrity": "sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==", + "dev": true, + "license": "MIT" }, "node_modules/charset": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -2247,10 +2422,11 @@ } }, "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -2311,6 +2487,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2319,10 +2496,11 @@ } }, "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } @@ -2364,17 +2542,19 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2440,6 +2620,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -2481,11 +2662,29 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -2508,6 +2707,7 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -2602,6 +2802,7 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -2626,9 +2827,10 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2642,6 +2844,27 @@ "once": "^1.4.0" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2654,7 +2877,8 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -2871,6 +3095,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2903,36 +3128,37 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -2956,7 +3182,8 @@ "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -3010,19 +3237,20 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "optional": true, "dependencies": { "strnum": "^1.0.5" @@ -3081,24 +3309,27 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/filesize": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.12.tgz", - "integrity": "sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.4.tgz", + "integrity": "sha512-ryBwPIIeErmxgPnm6cbESAzXjuEFubs+yKYLBZvg3CaiNcmkJChoOGcBSrZ6IwkMwPABwPpVXE6IlNdGJJrvEg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 10.4.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3107,12 +3338,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -3215,10 +3447,11 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" }, "node_modules/for-in": { "version": "1.0.2", @@ -3246,6 +3479,7 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } @@ -3262,6 +3496,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3303,9 +3538,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "3.0.2", @@ -3336,13 +3575,19 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3362,6 +3607,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } @@ -3474,6 +3720,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -3780,6 +4038,7 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -3801,6 +4060,7 @@ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, + "license": "ISC", "engines": { "node": ">=4" } @@ -3811,6 +4071,7 @@ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -3823,6 +4084,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -3839,10 +4101,35 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3855,6 +4142,18 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -3904,13 +4203,15 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/http-signature": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -3950,6 +4251,7 @@ "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-1.1.1.tgz", "integrity": "sha512-uhSZLPPD2VXXOSN8Cni3kIsoFHaU2pT/nySEU/fHr/ePbqHYr0jeiQRmUKLEirC09SFPsdMoA7LU7UXMd/w0Kw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.15.1" } @@ -4098,10 +4400,24 @@ "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", "dev": true }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -4182,6 +4498,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4223,7 +4540,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-unc-path": { "version": "1.0.0", @@ -4283,7 +4601,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/joi": { "version": "17.6.4", @@ -4298,10 +4617,11 @@ } }, "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", + "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } @@ -4310,7 +4630,8 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-sdsl": { "version": "4.1.5", @@ -4319,10 +4640,11 @@ "dev": true }, "node_modules/js-sha512": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", - "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", - "dev": true + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.9.0.tgz", + "integrity": "sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==", + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -4340,13 +4662,15 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -4364,7 +4688,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/jsonwebtoken": { "version": "9.0.0", @@ -4394,6 +4719,7 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4529,6 +4855,7 @@ "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=4" } @@ -4698,9 +5025,13 @@ "optional": true }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge2": { "version": "1.4.1", @@ -4720,12 +5051,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -4736,6 +5068,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -4756,6 +5089,7 @@ "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz", "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "charset": "^1.0.0" } @@ -4775,7 +5109,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimatch": { "version": "3.1.2", @@ -5098,32 +5433,34 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/newman": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/newman/-/newman-6.0.0.tgz", - "integrity": "sha512-QaANQC5b6ga348MezIVRI9ZmMs+cg3MdYIp0tSEauH2tmWOAR9+cghNsFJNjU9JPui3jJp1ALC7pQq6g3Jqpxw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/newman/-/newman-6.2.0.tgz", + "integrity": "sha512-CHo/wMv+Q9B3YcIJ18pdmY9XN9X8mc2hXso8yybeclV0BVPSFz1+P5vJELWg5DB/qJgxJOh+B+k+i9tTqfzcbw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@postman/tough-cookie": "4.1.3-postman.1", - "async": "3.2.4", - "chardet": "1.6.0", + "async": "3.2.5", + "chardet": "2.0.0", "cli-progress": "3.12.0", - "cli-table3": "0.6.3", + "cli-table3": "0.6.5", "colors": "1.4.0", - "commander": "11.0.0", + "commander": "11.1.0", "csv-parse": "4.16.3", - "filesize": "10.0.12", + "filesize": "10.1.4", "liquid-json": "0.3.1", "lodash": "4.17.21", "mkdirp": "3.0.1", - "postman-collection": "4.2.1", - "postman-collection-transformer": "4.1.7", - "postman-request": "2.88.1-postman.33", - "postman-runtime": "7.33.0", + "postman-collection": "4.5.0", + "postman-collection-transformer": "4.1.8", + "postman-request": "2.88.1-postman.39", + "postman-runtime": "7.41.2", "pretty-ms": "7.0.1", - "semver": "7.5.4", + "semver": "7.6.3", "serialised-error": "1.1.3", "word-wrap": "1.2.5", "xmlbuilder": "15.1.1" @@ -5150,6 +5487,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/newman/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/nise": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.2.tgz", @@ -5188,10 +5538,11 @@ "dev": true }, "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "0.0.1" } @@ -5220,11 +5571,22 @@ } } }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-oauth1": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/node-oauth1/-/node-oauth1-1.3.0.tgz", "integrity": "sha512-0yggixNfrA1KcBwvh/Hy2xAS1Wfs9dcg6TdFf2zN7gilcAigMdrtZ4ybrBSXBgLvGDw9V1p2MRnGBMq7XjTWLg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/nodemon": { "version": "3.0.1", @@ -5329,6 +5691,7 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } @@ -5346,14 +5709,19 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10.0" } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5540,6 +5908,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5598,9 +5967,10 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -5615,7 +5985,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picomatch": { "version": "2.3.1", @@ -5639,10 +6010,11 @@ } }, "node_modules/postman-collection": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.1.tgz", - "integrity": "sha512-DFLt3/yu8+ldtOTIzmBUctoupKJBOVK4NZO0t68K2lIir9smQg7OdQTBjOXYy+PDh7u0pSDvD66tm93eBHEPHA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz", + "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@faker-js/faker": "5.5.3", "file-type": "3.9.0", @@ -5653,7 +6025,7 @@ "mime-format": "2.0.1", "mime-types": "2.1.35", "postman-url-encoder": "3.0.5", - "semver": "7.5.4", + "semver": "7.6.3", "uuid": "8.3.2" }, "engines": { @@ -5661,10 +6033,11 @@ } }, "node_modules/postman-collection-transformer": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-4.1.7.tgz", - "integrity": "sha512-SxJkm/LnlFZs2splUBnS4jQFicgBptghpm4voHtNnaum3Ad64E2MHLV4fJhv58dVUmFwdSwdQUN3m2q0iLecnQ==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-4.1.8.tgz", + "integrity": "sha512-smJ6X7Z7kbg6hp7JZPFixrSN3J3WkQed7DrWCC5tF7IxOMpFLqhtTtGssY8nD1inP8+mJf+N72Pf2ttUAHgBKw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "commander": "8.3.0", "inherits": "2.0.4", @@ -5684,6 +6057,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } @@ -5693,6 +6067,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -5700,24 +6075,39 @@ "node": ">=0.10.0" } }, + "node_modules/postman-collection/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/postman-collection/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/postman-request": { - "version": "2.88.1-postman.33", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.33.tgz", - "integrity": "sha512-uL9sCML4gPH6Z4hreDWbeinKU0p0Ke261nU7OvII95NU22HN6Dk7T/SaVPaj6T4TsQqGKIFw6/woLZnH7ugFNA==", + "version": "2.88.1-postman.39", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.39.tgz", + "integrity": "sha512-rsncxxDlbn1YpygXSgJqbJzIjGlHFcZjbYDzeBPTQHMDfLuSTzZz735JHV8i1+lOROuJ7MjNap4eaSD3UijHzQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@postman/form-data": "~3.1.1", "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.3", + "@postman/tunnel-agent": "^0.6.4", "aws-sign2": "~0.7.0", "aws4": "^1.12.0", "brotli": "^1.3.3", @@ -5739,7 +6129,7 @@ "uuid": "^8.3.2" }, "engines": { - "node": ">= 6" + "node": ">= 16" } }, "node_modules/postman-request/node_modules/qs": { @@ -5747,6 +6137,7 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } @@ -5756,138 +6147,73 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/postman-runtime": { - "version": "7.33.0", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.33.0.tgz", - "integrity": "sha512-cYCb+5Y12FwZU/T3gOj2SKiOz38pisVLc0tdppb+ZlG7iqn5aLgxghJwhjG62pZCV6uixKiQX1hNdLSk9a9Xtw==", + "version": "7.41.2", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.41.2.tgz", + "integrity": "sha512-efKnii+yBfqZMRjV5zFh4VXogLeZB58HmLkgT+/sZcjglth23wzp+QRlkl4nbgcL2SZX6e5cLI2/aG2Of3wMyg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@postman/tough-cookie": "4.1.3-postman.1", - "async": "3.2.4", - "aws4": "1.12.0", + "async": "3.2.5", + "aws4": "1.13.1", "handlebars": "4.7.8", "httpntlm": "1.8.13", - "jose": "4.14.4", - "js-sha512": "0.8.0", + "jose": "5.6.3", + "js-sha512": "0.9.0", "lodash": "4.17.21", "mime-types": "2.1.35", + "node-forge": "1.3.1", "node-oauth1": "1.3.0", "performance-now": "2.1.0", - "postman-collection": "4.2.0", - "postman-request": "2.88.1-postman.33", - "postman-sandbox": "4.2.7", + "postman-collection": "4.5.0", + "postman-request": "2.88.1-postman.39", + "postman-sandbox": "5.1.1", "postman-url-encoder": "3.0.5", "serialised-error": "1.1.3", "strip-json-comments": "3.1.1", "uuid": "8.3.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/postman-runtime/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=16" } }, - "node_modules/postman-runtime/node_modules/postman-collection": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.0.tgz", - "integrity": "sha512-tvOLgN1h6Kab6dt43PmBoV5kYO/YUta3x0C2QqfmbzmHZe47VTpZ/+gIkGlbNhjKNPUUub5X6ehxYKoaTYdy1w==", + "node_modules/postman-runtime/node_modules/aws4": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz", + "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==", "dev": true, - "dependencies": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", - "uuid": "8.3.2" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, "node_modules/postman-runtime/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/postman-sandbox": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-4.2.7.tgz", - "integrity": "sha512-/EcCrKnb/o+9iLS4u+H76E0kBomJFjPptVjoDiq1uZ7Es/4aTv0MAX+0aoDxdDO+0h9sl8vy65uKQwyjN7AOaw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-5.1.1.tgz", + "integrity": "sha512-RfCTMwz3OaqhYYgtoe3VlHGiQl9hEmJ9sPh/XOlNcuvd/km6ARSFkKXFvQaLFsTHyXcHaqpInKaQSJi23uTynA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "lodash": "4.17.21", - "postman-collection": "4.2.0", + "postman-collection": "4.5.0", "teleport-javascript": "1.0.0", - "uvm": "2.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postman-sandbox/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postman-sandbox/node_modules/postman-collection": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.0.tgz", - "integrity": "sha512-tvOLgN1h6Kab6dt43PmBoV5kYO/YUta3x0C2QqfmbzmHZe47VTpZ/+gIkGlbNhjKNPUUub5X6ehxYKoaTYdy1w==", - "dev": true, - "dependencies": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", - "uuid": "8.3.2" + "uvm": "3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/postman-sandbox/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=16" } }, "node_modules/postman-url-encoder": { @@ -5895,6 +6221,7 @@ "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "punycode": "^2.1.1" }, @@ -5959,7 +6286,8 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pstree.remy": { "version": "1.1.8", @@ -5976,11 +6304,12 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -5993,7 +6322,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -6033,14 +6363,16 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -6143,7 +6475,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.1", @@ -6279,9 +6612,10 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -6301,16 +6635,27 @@ "node": ">= 0.8.0" } }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/serialised-error": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/serialised-error/-/serialised-error-1.1.3.tgz", "integrity": "sha512-vybp3GItaR1ZtO2nxZZo8eOo7fnVaNtP3XE2vJKgzkKR2bagCkdJ1EpYYhEMd3qu/80DwQk9KjsNSxE3fXWq0g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "object-hash": "^1.1.2", "stack-trace": "0.0.9", @@ -6323,6 +6668,7 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } @@ -6337,14 +6683,15 @@ } }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -6355,6 +6702,23 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6382,13 +6746,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6448,15 +6817,16 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -6465,6 +6835,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6479,16 +6850,17 @@ } }, "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -6540,6 +6912,7 @@ "resolved": "https://registry.npmjs.org/stream-length/-/stream-length-1.0.2.tgz", "integrity": "sha512-aI+qKFiwoDV4rsXiS7WRoCt+v2RX1nUj17+KJC5r2gfh5xoSJIfP6Y3Do/HtvesFcTSWthIuJ3l1cvKQY/+nZg==", "dev": true, + "license": "WTFPL", "dependencies": { "bluebird": "^2.6.2" } @@ -6604,6 +6977,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT", "optional": true }, "node_modules/supports-color": { @@ -6631,19 +7005,20 @@ } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/tar-stream": { @@ -6656,11 +7031,21 @@ "streamx": "^2.15.0" } }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/teleport-javascript": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/teleport-javascript/-/teleport-javascript-1.0.0.tgz", "integrity": "sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/text-table": { "version": "0.2.0", @@ -6673,6 +7058,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6721,16 +7107,18 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD", "optional": true }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/type-check": { "version": "0.4.0", @@ -6808,7 +7196,8 @@ "version": "1.12.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/underscore.string": { "version": "3.3.6", @@ -6828,6 +7217,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -6836,6 +7226,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6863,6 +7254,7 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -6882,31 +7274,31 @@ } }, "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/uvm": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-2.1.1.tgz", - "integrity": "sha512-BZ5w8adTpNNr+zczOBRpaX/hH8UPKAf7fmCnidrcsqt3bn8KT9bDIfuS7hgRU9RXgiN01su2pwysBONY6w8W5w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-3.0.0.tgz", + "integrity": "sha512-dATVpxsNfFBpHNdq6sy4/CV2UnoRbV8tvvkK0VrUPnm+o7dK6fnir4LEm8czeDdpbw2KKDKjIPcRSZY4AEwEZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "flatted": "3.2.6" + "flatted": "3.3.1" }, "engines": { - "node": ">=10" + "node": ">=16" } }, - "node_modules/uvm/node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, "node_modules/v8flags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", @@ -6935,6 +7327,7 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -6991,7 +7384,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workerpool": { "version": "6.2.0", @@ -7022,15 +7416,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -7134,586 +7529,598 @@ } }, "dependencies": { - "@aws-crypto/crc32": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", - "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", - "optional": true, - "requires": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - } - } - }, - "@aws-crypto/ie11-detection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", - "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", - "optional": true, - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - } - } - }, "@aws-crypto/sha256-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", - "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "optional": true, "requires": { - "@aws-crypto/ie11-detection": "^3.0.0", - "@aws-crypto/sha256-js": "^3.0.0", - "@aws-crypto/supports-web-crypto": "^3.0.0", - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "@aws-sdk/util-locate-window": "^3.0.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "optional": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "optional": true, + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "optional": true, + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } } } }, "@aws-crypto/sha256-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", - "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "optional": true, "requires": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - } + "tslib": "^2.6.2" } }, "@aws-crypto/supports-web-crypto": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", - "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "optional": true, "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true - } + "tslib": "^2.6.2" } }, "@aws-crypto/util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", - "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "optional": true, "requires": { "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" }, "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "optional": true + "@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "optional": true, + "requires": { + "tslib": "^2.6.2" + } + }, + "@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "optional": true, + "requires": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "optional": true, + "requires": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + } } } }, "@aws-sdk/client-cognito-identity": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.423.0.tgz", - "integrity": "sha512-9nyilMrihznN7Y6T/dVhbg4YGsdk7szzShoyoSGwofOg61ugobnHbBvh0tPPOQcHhlzXvD8LZdOQ6Kd4KvNp/A==", - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.423.0", - "@aws-sdk/credential-provider-node": "3.423.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-signing": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/region-config-resolver": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/protocol-http": "^3.0.5", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.664.0.tgz", + "integrity": "sha512-kOk4hIJy51xta2Tq2bNonHXdOZEZ3b3IdctxSYPtXMxATvhGPxEYm4reiIabDxBxWv+blF5qM54pBQXV/dsfrQ==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.664.0", + "@aws-sdk/client-sts": "3.664.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "@aws-sdk/client-sso": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.423.0.tgz", - "integrity": "sha512-znIufHkwhCIePgaYciIs3x/+BpzR57CZzbCKHR9+oOvGyufEPPpUT5bFLvbwTgfiVkTjuk6sG/ES3U5Bc+xtrA==", - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/region-config-resolver": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/protocol-http": "^3.0.5", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.664.0.tgz", + "integrity": "sha512-E0MObuGylqY2yf47bZZAFK+4+C13c4Cs3HobXgCV3+myoHaxxQHltQuGrapxWOiJJzNmABKEPjBcMnRWnZHXCQ==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/client-sso-oidc": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.664.0.tgz", + "integrity": "sha512-VgnAnQwt88oj6OSnIEouvTKN8JI2PzcC3qWQSL87ZtzBSscfrSwbtBNqBxk6nQWwE7AlZuzvT7IN6loz6c7kGA==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "@aws-sdk/client-sts": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.423.0.tgz", - "integrity": "sha512-EcpkKu02QZbRX6dQE0u7a8RgWrn/5riz1qAlKd7rM8FZJpr/D6GGX8ZzWxjgp7pRUgfNvinTmIudDnyQY3v9Mg==", - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.423.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-sdk-sts": "3.418.0", - "@aws-sdk/middleware-signing": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/region-config-resolver": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/protocol-http": "^3.0.5", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.664.0.tgz", + "integrity": "sha512-+kFS+B/U/thLi8yxYgKc7QFsababYrgrIkbVgTvSzudkzk5RIlDu753L/DfXqYOtecbc6WUwlTKA+Ltee3OVXg==", + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.664.0", + "@aws-sdk/core": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/middleware-host-header": "3.664.0", + "@aws-sdk/middleware-logger": "3.664.0", + "@aws-sdk/middleware-recursion-detection": "3.664.0", + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/region-config-resolver": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@aws-sdk/util-user-agent-browser": "3.664.0", + "@aws-sdk/util-user-agent-node": "3.664.0", + "@smithy/config-resolver": "^3.0.9", + "@smithy/core": "^2.4.7", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/hash-node": "^3.0.7", + "@smithy/invalid-dependency": "^3.0.7", + "@smithy/middleware-content-length": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.22", + "@smithy/util-defaults-mode-node": "^3.0.22", + "@smithy/util-endpoints": "^2.1.3", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "@aws-sdk/core": { + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.664.0.tgz", + "integrity": "sha512-QdfMpTpJqtpuFIFfUJEgJ+Rq/dO3I5iaViLKr9Zad4Gfi/GiRWTeXd4IvjcyRntB5GkyCak9RKMkxkECQavPJg==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.664.0", + "@smithy/core": "^2.4.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/signature-v4": "^4.2.0", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.423.0.tgz", - "integrity": "sha512-FuuCOeUkAn3tZU2GUN3eUjs4AC88t5je4N5/NVbTaSN0e2FGf9PnN5nrwTKwaOGVLSe6/FvfudW01LZ/+PRQOQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.664.0.tgz", + "integrity": "sha512-wOWir00Ve38kSnkoP8CS8Vq4UqRSCSrHm7Nym1iAL0Hmf4hOQRcWXBKP08/dHpk4nt4+LqVd+dT8V2LhN7RCog==", "optional": true, "requires": { - "@aws-sdk/client-cognito-identity": "3.423.0", - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/client-cognito-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-env": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.418.0.tgz", - "integrity": "sha512-e74sS+x63EZUBO+HaI8zor886YdtmULzwKdctsZp5/37Xho1CVUNtEC+fYa69nigBD9afoiH33I4JggaHgrekQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.664.0.tgz", + "integrity": "sha512-95rE+9Voaco0nmKJrXqfJAxSSkSWqlBy76zomiZrUrv7YuijQtHCW8jte6v6UHAFAaBzgFsY7QqBxs15u9SM7g==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-http": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.423.0.tgz", - "integrity": "sha512-y/mutbiCU/4HGN/ChcNBhPaXo4pgg6lAcWyuMTSSfAR03hjoXe1cMwbPcUiEwzQrZ/+1yufLpZhmoiAWsgAkNw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.664.0.tgz", + "integrity": "sha512-svaPwVfWV3g/qjd4cYHTUyBtkdOwcVjC+tSj6EjoMrpZwGUXcCbYe04iU0ARZ6tuH/u3vySbTLOGjSa7g8o9Qw==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-ini": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.423.0.tgz", - "integrity": "sha512-7CsFWz8g7dQmblp57XzzxMirO4ClowGZIOwAheBkmk6q1XHbllcHFnbh2kdPyQQ0+JmjDg6waztIc7dY7Ycfvw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.664.0.tgz", + "integrity": "sha512-ykRLQi9gqY7xlgC33iEWyPMv19JDMpOqQfqb5zaV46NteT60ouBrS3WsCrDiwygF7HznGLpr0lpt17/C6Mq27g==", "optional": true, "requires": { - "@aws-sdk/credential-provider-env": "3.418.0", - "@aws-sdk/credential-provider-process": "3.418.0", - "@aws-sdk/credential-provider-sso": "3.423.0", - "@aws-sdk/credential-provider-web-identity": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-node": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.423.0.tgz", - "integrity": "sha512-lygbGJJUnDpgo8OEqdoYd51BKkyBVQ1Catiua/m0aHvL+SCmVrHiYPQPawWYGxpH8X3DXdXa0nd0LkEaevrHRg==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.664.0.tgz", + "integrity": "sha512-JrLtx4tEtEzqYAmk+pz8B7QcBCNRN+lZAh3fbQox7q9YQaIELLM3MA6LM5kEp/uHop920MQvdhHOMtR5jjJqWA==", "optional": true, "requires": { - "@aws-sdk/credential-provider-env": "3.418.0", - "@aws-sdk/credential-provider-ini": "3.423.0", - "@aws-sdk/credential-provider-process": "3.418.0", - "@aws-sdk/credential-provider-sso": "3.423.0", - "@aws-sdk/credential-provider-web-identity": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-ini": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-process": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.418.0.tgz", - "integrity": "sha512-xPbdm2WKz1oH6pTkrJoUmr3OLuqvvcPYTQX0IIlc31tmDwDWPQjXGGFD/vwZGIZIkKaFpFxVMgAzfFScxox7dw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.664.0.tgz", + "integrity": "sha512-sQicIw/qWTsmMw8EUQNJXdrWV5SXaZc2zGdCQsQxhR6wwNO2/rZ5JmzdcwUADmleBVyPYk3KGLhcofF/qXT2Ng==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-sso": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.423.0.tgz", - "integrity": "sha512-zAH68IjRMmW22USbsCVQ5Q6AHqhmWABwLbZAMocSGMasddTGv/nkA/nUiVCJ/B4LI3P81FoPQVrG5JxNmkNH0w==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.664.0.tgz", + "integrity": "sha512-r7m+XkTAvGT9nW4aHqjWOHcoo3EfUsXx6d9JJjWn/gnvdsvhobCJx8p621aR9WeSBUTKJg5+EXGhZF6awRdZGQ==", "optional": true, "requires": { - "@aws-sdk/client-sso": "3.423.0", - "@aws-sdk/token-providers": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/client-sso": "3.664.0", + "@aws-sdk/token-providers": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.418.0.tgz", - "integrity": "sha512-do7ang565n9p3dS1JdsQY01rUfRx8vkxQqz5M8OlcEHBNiCdi2PvSjNwcBdrv/FKkyIxZb0TImOfBSt40hVdxQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.664.0.tgz", + "integrity": "sha512-10ltP1BfSKRJVXd8Yr5oLbo+VSDskWbps0X3szSsxTk0Dju1xvkz7hoIjylWLvtGbvQ+yb2pmsJYKCudW/4DJg==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/credential-providers": { - "version": "3.423.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.423.0.tgz", - "integrity": "sha512-jsjIrnu+bVUz2lekcg9wxpPlO8jWd9q26MP/rRwdkm9LHqroICjZY7tIYqSJliVkeSyJHJ9pq/jNDceWhy6a0A==", - "optional": true, - "requires": { - "@aws-sdk/client-cognito-identity": "3.423.0", - "@aws-sdk/client-sso": "3.423.0", - "@aws-sdk/client-sts": "3.423.0", - "@aws-sdk/credential-provider-cognito-identity": "3.423.0", - "@aws-sdk/credential-provider-env": "3.418.0", - "@aws-sdk/credential-provider-http": "3.423.0", - "@aws-sdk/credential-provider-ini": "3.423.0", - "@aws-sdk/credential-provider-node": "3.423.0", - "@aws-sdk/credential-provider-process": "3.418.0", - "@aws-sdk/credential-provider-sso": "3.423.0", - "@aws-sdk/credential-provider-web-identity": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.664.0.tgz", + "integrity": "sha512-9xxEyvZVsXvf0Dpm7eVYIrLiqOiNSWY8mAk594HldL/GYDokUzokA6NmZyQtCY2rYPSInB/4TCZ1tH4IeXRKeQ==", + "optional": true, + "requires": { + "@aws-sdk/client-cognito-identity": "3.664.0", + "@aws-sdk/client-sso": "3.664.0", + "@aws-sdk/client-sts": "3.664.0", + "@aws-sdk/credential-provider-cognito-identity": "3.664.0", + "@aws-sdk/credential-provider-env": "3.664.0", + "@aws-sdk/credential-provider-http": "3.664.0", + "@aws-sdk/credential-provider-ini": "3.664.0", + "@aws-sdk/credential-provider-node": "3.664.0", + "@aws-sdk/credential-provider-process": "3.664.0", + "@aws-sdk/credential-provider-sso": "3.664.0", + "@aws-sdk/credential-provider-web-identity": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/middleware-host-header": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.418.0.tgz", - "integrity": "sha512-LrMTdzalkPw/1ujLCKPLwCGvPMCmT4P+vOZQRbSEVZPnlZk+Aj++aL/RaHou0jL4kJH3zl8iQepriBt4a7UvXQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.664.0.tgz", + "integrity": "sha512-4tCXJ+DZWTq38eLmFgnEmO8X4jfWpgPbWoCyVYpRHCPHq6xbrU65gfwS9jGx25L4YdEce641ChI9TKLryuUgRA==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/middleware-logger": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.418.0.tgz", - "integrity": "sha512-StKGmyPVfoO/wdNTtKemYwoJsqIl4l7oqarQY7VSf2Mp3mqaa+njLViHsQbirYpyqpgUEusOnuTlH5utxJ1NsQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.664.0.tgz", + "integrity": "sha512-eNykMqQuv7eg9pAcaLro44fscIe1VkFfhm+gYnlxd+PH6xqapRki1E68VHehnIptnVBdqnWfEqLUSLGm9suqhg==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.418.0.tgz", - "integrity": "sha512-kKFrIQglBLUFPbHSDy1+bbe3Na2Kd70JSUC3QLMbUHmqipXN8KeXRfAj7vTv97zXl0WzG0buV++WcNwOm1rFjg==", - "optional": true, - "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-sdk-sts": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.418.0.tgz", - "integrity": "sha512-cW8ijrCTP+mgihvcq4+TbhAcE/we5lFl4ydRqvTdtcSnYQAVQADg47rnTScQiFsPFEB3NKq7BGeyTJF9MKolPA==", - "optional": true, - "requires": { - "@aws-sdk/middleware-signing": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/middleware-signing": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.418.0.tgz", - "integrity": "sha512-onvs5KoYQE8OlOE740RxWBGtsUyVIgAo0CzRKOQO63ZEYqpL1Os+MS1CGzdNhvQnJgJruE1WW+Ix8fjN30zKPA==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.664.0.tgz", + "integrity": "sha512-jq27WMZhm+dY8BWZ9Ipy3eXtZj0lJzpaKQE3A3tH5AOIlUV/gqrmnJ9CdqVVef4EJsq9Yil4ZzQjKKmPsxveQg==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.3.3", - "@smithy/util-middleware": "^2.0.2", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/middleware-user-agent": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.418.0.tgz", - "integrity": "sha512-Jdcztg9Tal9SEAL0dKRrnpKrm6LFlWmAhvuwv0dQ7bNTJxIxyEFbpqdgy7mpQHsLVZgq1Aad/7gT/72c9igyZw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.664.0.tgz", + "integrity": "sha512-Kp5UwXwayO6d472nntiwgrxqay2KS9ozXNmKjQfDrUWbEzvgKI+jgKNMia8MMnjSxYoBGpQ1B8NGh8a6KMEJJg==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@aws-sdk/util-endpoints": "3.664.0", + "@smithy/core": "^2.4.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/region-config-resolver": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.418.0.tgz", - "integrity": "sha512-lJRZ/9TjZU6yLz+mAwxJkcJZ6BmyYoIJVo1p5+BN//EFdEmC8/c0c9gXMRzfISV/mqWSttdtccpAyN4/goHTYA==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.664.0.tgz", + "integrity": "sha512-o/B8dg8K+9714RGYPgMxZgAChPe/MTSMkf/eHXTUFHNik5i1HgVKfac22njV2iictGy/6GhpFsKa1OWNYAkcUg==", "optional": true, "requires": { - "@smithy/node-config-provider": "^2.0.12", - "@smithy/types": "^2.3.3", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.2", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" } }, "@aws-sdk/token-providers": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.418.0.tgz", - "integrity": "sha512-9P7Q0VN0hEzTngy3Sz5eya2qEOEf0Q8qf1vB3um0gE6ID6EVAdz/nc/DztfN32MFxk8FeVBrCP5vWdoOzmd72g==", - "optional": true, - "requires": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.418.0", - "@aws-sdk/middleware-logger": "3.418.0", - "@aws-sdk/middleware-recursion-detection": "3.418.0", - "@aws-sdk/middleware-user-agent": "3.418.0", - "@aws-sdk/types": "3.418.0", - "@aws-sdk/util-endpoints": "3.418.0", - "@aws-sdk/util-user-agent-browser": "3.418.0", - "@aws-sdk/util-user-agent-node": "3.418.0", - "@smithy/config-resolver": "^2.0.10", - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/hash-node": "^2.0.9", - "@smithy/invalid-dependency": "^2.0.9", - "@smithy/middleware-content-length": "^2.0.11", - "@smithy/middleware-endpoint": "^2.0.9", - "@smithy/middleware-retry": "^2.0.12", - "@smithy/middleware-serde": "^2.0.9", - "@smithy/middleware-stack": "^2.0.2", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.5", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-body-length-browser": "^2.0.0", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.10", - "@smithy/util-defaults-mode-node": "^2.0.12", - "@smithy/util-retry": "^2.0.2", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.664.0.tgz", + "integrity": "sha512-dBAvXW2/6bAxidvKARFxyCY2uCynYBKRFN00NhS1T5ggxm3sUnuTpWw1DTjl02CVPkacBOocZf10h8pQbHSK8w==", + "optional": true, + "requires": { + "@aws-sdk/types": "3.664.0", + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/types": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.418.0.tgz", - "integrity": "sha512-y4PQSH+ulfFLY0+FYkaK4qbIaQI9IJNMO2xsxukW6/aNoApNymN1D2FSi2la8Qbp/iPjNDKsG8suNPm9NtsWXQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.664.0.tgz", + "integrity": "sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==", "optional": true, "requires": { - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@aws-sdk/util-endpoints": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.418.0.tgz", - "integrity": "sha512-sYSDwRTl7yE7LhHkPzemGzmIXFVHSsi3AQ1KeNEk84eBqxMHHcCc2kqklaBk2roXWe50QDgRMy1ikZUxvtzNHQ==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.664.0.tgz", + "integrity": "sha512-KrXoHz6zmAahVHkyWMRT+P6xJaxItgmklxEDrT+npsUB4d5C/lhw16Crcp9TDi828fiZK3GYKRAmmNhvmzvBNg==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", + "@smithy/util-endpoints": "^2.1.3", + "tslib": "^2.6.2" } }, "@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-browser": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.418.0.tgz", - "integrity": "sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.664.0.tgz", + "integrity": "sha512-c/PV3+f1ss4PpskHbcOxTZ6fntV2oXy/xcDR9nW+kVaz5cM1G702gF0rvGLKPqoBwkj2rWGe6KZvEBeLzynTUQ==", "optional": true, "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/types": "^2.3.3", + "@aws-sdk/types": "3.664.0", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-node": { - "version": "3.418.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.418.0.tgz", - "integrity": "sha512-BXMskXFtg+dmzSCgmnWOffokxIbPr1lFqa1D9kvM3l3IFRiFGx2IyDg+8MAhq11aPDLvoa/BDuQ0Yqma5izOhg==", - "optional": true, - "requires": { - "@aws-sdk/types": "3.418.0", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/types": "^2.3.3", - "tslib": "^2.5.0" - } - }, - "@aws-sdk/util-utf8-browser": { - "version": "3.259.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", - "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "version": "3.664.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.664.0.tgz", + "integrity": "sha512-l/m6KkgrTw1p/VTJTk0IoP9I2OnpWp3WbBgzxoNeh9cUcxTufIn++sBxKj5hhDql57LKWsckScG/MhFuH0vZZA==", "optional": true, "requires": { - "tslib": "^2.3.1" + "@aws-sdk/middleware-user-agent": "3.664.0", + "@aws-sdk/types": "3.664.0", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@colors/colors": { @@ -7896,9 +8303,9 @@ } }, "@postman/tunnel-agent": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz", - "integrity": "sha512-k57fzmAZ2PJGxfOA4SGR05ejorHbVAa/84Hxh/2nAztjNXc4ZjOm9NUIk6/Z6LCrBvJZqjRZbN8e/nROVUPVdg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.4.tgz", + "integrity": "sha512-CJJlq8V7rNKhAw4sBfjixKpJW00SHqebqNUQKxMoepgeWZIbdPcD+rguRcivGhS4N12PymDcKgUgSD4rVC+RjQ==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -7969,436 +8376,451 @@ "dev": true }, "@smithy/abort-controller": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.10.tgz", - "integrity": "sha512-xn7PnFD3m4rQIG00h1lPuDVnC2QMtTFhzRLX3y56KkgFaCysS7vpNevNBgmNUtmJ4eVFc+66Zucwo2KDLdicOg==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", + "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/config-resolver": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.11.tgz", - "integrity": "sha512-q97FnlUmbai1c4JlQJgLVBsvSxgV/7Nvg/JK76E1nRq/U5UM56Eqo3dn2fY7JibqgJLg4LPsGdwtIyqyOk35CQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz", + "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", "optional": true, "requires": { - "@smithy/node-config-provider": "^2.0.13", - "@smithy/types": "^2.3.4", - "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.3", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" } }, - "@smithy/credential-provider-imds": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.13.tgz", - "integrity": "sha512-/xe3wNoC4j+BeTemH9t2gSKLBfyZmk8LXB2pQm/TOEYi+QhBgT+PSolNDfNAhrR68eggNE17uOimsrnwSkCt4w==", + "@smithy/core": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.8.tgz", + "integrity": "sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==", "optional": true, "requires": { - "@smithy/node-config-provider": "^2.0.13", - "@smithy/property-provider": "^2.0.11", - "@smithy/types": "^2.3.4", - "@smithy/url-parser": "^2.0.10", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.23", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, - "@smithy/eventstream-codec": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.10.tgz", - "integrity": "sha512-3SSDgX2nIsFwif6m+I4+ar4KDcZX463Noes8ekBgQHitULiWvaDZX8XqPaRQSQ4bl1vbeVXHklJfv66MnVO+lw==", + "@smithy/credential-provider-imds": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz", + "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", "optional": true, "requires": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.4", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "tslib": "^2.6.2" } }, "@smithy/fetch-http-handler": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.1.tgz", - "integrity": "sha512-bXyM8PBAIKxVV++2ZSNBEposTDjFQ31XWOdHED+2hWMNvJHUoQqFbECg/uhcVOa6vHie2/UnzIZfXBSTpDBnEw==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", + "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", "optional": true, "requires": { - "@smithy/protocol-http": "^3.0.6", - "@smithy/querystring-builder": "^2.0.10", - "@smithy/types": "^2.3.4", - "@smithy/util-base64": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/hash-node": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.10.tgz", - "integrity": "sha512-jSTf6uzPk/Vf+8aQ7tVXeHfjxe9wRXSCqIZcBymSDTf7/YrVxniBdpyN74iI8ZUOx/Pyagc81OK5FROLaEjbXQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz", + "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/invalid-dependency": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.10.tgz", - "integrity": "sha512-zw9p/zsmJ2cFcW4KMz3CJoznlbRvEA6HG2mvEaX5eAca5dq4VGI2MwPDTfmteC/GsnURS4ogoMQ0p6aHM2SDVQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz", + "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/is-array-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", - "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/middleware-content-length": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.12.tgz", - "integrity": "sha512-QRhJTo5TjG7oF7np6yY4ZO9GDKFVzU/GtcqUqyEa96bLHE3yZHgNmsolOQ97pfxPHmFhH4vDP//PdpAIN3uI1Q==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz", + "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", "optional": true, "requires": { - "@smithy/protocol-http": "^3.0.6", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/middleware-endpoint": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.10.tgz", - "integrity": "sha512-O6m4puZc16xfenotZUHL4bRlMrwf4gTp+0I5l954M5KNd3dOK18P+FA/IIUgnXF/dX6hlCUcJkBp7nAzwrePKA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz", + "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", "optional": true, "requires": { - "@smithy/middleware-serde": "^2.0.10", - "@smithy/types": "^2.3.4", - "@smithy/url-parser": "^2.0.10", - "@smithy/util-middleware": "^2.0.3", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" } }, "@smithy/middleware-retry": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.13.tgz", - "integrity": "sha512-zuOva8xgWC7KYG8rEXyWIcZv2GWszO83DCTU6IKcf/FKu6OBmSE+EYv3EUcCGY+GfiwCX0EyJExC9Lpq9b0w5Q==", - "optional": true, - "requires": { - "@smithy/node-config-provider": "^2.0.13", - "@smithy/protocol-http": "^3.0.6", - "@smithy/service-error-classification": "^2.0.3", - "@smithy/types": "^2.3.4", - "@smithy/util-middleware": "^2.0.3", - "@smithy/util-retry": "^2.0.3", - "tslib": "^2.5.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "optional": true - } + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.23.tgz", + "integrity": "sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==", + "optional": true, + "requires": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/service-error-classification": "^3.0.7", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "tslib": "^2.6.2", + "uuid": "^9.0.1" } }, "@smithy/middleware-serde": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.10.tgz", - "integrity": "sha512-+A0AFqs768256H/BhVEsBF6HijFbVyAwYRVXY/izJFkTalVWJOp4JA0YdY0dpXQd+AlW0tzs+nMQCE1Ew+DcgQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", + "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/middleware-stack": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.4.tgz", - "integrity": "sha512-MW0KNKfh8ZGLagMZnxcLJWPNXoKqW6XV/st5NnCBmmA2e2JhrUjU0AJ5Ca/yjTyNEKs3xH7AQDwp1YmmpEpmQQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz", + "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/node-config-provider": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.13.tgz", - "integrity": "sha512-pPpLqYuJcOq1sj1EGu+DoZK47DUS4gepqSTNgRezmrjnzNlSU2/Dcc9Ebzs+WZ0Z5vXKazuE+k+NksFLo07/AA==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz", + "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", "optional": true, "requires": { - "@smithy/property-provider": "^2.0.11", - "@smithy/shared-ini-file-loader": "^2.0.12", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/node-http-handler": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.6.tgz", - "integrity": "sha512-NspvD3aCwiUNtoSTcVHz0RZz1tQ/SaRIe1KPF+r0mAdCZ9eWuhIeJT8ZNPYa1ITn7/Lgg64IyFjqPynZ8KnYQw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz", + "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", "optional": true, "requires": { - "@smithy/abort-controller": "^2.0.10", - "@smithy/protocol-http": "^3.0.6", - "@smithy/querystring-builder": "^2.0.10", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.5", + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/property-provider": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.11.tgz", - "integrity": "sha512-kzuOadu6XvrnlF1iXofpKXYmo4oe19st9/DE8f5gHNaFepb4eTkR8gD8BSdTnNnv7lxfv6uOwZPg4VS6hemX1w==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz", + "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/protocol-http": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.6.tgz", - "integrity": "sha512-F0jAZzwznMmHaggiZgc7YoS08eGpmLvhVktY/Taz6+OAOHfyIqWSDNgFqYR+WHW9z5fp2XvY4mEUrQgYMQ71jw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz", + "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/querystring-builder": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.10.tgz", - "integrity": "sha512-uujJGp8jzrrU1UHme8sUKEbawQTcTmUWsh8rbGXYD/lMwNLQ+9jQ9dMDWbbH9Hpoa9RER1BeL/38WzGrbpob2w==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz", + "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/querystring-parser": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.10.tgz", - "integrity": "sha512-WSD4EU60Q8scacT5PIpx4Bahn6nWpt+MiYLcBkFt6fOj7AssrNeaNIU2Z0g40ftVmrwLcEOIKGX92ynbVDb3ZA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz", + "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/service-error-classification": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.3.tgz", - "integrity": "sha512-b+m4QCHXb7oKAkM/jHwHrl5gpqhFoMTHF643L0/vAEkegrcUWyh1UjyoHttuHcP5FnHVVy4EtpPtLkEYD+xMFw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz", + "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", "optional": true, "requires": { - "@smithy/types": "^2.3.4" + "@smithy/types": "^3.5.0" } }, "@smithy/shared-ini-file-loader": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.12.tgz", - "integrity": "sha512-umi0wc4UBGYullAgYNUVfGLgVpxQyES47cnomTqzCKeKO5oudO4hyDNj+wzrOjqDFwK2nWYGVgS8Y0JgGietrw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz", + "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/signature-v4": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.10.tgz", - "integrity": "sha512-S6gcP4IXfO/VMswovrhxPpqvQvMal7ZRjM4NvblHSPpE5aNBYx67UkHFF3kg0hR3tJKqNpBGbxwq0gzpdHKLRA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz", + "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", "optional": true, "requires": { - "@smithy/eventstream-codec": "^2.0.10", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.4", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.3", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/smithy-client": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.9.tgz", - "integrity": "sha512-HTicQSn/lOcXKJT+DKJ4YMu51S6PzbWsO8Z6Pwueo30mSoFKXg5P0BDkg2VCDqCVR0mtddM/F6hKhjW6YAV/yg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.0.tgz", + "integrity": "sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==", "optional": true, "requires": { - "@smithy/middleware-stack": "^2.0.4", - "@smithy/types": "^2.3.4", - "@smithy/util-stream": "^2.0.14", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", + "tslib": "^2.6.2" } }, "@smithy/types": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.4.tgz", - "integrity": "sha512-D7xlM9FOMFyFw7YnMXn9dK2KuN6+JhnrZwVt1fWaIu8hCk5CigysweeIT/H/nCo4YV+s8/oqUdLfexbkPZtvqw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz", + "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/url-parser": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.10.tgz", - "integrity": "sha512-4TXQFGjHcqru8aH5VRB4dSnOFKCYNX6SR1Do6fwxZ+ExT2onLsh2W77cHpks7ma26W5jv6rI1u7d0+KX9F0aOw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz", + "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", "optional": true, "requires": { - "@smithy/querystring-parser": "^2.0.10", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "optional": true, "requires": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/util-body-length-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", - "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/util-body-length-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", - "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/util-buffer-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", - "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "optional": true, "requires": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/util-config-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", - "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-browser": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.13.tgz", - "integrity": "sha512-UmmOdUzaQjqdsl1EjbpEaQxM0VDFqTj6zDuI26/hXN7L/a1k1koTwkYpogHMvunDX3fjrQusg5gv1Td4UsGyog==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.23.tgz", + "integrity": "sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==", "optional": true, "requires": { - "@smithy/property-provider": "^2.0.11", - "@smithy/smithy-client": "^2.1.9", - "@smithy/types": "^2.3.4", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-node": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.15.tgz", - "integrity": "sha512-g6J7MHAibVPMTlXyH3mL+Iet4lMJKFVhsOhJmn+IKG81uy9m42CkRSDlwdQSJAcprLQBIaOPdFxNXQvrg2w1Uw==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.23.tgz", + "integrity": "sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==", + "optional": true, + "requires": { + "@smithy/config-resolver": "^3.0.9", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.4.0", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + } + }, + "@smithy/util-endpoints": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz", + "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", "optional": true, "requires": { - "@smithy/config-resolver": "^2.0.11", - "@smithy/credential-provider-imds": "^2.0.13", - "@smithy/node-config-provider": "^2.0.13", - "@smithy/property-provider": "^2.0.11", - "@smithy/smithy-client": "^2.1.9", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/util-hex-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", - "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/util-middleware": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.3.tgz", - "integrity": "sha512-+FOCFYOxd2HO7v/0hkFSETKf7FYQWa08wh/x/4KUeoVBnLR4juw8Qi+TTqZI6E2h5LkzD9uOaxC9lAjrpVzaaA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz", + "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", "optional": true, "requires": { - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/util-retry": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.3.tgz", - "integrity": "sha512-gw+czMnj82i+EaH7NL7XKkfX/ZKrCS2DIWwJFPKs76bMgkhf0y1C94Lybn7f8GkBI9lfIOUdPYtzm19zQOC8sw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz", + "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", "optional": true, "requires": { - "@smithy/service-error-classification": "^2.0.3", - "@smithy/types": "^2.3.4", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" } }, "@smithy/util-stream": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.14.tgz", - "integrity": "sha512-XjvlDYe+9DieXhLf7p+EgkXwFtl34kHZcWfHnc5KaILbhyVfDLWuqKTFx6WwCFqb01iFIig8trGwExRIqqkBYg==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz", + "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", "optional": true, "requires": { - "@smithy/fetch-http-handler": "^2.2.1", - "@smithy/node-http-handler": "^2.1.6", - "@smithy/types": "^2.3.4", - "@smithy/util-base64": "^2.0.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" } }, "@smithy/util-uri-escape": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", - "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "optional": true, "requires": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "optional": true, "requires": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" } }, "@types/node": { @@ -8674,9 +9096,9 @@ "dev": true }, "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, "asynckit": { @@ -8692,9 +9114,9 @@ "dev": true }, "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "dev": true }, "b4a": { @@ -8770,20 +9192,20 @@ "dev": true }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "qs": "6.13.0", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } @@ -8804,12 +9226,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "brotli": { @@ -8861,12 +9283,15 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -8898,9 +9323,9 @@ } }, "chardet": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.6.0.tgz", - "integrity": "sha512-+QOTw3otC4+FxdjK9RopGpNOglADbr4WPFi0SonkO99JbpkTPbMxmdm4NenhF5Zs+4gPXLI1+y2uazws5TMe8w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.0.0.tgz", + "integrity": "sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==", "dev": true }, "charset": { @@ -8951,9 +9376,9 @@ } }, "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -9006,9 +9431,9 @@ } }, "commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "dev": true }, "compress-commons": { @@ -9042,14 +9467,14 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" }, "cookie-signature": { "version": "1.0.6", @@ -9129,6 +9554,16 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9243,9 +9678,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "end-of-stream": { "version": "1.4.4", @@ -9256,6 +9691,19 @@ "once": "^1.4.0" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9443,36 +9891,36 @@ } }, "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -9540,9 +9988,9 @@ "dev": true }, "fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "optional": true, "requires": { "strnum": "^1.0.5" @@ -9590,27 +10038,27 @@ "dev": true }, "filesize": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.12.tgz", - "integrity": "sha512-6RS9gDchbn+qWmtV2uSjo5vmKizgfCQeb5jKmqx8HyzA3MoLqqyQxN+QcjkGBJt7FjJ9qFce67Auyya5rRRbpw==", + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.4.tgz", + "integrity": "sha512-ryBwPIIeErmxgPnm6cbESAzXjuEFubs+yKYLBZvg3CaiNcmkJChoOGcBSrZ6IwkMwPABwPpVXE6IlNdGJJrvEg==", "dev": true }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -9688,9 +10136,9 @@ } }, "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "for-in": { @@ -9751,9 +10199,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "gauge": { "version": "3.0.2", @@ -9778,13 +10226,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "getobject": { @@ -9882,6 +10332,14 @@ "slash": "^3.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -10155,6 +10613,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -10165,6 +10624,19 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -10175,6 +10647,14 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -10340,10 +10820,21 @@ "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==", "dev": true }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "dependencies": { + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + } + } }, "ipaddr.js": { "version": "1.9.1", @@ -10492,9 +10983,9 @@ } }, "jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", + "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", "dev": true }, "js-md4": { @@ -10510,9 +11001,9 @@ "dev": true }, "js-sha512": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", - "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.9.0.tgz", + "integrity": "sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==", "dev": true }, "js-yaml": { @@ -10830,9 +11321,9 @@ "optional": true }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge2": { "version": "1.4.1", @@ -10846,12 +11337,12 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -11133,29 +11624,29 @@ "dev": true }, "newman": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/newman/-/newman-6.0.0.tgz", - "integrity": "sha512-QaANQC5b6ga348MezIVRI9ZmMs+cg3MdYIp0tSEauH2tmWOAR9+cghNsFJNjU9JPui3jJp1ALC7pQq6g3Jqpxw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/newman/-/newman-6.2.0.tgz", + "integrity": "sha512-CHo/wMv+Q9B3YcIJ18pdmY9XN9X8mc2hXso8yybeclV0BVPSFz1+P5vJELWg5DB/qJgxJOh+B+k+i9tTqfzcbw==", "dev": true, "requires": { "@postman/tough-cookie": "4.1.3-postman.1", - "async": "3.2.4", - "chardet": "1.6.0", + "async": "3.2.5", + "chardet": "2.0.0", "cli-progress": "3.12.0", - "cli-table3": "0.6.3", + "cli-table3": "0.6.5", "colors": "1.4.0", - "commander": "11.0.0", + "commander": "11.1.0", "csv-parse": "4.16.3", - "filesize": "10.0.12", + "filesize": "10.1.4", "liquid-json": "0.3.1", "lodash": "4.17.21", "mkdirp": "3.0.1", - "postman-collection": "4.2.1", - "postman-collection-transformer": "4.1.7", - "postman-request": "2.88.1-postman.33", - "postman-runtime": "7.33.0", + "postman-collection": "4.5.0", + "postman-collection-transformer": "4.1.8", + "postman-request": "2.88.1-postman.39", + "postman-runtime": "7.41.2", "pretty-ms": "7.0.1", - "semver": "7.5.4", + "semver": "7.6.3", "serialised-error": "1.1.3", "word-wrap": "1.2.5", "xmlbuilder": "15.1.1" @@ -11166,6 +11657,12 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true } } }, @@ -11209,9 +11706,9 @@ "dev": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, "requires": { "isarray": "0.0.1" @@ -11232,6 +11729,12 @@ "whatwg-url": "^5.0.0" } }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, "node-oauth1": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/node-oauth1/-/node-oauth1-1.3.0.tgz", @@ -11331,9 +11834,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, "object.defaults": { "version": "1.1.0", @@ -11512,9 +12015,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "path-type": { "version": "4.0.0", @@ -11541,9 +12044,9 @@ "dev": true }, "postman-collection": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.1.tgz", - "integrity": "sha512-DFLt3/yu8+ldtOTIzmBUctoupKJBOVK4NZO0t68K2lIir9smQg7OdQTBjOXYy+PDh7u0pSDvD66tm93eBHEPHA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz", + "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==", "dev": true, "requires": { "@faker-js/faker": "5.5.3", @@ -11555,7 +12058,7 @@ "mime-format": "2.0.1", "mime-types": "2.1.35", "postman-url-encoder": "3.0.5", - "semver": "7.5.4", + "semver": "7.6.3", "uuid": "8.3.2" }, "dependencies": { @@ -11568,6 +12071,12 @@ "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -11577,9 +12086,9 @@ } }, "postman-collection-transformer": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-4.1.7.tgz", - "integrity": "sha512-SxJkm/LnlFZs2splUBnS4jQFicgBptghpm4voHtNnaum3Ad64E2MHLV4fJhv58dVUmFwdSwdQUN3m2q0iLecnQ==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/postman-collection-transformer/-/postman-collection-transformer-4.1.8.tgz", + "integrity": "sha512-smJ6X7Z7kbg6hp7JZPFixrSN3J3WkQed7DrWCC5tF7IxOMpFLqhtTtGssY8nD1inP8+mJf+N72Pf2ttUAHgBKw==", "dev": true, "requires": { "commander": "8.3.0", @@ -11598,14 +12107,14 @@ } }, "postman-request": { - "version": "2.88.1-postman.33", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.33.tgz", - "integrity": "sha512-uL9sCML4gPH6Z4hreDWbeinKU0p0Ke261nU7OvII95NU22HN6Dk7T/SaVPaj6T4TsQqGKIFw6/woLZnH7ugFNA==", + "version": "2.88.1-postman.39", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.39.tgz", + "integrity": "sha512-rsncxxDlbn1YpygXSgJqbJzIjGlHFcZjbYDzeBPTQHMDfLuSTzZz735JHV8i1+lOROuJ7MjNap4eaSD3UijHzQ==", "dev": true, "requires": { "@postman/form-data": "~3.1.1", "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.3", + "@postman/tunnel-agent": "^0.6.4", "aws-sign2": "~0.7.0", "aws4": "^1.12.0", "brotli": "^1.3.3", @@ -11642,58 +12151,37 @@ } }, "postman-runtime": { - "version": "7.33.0", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.33.0.tgz", - "integrity": "sha512-cYCb+5Y12FwZU/T3gOj2SKiOz38pisVLc0tdppb+ZlG7iqn5aLgxghJwhjG62pZCV6uixKiQX1hNdLSk9a9Xtw==", + "version": "7.41.2", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.41.2.tgz", + "integrity": "sha512-efKnii+yBfqZMRjV5zFh4VXogLeZB58HmLkgT+/sZcjglth23wzp+QRlkl4nbgcL2SZX6e5cLI2/aG2Of3wMyg==", "dev": true, "requires": { "@postman/tough-cookie": "4.1.3-postman.1", - "async": "3.2.4", - "aws4": "1.12.0", + "async": "3.2.5", + "aws4": "1.13.1", "handlebars": "4.7.8", "httpntlm": "1.8.13", - "jose": "4.14.4", - "js-sha512": "0.8.0", + "jose": "5.6.3", + "js-sha512": "0.9.0", "lodash": "4.17.21", "mime-types": "2.1.35", + "node-forge": "1.3.1", "node-oauth1": "1.3.0", "performance-now": "2.1.0", - "postman-collection": "4.2.0", - "postman-request": "2.88.1-postman.33", - "postman-sandbox": "4.2.7", + "postman-collection": "4.5.0", + "postman-request": "2.88.1-postman.39", + "postman-sandbox": "5.1.1", "postman-url-encoder": "3.0.5", "serialised-error": "1.1.3", "strip-json-comments": "3.1.1", "uuid": "8.3.2" }, "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "postman-collection": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.0.tgz", - "integrity": "sha512-tvOLgN1h6Kab6dt43PmBoV5kYO/YUta3x0C2QqfmbzmHZe47VTpZ/+gIkGlbNhjKNPUUub5X6ehxYKoaTYdy1w==", - "dev": true, - "requires": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", - "uuid": "8.3.2" - } + "aws4": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz", + "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==", + "dev": true }, "uuid": { "version": "8.3.2", @@ -11704,51 +12192,15 @@ } }, "postman-sandbox": { - "version": "4.2.7", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-4.2.7.tgz", - "integrity": "sha512-/EcCrKnb/o+9iLS4u+H76E0kBomJFjPptVjoDiq1uZ7Es/4aTv0MAX+0aoDxdDO+0h9sl8vy65uKQwyjN7AOaw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-5.1.1.tgz", + "integrity": "sha512-RfCTMwz3OaqhYYgtoe3VlHGiQl9hEmJ9sPh/XOlNcuvd/km6ARSFkKXFvQaLFsTHyXcHaqpInKaQSJi23uTynA==", "dev": true, "requires": { "lodash": "4.17.21", - "postman-collection": "4.2.0", + "postman-collection": "4.5.0", "teleport-javascript": "1.0.0", - "uvm": "2.1.1" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "postman-collection": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.2.0.tgz", - "integrity": "sha512-tvOLgN1h6Kab6dt43PmBoV5kYO/YUta3x0C2QqfmbzmHZe47VTpZ/+gIkGlbNhjKNPUUub5X6ehxYKoaTYdy1w==", - "dev": true, - "requires": { - "@faker-js/faker": "5.5.3", - "file-type": "3.9.0", - "http-reasons": "0.1.0", - "iconv-lite": "0.6.3", - "liquid-json": "0.3.1", - "lodash": "4.17.21", - "mime-format": "2.0.1", - "mime-types": "2.1.35", - "postman-url-encoder": "3.0.5", - "semver": "7.5.4", - "uuid": "8.3.2" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } + "uvm": "3.0.0" } }, "postman-url-encoder": { @@ -11813,11 +12265,11 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "querystringify": { @@ -11852,9 +12304,9 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -12012,9 +12464,9 @@ } }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -12031,6 +12483,11 @@ "statuses": "2.0.1" }, "dependencies": { + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -12067,14 +12524,14 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "set-blocking": { @@ -12082,6 +12539,19 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12103,13 +12573,14 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -12152,11 +12623,11 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "requires": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" } }, @@ -12176,15 +12647,14 @@ } }, "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -12288,16 +12758,23 @@ "dev": true }, "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + } } }, "tar-stream": { @@ -12362,9 +12839,9 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "optional": true }, "tweetnacl": { @@ -12484,25 +12961,17 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "uvm": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-2.1.1.tgz", - "integrity": "sha512-BZ5w8adTpNNr+zczOBRpaX/hH8UPKAf7fmCnidrcsqt3bn8KT9bDIfuS7hgRU9RXgiN01su2pwysBONY6w8W5w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-3.0.0.tgz", + "integrity": "sha512-dATVpxsNfFBpHNdq6sy4/CV2UnoRbV8tvvkK0VrUPnm+o7dK6fnir4LEm8czeDdpbw2KKDKjIPcRSZY4AEwEZA==", "dev": true, "requires": { - "flatted": "3.2.6" - }, - "dependencies": { - "flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - } + "flatted": "3.3.1" } }, "v8flags": { @@ -12596,9 +13065,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", - "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "requires": {} }, "xmlbuilder": { From 6139b50637948b595f4b3a2d3d88c8cb3eef2f51 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 7 Oct 2024 13:41:50 +0200 Subject: [PATCH 019/112] `.toString()` aded for chunk response test --- components/endpoints/class.command.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index 2043ca1..bc9aecf 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -125,7 +125,7 @@ module.exports = class Command { let regex = new RegExp(/success|ok|1|true/, "gimu"); // compare respond with command payload - if ((chunk && chunk === cmd.payload) || regex.test(chunk)) { + if ((chunk && chunk === cmd.payload) || regex.test(chunk?.toString())) { done(null, true); From ac647907e3e7a7dca24d5a054c3c7657c50c5504 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 7 Oct 2024 15:46:25 +0200 Subject: [PATCH 020/112] minor bug fix of destructing property on error event --- components/devices/class.interface.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index 66c769a..55b3ae6 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -498,7 +498,7 @@ module.exports = class Interface { // stream = WebSocket.createWebSocketStream // see routes/router.api.device.js - Interface.socket(this._id, (err, stream, { uuid }) => { + Interface.socket(this._id, (err, stream, request) => { if (err) { socket.emit("error", err); @@ -508,11 +508,11 @@ module.exports = class Interface { if (process.env.NODE_ENV === "development") { socket.once("open", () => { - logger.debug(`Bridge open: iface ${this._id} <-> ${proto}://${host}:${port} (${uuid})`); + logger.debug(`Bridge open: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); }); socket.once("close", () => { - logger.debug(`Bridge closed: iface ${this._id} <-> ${proto}://${host}:${port} (${uuid})`); + logger.debug(`Bridge closed: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); }); } @@ -520,7 +520,7 @@ module.exports = class Interface { stream.once("close", () => { // feedback - logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${uuid})`); + logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); // destroy everything socket.destroy(); From fed70759c5e5f3e37388f1d1612b526ae4f7342c Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 9 Oct 2024 14:34:52 +0200 Subject: [PATCH 021/112] operator added/documented --- components/scenes/class.trigger.js | 11 +++++-- components/scenes/trigger-types.js | 51 ++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 8 deletions(-) diff --git a/components/scenes/class.trigger.js b/components/scenes/class.trigger.js index 5406f83..d9448b9 100644 --- a/components/scenes/class.trigger.js +++ b/components/scenes/class.trigger.js @@ -85,8 +85,15 @@ module.exports = class Trigger { then: Joi.object({ params: Joi.object({ _id: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).required(), - threshold: Joi.alternatives(Joi.number(), Joi.string(), Joi.boolean()).required(), - lower: Joi.boolean().default(false) + threshold: Joi.number().required(), + operator: Joi.string().valid(">", "<", ">=", "<=", "==").required() + // a = state value + // b = threshold + // a > b + // a < b + // a >= b + // a <= b + // a == b }) }) }/*,{ diff --git a/components/scenes/trigger-types.js b/components/scenes/trigger-types.js index 63c6dab..b8fb5a3 100644 --- a/components/scenes/trigger-types.js +++ b/components/scenes/trigger-types.js @@ -19,27 +19,66 @@ module.exports = { // params.state = endpoint state object id // check if greater/lower than threshold or how to react? + let locked = false; + emitter.on(emitted, (obj) => { - if (obj.event === "state") { + if (obj.event === "state" && obj.args[0].type === "number") { let match = 1; match &= obj.component === "endpoints"; match &= obj.args[0]._id === params._id; - if (params.lower) { - match &= obj.args[0].value <= params.threshold; - } else { - match &= obj.args[0].value >= params.threshold; + let a = obj.args[0].value; + let b = params.threshold; + + // a = state value + // b = threshold + switch (params.operator) { + case "<": + match &= a < b; + break; + case ">": + match &= a > b; + break; + case "<=": + match &= a <= b; + break; + case ">=": + match &= a >= b; + break; + case "==": + match &= a == b; + break; + default: + match = 0; } - if (match) { + // trigger & lock + if (match && !locked) { + locked = true; trigger.fire(); } + // reset lock based on operator + if (params.operator === "<" || params.operator === "<=") { + if (a > b) { + locked = false; + } + } else if (params.operator === ">" || params.operator === ">=") { + if (a < b) { + locked = false; + } + } else if (params.operator === "==") { + if (a !== b) { + locked = false; + } + } + } }); + } /* From e2e0348758388758e7ed4f6217f295b1ec2a4a47 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 14 Oct 2024 14:21:25 +0200 Subject: [PATCH 022/112] fix/implement #503 --- components/devices/class.interface.js | 17 ++++++++++++++++- routes/router.system.connector.js | 11 +++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index 55b3ae6..cb30fd0 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -13,6 +13,7 @@ const { randomUUID } = require("crypto"); const timeout = require("../../helper/timeout.js"); const promisfy = require("../../helper/promisify.js"); +const PENDING_BRIDGES = new Set(); /** * @description @@ -611,6 +612,8 @@ module.exports = class Interface { } */ + static PENDING_BRIDGES = PENDING_BRIDGES; + static socket(iface, cb) { return promisfy((done) => { @@ -637,6 +640,10 @@ module.exports = class Interface { // feedback logger.debug(`Bridge created for interface "${iface}" (${args[1].uuid})`); + // remove event handler + // remove pending bridge from set + cleanup(); + // resolve with socket done(null, ...args); @@ -678,8 +685,14 @@ module.exports = class Interface { let { events } = Interface.scope; let request = Interface.createBridgeRequest(iface); + PENDING_BRIDGES.add(request); + let handler = Interface.parseBridgeRequest(request, (socket) => { - events.off("socket", handler); + // moved below into `removeHandler()` + // removeHandler now gets called for: + // scuccess & error situations like timeout + // see `socket()` above + //events.off("socket", handler); process.nextTick(cb, socket, request); }); @@ -696,6 +709,8 @@ module.exports = class Interface { // Interface.parseBridgeRequest cb is never fired events.off("socket", handler); + PENDING_BRIDGES.delete(request); + }; } diff --git a/routes/router.system.connector.js b/routes/router.system.connector.js index 3dad200..3bc42ca 100644 --- a/routes/router.system.connector.js +++ b/routes/router.system.connector.js @@ -1,4 +1,5 @@ const C_DEVICES = require("../components/devices"); +const { PENDING_BRIDGES } = require("../components/devices/class.interface.js"); // external modules const WebSocket = require("ws"); @@ -33,6 +34,16 @@ module.exports = (router) => { }); + wss.on("connection", (ws) => { + if (PENDING_BRIDGES.size > 0 && ws.readyState === WebSocket.OPEN) { + + PENDING_BRIDGES.forEach((bridge) => { + ws.send(JSON.stringify(bridge)); + }); + } + }); + + C_DEVICES.events.on("socket", (obj) => { if (obj.type === "request") { wss.clients.forEach((ws) => { From 33640933cad3e9ff65a4bb86eae6e2bd1ccdefc1 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 14 Oct 2024 15:58:10 +0200 Subject: [PATCH 023/112] fix #502 --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39c6f1e..36a1d71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2551,9 +2551,9 @@ } }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -3128,9 +3128,9 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -3138,7 +3138,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -9472,9 +9472,9 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -9891,16 +9891,16 @@ } }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", From b29379be3719fcc7ba1bd6e6b7868becfa5ba880 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 15 Oct 2024 10:06:51 +0200 Subject: [PATCH 024/112] timestamps added/fix #496 --- components/scenes/class.scene.js | 51 +++++++++++++++++++++++++++++++- components/scenes/index.js | 4 ++- routes/router.api.scenes.js | 8 ++--- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index 5118d89..db5955a 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -70,6 +70,46 @@ module.exports = class Scene extends Item { writable: true }); + + // wrap timestamps in proxy set trap + // update item in database when the timestamps + // "started", "finished" or "aborted" set + // this ensures that theay are not `null` after a restart + this.timestamps = new Proxy(obj.timestamps, { + set: (target, prop, value, receiver) => { + + let { update, logger } = Scene.scope; + + if (["started", "finished", "aborted"].includes(prop) && value !== target[prop]) { + + // feedback + logger.trace(`Update timestamp: ${prop}=${value}`); + + // cant use `async update()` here + // no clue why, if used, "started", "aborted", "finished" + // timestamps are not set correctly, only "updated" is set to current time + // Maybe because its affect the reflect synchron `Reflect.set(...)` below + update(this._id, this, (err) => { + if (err) { + + // feedback + logger.warn(err, `Could not save timestamp ${prop}=${value}`); + + } else { + + // feedback + logger.debug(`Updated timestamps in database: ${prop}=${value}`); + + } + }); + + } + + return Reflect.set(target, prop, value, receiver); + + } + }); + } static schema() { @@ -81,7 +121,12 @@ module.exports = class Scene extends Item { makros: Joi.array().items(Makro.schema()).default([]), triggers: Joi.array().items(Trigger.schema()).default([]), visible: Joi.boolean().default(true), - icon: Joi.string().allow(null).default(null) + icon: Joi.string().allow(null).default(null), + timestamps: { + started: Joi.number().allow(null).default(null), + aborted: Joi.number().allow(null).default(null), + finished: Joi.number().allow(null).default(null) + } }); } @@ -91,6 +136,7 @@ module.exports = class Scene extends Item { trigger() { + this.timestamps.started = Date.now(); let ac = new AbortController(); this._ac = ac; @@ -130,6 +176,7 @@ module.exports = class Scene extends Item { // NOTE: Intended to be a workaround for #329 & #312 // But the general idea of this is not bad + // TODO: Add abort signal await setTimeout(Number(process.env.SCENES_MAKRO_DELAY)); // represents the current index of makro @@ -149,6 +196,7 @@ module.exports = class Scene extends Item { return init(true, this._ac).then((result) => { console.log("Makro stack done", result); + this.timestamps.finished = Date.now(); this.finished = true; }).catch((err) => { console.log("Makro stack aborted", err); @@ -164,6 +212,7 @@ module.exports = class Scene extends Item { abort() { console.log("Aborted called"); + this.timestamps.aborted = Date.now(); this._ac.abort(); this.running = false; diff --git a/components/scenes/index.js b/components/scenes/index.js index 1676bbc..ebe5676 100644 --- a/components/scenes/index.js +++ b/components/scenes/index.js @@ -18,7 +18,9 @@ class C_SCENES extends COMPONENT { constructor() { // inject logger, collection and schema object - super("scenes", Scene.schema()); + super("scenes", Scene.schema(), [ + Scene + ]); this.hooks.post("add", (data, next) => { next(null, new Scene(data)); diff --git a/routes/router.api.scenes.js b/routes/router.api.scenes.js index 10a3bda..a85fdce 100644 --- a/routes/router.api.scenes.js +++ b/routes/router.api.scenes.js @@ -1,13 +1,11 @@ module.exports = (app, router) => { router.post("/:_id/trigger", (req, res) => { - console.log("Trigger scene", req.item); req.item.trigger(); res.status(202).json(req.item); }); router.post("/:_id/abort", (req, res) => { - console.log("Abort scene", req.item); req.item.abort(); res.json(req.item); }); @@ -16,13 +14,15 @@ module.exports = (app, router) => { running, aborted, index, - finished + finished, + timestamps } }, res) => { res.json({ running, aborted, finished, - index + index, + timestamps }); }); From e46bd368c6acd436367425c430956dff2588a39c Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 15 Oct 2024 10:09:57 +0200 Subject: [PATCH 025/112] fix #506 --- routes/router.system.backup.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/routes/router.system.backup.js b/routes/router.system.backup.js index 16e6cd8..628203b 100644 --- a/routes/router.system.backup.js +++ b/routes/router.system.backup.js @@ -5,6 +5,7 @@ const fs = require("fs"); const { Writable, pipeline } = require("stream"); const { createInterface } = require("readline"); const { EOL } = require("os"); +const { ObjectId } = require("mongodb"); const { client } = require("mongodb"); const tar = require("tar-stream"); @@ -191,8 +192,12 @@ module.exports = (router) => { // TODO: check/handle binary (serialized buffer objects) // > endpoint commands payload - // > _id's should be mongodb object id's - let documents = JSON.parse(Buffer.concat(chunks).toString()); + // > _id's should be mongodb object id's + let documents = JSON.parse(Buffer.concat(chunks).toString()).map((item) => { + // NOTE: Hotfix for #506 + item._id = new ObjectId(item._id); + return item; + }); // prevents bulk write error // MongoInvalidArgumentError: Invalid BulkOperation, Batch cannot be empty From 74a03401cf8630d78c95e15b0dfb16d8e4ea121b Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 15 Oct 2024 12:25:51 +0200 Subject: [PATCH 026/112] fix #507 --- components/scenes/class.scene.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index db5955a..1b2288b 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -136,6 +136,12 @@ module.exports = class Scene extends Item { trigger() { + // fix #507 + // stop previous running scene + if (this.running && this._ac) { + this._ac.abort(); + } + this.timestamps.started = Date.now(); let ac = new AbortController(); this._ac = ac; @@ -211,14 +217,17 @@ module.exports = class Scene extends Item { abort() { - console.log("Aborted called"); - this.timestamps.aborted = Date.now(); + // fix #507 + if (this.running && this._ac) { + this._ac.abort(); + } - this._ac.abort(); this.running = false; this.aborted = true; this.finished = false; + this.timestamps.aborted = Date.now(); + } }; \ No newline at end of file From fa90361981e9c827d658e664a562ccd41ae646fe Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 15 Oct 2024 14:36:11 +0200 Subject: [PATCH 027/112] states array added --- components/scenes/class.scene.js | 58 ++++++++++++-------------------- routes/router.api.scenes.js | 10 ++---- 2 files changed, 23 insertions(+), 45 deletions(-) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index 1b2288b..f767bbb 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -35,29 +35,13 @@ module.exports = class Scene extends Item { }); - Object.defineProperty(this, "running", { - value: false, - enumerable: false, - configurable: false, - writable: true - }); - - Object.defineProperty(this, "aborted", { - value: false, - enumerable: false, - configurable: false, - writable: true - }); - - Object.defineProperty(this, "index", { - value: 0, - enumerable: false, - configurable: false, - writable: true - }); - - Object.defineProperty(this, "finished", { - value: false, + Object.defineProperty(this, "states", { + value: { + running: false, + aborted: false, + finished: false, + index: 0 + }, enumerable: false, configurable: false, writable: true @@ -138,7 +122,7 @@ module.exports = class Scene extends Item { // fix #507 // stop previous running scene - if (this.running && this._ac) { + if (this.states.running && this._ac) { this._ac.abort(); } @@ -149,10 +133,10 @@ module.exports = class Scene extends Item { // wrap this in a custom method // that returns the state? // `getStates()` or so... - this.running = true; - this.aborted = false; - this.finished = false; - this.index = 0; + this.states.running = true; + this.states.aborted = false; + this.states.finished = false; + this.states.index = 0; let init = this.makros.filter(({ @@ -174,7 +158,7 @@ module.exports = class Scene extends Item { }).reduce((acc, cur, i) => { return (result) => { return acc(result, this._ac.signal).then(async (r) => { - if (this.aborted) { + if (this.states.aborted) { return Promise.reject("Aborted!"); @@ -188,7 +172,7 @@ module.exports = class Scene extends Item { // represents the current index of makro // e.g. timer takes 90min to finish, // index = timer makro in `makros` array - this.index = i; + this.states.index = i; return cur(r, this._ac.signal); @@ -203,13 +187,13 @@ module.exports = class Scene extends Item { return init(true, this._ac).then((result) => { console.log("Makro stack done", result); this.timestamps.finished = Date.now(); - this.finished = true; + this.states.finished = true; }).catch((err) => { console.log("Makro stack aborted", err); - this.finished = false; + this.states.finished = false; }).finally(() => { console.log("Finaly"); - this.running = false; + this.states.running = false; }); } @@ -218,13 +202,13 @@ module.exports = class Scene extends Item { abort() { // fix #507 - if (this.running && this._ac) { + if (this.states.running && this._ac) { this._ac.abort(); } - this.running = false; - this.aborted = true; - this.finished = false; + this.states.running = false; + this.states.aborted = true; + this.states.finished = false; this.timestamps.aborted = Date.now(); diff --git a/routes/router.api.scenes.js b/routes/router.api.scenes.js index a85fdce..aa97a4e 100644 --- a/routes/router.api.scenes.js +++ b/routes/router.api.scenes.js @@ -11,17 +11,11 @@ module.exports = (app, router) => { }); router.get("/:_id/state", ({ item: { - running, - aborted, - index, - finished, + states, timestamps } }, res) => { res.json({ - running, - aborted, - finished, - index, + ...states, timestamps }); }); From 8f0b4d591496b0c8b9a5d2da8df558ab946da1d0 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 15 Oct 2024 19:34:56 +0200 Subject: [PATCH 028/112] debounced call to `timestamps` update --- components/scenes/class.scene.js | 47 +++++++++++++++++++------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index f767bbb..7c0535f 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -2,6 +2,7 @@ const Joi = require("joi"); const mongodb = require("mongodb"); const { setTimeout } = require("timers/promises"); +const debounce = require("../../helper/debounce.js"); const Makro = require("./class.makro.js"); const Trigger = require("./class.trigger.js"); @@ -55,6 +56,29 @@ module.exports = class Scene extends Item { }); + // like in state updated + // see components/endpoints/class.state.js + let updater = debounce((prop, value) => { + + let { update, logger } = Scene.scope; + + update(this._id, this, (err) => { + if (err) { + + // feedback + logger.warn(err, `Could not save timestamp ${prop}=${value}`); + + } else { + + // feedback + logger.debug(`Updated timestamps in database: ${prop}=${value}`); + + } + }); + + }, 100); + + // wrap timestamps in proxy set trap // update item in database when the timestamps // "started", "finished" or "aborted" set @@ -62,30 +86,15 @@ module.exports = class Scene extends Item { this.timestamps = new Proxy(obj.timestamps, { set: (target, prop, value, receiver) => { - let { update, logger } = Scene.scope; + let { logger } = Scene.scope; if (["started", "finished", "aborted"].includes(prop) && value !== target[prop]) { // feedback - logger.trace(`Update timestamp: ${prop}=${value}`); - - // cant use `async update()` here - // no clue why, if used, "started", "aborted", "finished" - // timestamps are not set correctly, only "updated" is set to current time - // Maybe because its affect the reflect synchron `Reflect.set(...)` below - update(this._id, this, (err) => { - if (err) { - - // feedback - logger.warn(err, `Could not save timestamp ${prop}=${value}`); - - } else { - - // feedback - logger.debug(`Updated timestamps in database: ${prop}=${value}`); + logger.debug(`Update timestamp: ${prop}=${value}`); - } - }); + // call debounced `.update()` + updater(prop, value); } From 5dbbfdf72c437b5ff9a473af627d2f802779b861 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 17 Oct 2024 14:24:40 +0200 Subject: [PATCH 029/112] added task "Open Gnome Terminal" --- .vscode/tasks.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .vscode/tasks.json diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..81ebe74 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,19 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Open Gnome Terminal with Tabs", + "type": "shell", + "command": "gnome-terminal", + "args": [ + "--tab", "--working-directory", "~/projects/OpenHaus/backend", + "--tab", "--working-directory", "~/projects/OpenHaus/connector", + "--tab", "--working-directory", "~/projects/OpenHaus/frontend", + ], + "problemMatcher": [], + "presentation": { + "close": true + } + } + ] +} From 16a17304280af5f84252c5c88f030b9c600acb4b Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 17 Oct 2024 14:37:18 +0200 Subject: [PATCH 030/112] comment added --- components/scenes/makro-types.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/scenes/makro-types.js b/components/scenes/makro-types.js index 6db6c82..2fcde5b 100644 --- a/components/scenes/makro-types.js +++ b/components/scenes/makro-types.js @@ -33,10 +33,16 @@ module.exports = { // how should this be catched? // reject the makro execution if one command fails? // or ignore it simple, and continue? + //resolve(_id); }] }); + // this does not wait for the prveious command to execute + // execute next makro in scenes, see #505 + // pro: "parallel" execution of commands + // contra: timestamp started/finished does not match. e.g.: + // `.finished` is set before the last command is executed resolve(_id); }); From 961ee382398ef35f4e482f537960eb1b624c854d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 18 Oct 2024 13:21:05 +0200 Subject: [PATCH 031/112] fix #510 --- components/scenes/trigger-types.js | 31 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/components/scenes/trigger-types.js b/components/scenes/trigger-types.js index b8fb5a3..1e864f5 100644 --- a/components/scenes/trigger-types.js +++ b/components/scenes/trigger-types.js @@ -21,37 +21,34 @@ module.exports = { let locked = false; - emitter.on(emitted, (obj) => { - if (obj.event === "state" && obj.args[0].type === "number") { + // NOTE: why do i not use "state" event here? + emitter.on(emitted, ({ args, event, component }) => { + if (event === "state" && args[0].type === "number" && args[0]._id === params._id && component === "endpoints") { - let match = 1; - - match &= obj.component === "endpoints"; - match &= obj.args[0]._id === params._id; - - let a = obj.args[0].value; + let match = false; + let a = args[0].value; let b = params.threshold; // a = state value // b = threshold switch (params.operator) { case "<": - match &= a < b; + match = a < b; break; case ">": - match &= a > b; + match = a > b; break; case "<=": - match &= a <= b; + match = a <= b; break; case ">=": - match &= a >= b; + match = a >= b; break; case "==": - match &= a == b; + match = a == b; break; default: - match = 0; + match = false; } // trigger & lock @@ -62,15 +59,15 @@ module.exports = { // reset lock based on operator if (params.operator === "<" || params.operator === "<=") { - if (a > b) { + if (a > b && locked) { locked = false; } } else if (params.operator === ">" || params.operator === ">=") { - if (a < b) { + if (a < b && locked) { locked = false; } } else if (params.operator === "==") { - if (a !== b) { + if (a !== b && locked) { locked = false; } } From 64bda53db6899d211171d8ab6c77702b7ac13563 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 5 Dec 2024 09:43:47 +0100 Subject: [PATCH 032/112] fix #511 --- components/plugins/class.plugin.js | 83 +++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 13 deletions(-) diff --git a/components/plugins/class.plugin.js b/components/plugins/class.plugin.js index 26ba9ca..657c8eb 100644 --- a/components/plugins/class.plugin.js +++ b/components/plugins/class.plugin.js @@ -4,7 +4,7 @@ const Joi = require("joi"); const mongodb = require("mongodb"); const logger = require("../../system/logger/index.js"); const semver = require("semver"); -const pkg = require("../../package.json"); +//const pkg = require("../../package.json"); const uuid = require("uuid"); const Item = require("../../system/component/class.item.js"); @@ -83,6 +83,60 @@ module.exports = class Plugin extends Item { return Plugin.schema().validate(data); } + static init(data, logger) { + + let init = (dependencies, cb) => { + try { + + // NOTE: Monkey patch ready/abort method to init? + // A plugin could siganlize if its ready or needs to be restarted + /* + let init = new Promise((resolve, reject) => { + init.ready = resolve; + init.abort = reject; + }); + */ + + const granted = dependencies.every((c) => { + if (data.intents.includes(c)) { + + return true; + + } else { + + logger.warn(`Plugin ${data.uuid} (${data.name}) wants to access not registerd intens "${c}"`); + return false; + + } + }); + + if (granted) { + + let components = dependencies.map((name) => { + return require(path.resolve(process.cwd(), `components/${name}`)); + }); + + cb(data, components); + return init; + + } else { + + throw new Error(`Unregisterd intents access approach`); + + } + + } catch (err) { + + logger.error(err, `Plugin could not initalize!`, err.message); + throw err; + + } + }; + + return init; + + } + /** * @function start * Start installed plugin @@ -94,11 +148,13 @@ module.exports = class Plugin extends Item { // feedback logger.debug(`Start plugin "${this.name}"...`); - let json = {}; + //let json = {}; let plugin = path.resolve(process.cwd(), "plugins", this.uuid); - let file = path.resolve(plugin, "package.json"); + //let file = path.resolve(plugin, "package.json"); // 1) check if plugin is compatible + // removed, see #511 + /* try { let content = fs.readFileSync(file); @@ -122,10 +178,12 @@ module.exports = class Plugin extends Item { } } + */ // 2) start plugin if (fs.existsSync(plugin)) { + /* let init = (dependencies, cb) => { try { @@ -136,7 +194,7 @@ module.exports = class Plugin extends Item { init.ready = resolve; init.abort = reject; }); - */ + * const granted = dependencies.every((c) => { if (this.intents.includes(c)) { @@ -173,27 +231,26 @@ module.exports = class Plugin extends Item { } }; - - init[Symbol.for("uuid")] = this.uuid; + */ try { - let returns = require(path.resolve(plugin, "index.js"))(this, this.logger, init); + let init = Plugin.init(this, this.logger); + //init[Symbol.for("uuid")] = this.uuid; - if (!returns) { - return; - } + let returns = require(path.resolve(plugin, "index.js"))(this, this.logger, init); - if (returns[Symbol.for("uuid")] !== this.uuid) { - logger.warn(`Plugin "${this.uuid}" (${this.name}) does not return the init function!`); + if (returns !== init) { throw new Error("Invalid init function returnd!"); } this.started = true; } catch (err) { - logger.error(`Error in plugin "${this.name}": `, err); + + logger.error(err, `Error in plugin "${this.name}": `); throw err; + } } else { From fbcac2f52f22e239512fe0339a5af8784640bd24 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 5 Dec 2024 09:55:39 +0100 Subject: [PATCH 033/112] working on #504 --- components/devices/class.device.js | 9 ++++++--- components/endpoints/class.command.js | 9 ++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/components/devices/class.device.js b/components/devices/class.device.js index 6ca0400..a374bef 100644 --- a/components/devices/class.device.js +++ b/components/devices/class.device.js @@ -1,11 +1,11 @@ const Joi = require("joi"); const mongodb = require("mongodb"); -const InterfaceStream = require("./class.interfaceStream.js"); +//const InterfaceStream = require("./class.interfaceStream.js"); const Interface = require("./class.interface.js"); const Item = require("../../system/component/class.item.js"); -const mixins = require("../../helper/mixins.js"); +//const mixins = require("../../helper/mixins.js"); //const injectMethod = require("../../helper/injectMethod.js"); //const { parse, calculateChecksum } = require("./net-helper.js"); @@ -41,11 +41,13 @@ module.exports = class Device extends Item { // for each interface class, create a interface stream this.interfaces = props.interfaces.map((obj) => { + return new Interface(obj); // NOTE: refactor interfaceStream in v4 // move .bridge method there and pass device instance? // > Would this also create a ciruclar reference in Interface class // > since its stored via `Object.defineProperty(this, "stream",...);` + /* let stream = new InterfaceStream({ // duplex stream options emitClose: false @@ -72,7 +74,7 @@ module.exports = class Device extends Item { device: this._id }, cb); }); - */ + * // "hide" stream behind iface object @@ -82,6 +84,7 @@ module.exports = class Device extends Item { setPrototype: true, //transparent: false }); + */ }); diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index bc9aecf..d9eb34a 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -97,8 +97,14 @@ module.exports = class Command { this.#privates.set("timeout", Number(process.env.COMMAND_RESPONSE_TIMEOUT)); // set default command handler worker function - this.#privates.set("handler", (cmd, { stream }, params, done) => { + this.#privates.set("handler", (cmd, iface, params, done) => { + let err = new Error("DEFAULT_COMMAND_HANDLER_REMOVED"); + + done(err); + //throw err; + + /* if (!cmd.payload) { done(new Error("NO_PAYLOAD_DEFINED")); return; @@ -139,6 +145,7 @@ module.exports = class Command { } }); + */ }); From 14248b1bacc43a058cfb64087709704e53271ccd Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 5 Dec 2024 09:56:49 +0100 Subject: [PATCH 034/112] debug message added --- components/scenes/class.scene.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index 7c0535f..805d172 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -129,9 +129,13 @@ module.exports = class Scene extends Item { trigger() { + let { logger } = Scene.scope; + logger.info(`Trigger scene "${this.name}" (${this._id})`); + // fix #507 // stop previous running scene if (this.states.running && this._ac) { + logger.debug(`Abort previously running scene "${this.name}" (${this._id})`); this._ac.abort(); } From 7fc19ab9b8b090cec0f5e764600836682507b7e6 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 5 Dec 2024 10:09:16 +0100 Subject: [PATCH 035/112] error forwarding added & working on #440 --- components/devices/class.interface.js | 26 +++++++++- routes/router.api.devices.js | 75 +++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 11 deletions(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index cb30fd0..0818473 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -14,6 +14,7 @@ const timeout = require("../../helper/timeout.js"); const promisfy = require("../../helper/promisify.js"); const PENDING_BRIDGES = new Set(); +const WEBSOCKET_SERVER = new Map(); /** * @description @@ -523,6 +524,14 @@ module.exports = class Interface { // feedback logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); + // TODO: Improve error handling/forwarding/cleanup + // socket.destroy() throws ABORT_ERR after emitting custom connection error + // socket.end() does not throw, but is it enough to cleanup everything? + // does it matter that 2 diffrent errors events are emitted? + // 1) "ECONN*", 2) AbortError after calling socket.destroy() + // The ABORT_ERR is not emitted as error, `// Unhandled 'error' event`... + // on what instance is the error thrown? + // destroy everything socket.destroy(); readable.destroy(); @@ -530,8 +539,20 @@ module.exports = class Interface { }); - writable.pipe(stream); - stream.pipe(readable); + // forward error on WebSocket.createWebSocketStream + // used for syscall errors forwarding from connector + stream.once("error", (...args) => { + socket.emit("error", ...args); + }); + + process.nextTick(() => { + + stream.emit("open"); + + writable.pipe(stream); + stream.pipe(readable); + + }); } }); @@ -613,6 +634,7 @@ module.exports = class Interface { */ static PENDING_BRIDGES = PENDING_BRIDGES; + static WEBSOCKET_SERVER = WEBSOCKET_SERVER; static socket(iface, cb) { return promisfy((done) => { diff --git a/routes/router.api.devices.js b/routes/router.api.devices.js index 38146b8..919c640 100644 --- a/routes/router.api.devices.js +++ b/routes/router.api.devices.js @@ -1,13 +1,45 @@ const WebSocket = require("ws"); -const { finished } = require("stream"); +//const { finished } = require("stream"); const C_DEVICES = require("../components/devices"); +const { WEBSOCKET_SERVER } = require("../components/devices/class.interface.js"); //const iface_locked = new Map(); // move that to "event bus" //const { interfaceServer, interfaceStreams } = global.sharedObjects; -const { interfaceServer } = require("../system/shared.js"); - +//const { interfaceServer } = require("../system/shared.js"); + + +// map os syscall codes to ws codes +// https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code +const ERROR_CODE_MAPPINGS = { + 4001: "ECONNREFUSED", // -111 + 4002: "ECONNRESET", // -104 + 4003: "EADDRINUSE", // -98 + 4004: "EADDRNOTAVAIL", // -99 + 4005: "ETIMEDOUT", // -110 + 4006: "EHOSTUNREACH", // -113 + 4007: "ENETUNREACH", // -101 + 4008: "ENOTFOUND", // -3008 + 4009: "EPERM", // -1 + 4010: "EACCES", // -13 + 4011: "EPIPE", // -32 + 4012: "EINVAL", // -22 + 4013: "ENOENT", // -2 + "ECONNREFUSED": -111, // 4001 + "ECONNRESET": -104, // 4002 + "EADDRINUSE": -98, // 4003 + "EADDRNOTAVAIL": -99, // 4004 + "ETIMEDOUT": -110, // 4005 + "EHOSTUNREACH": -113, // 4006 + "ENETUNREACH": -101, // 4007 + "ENOTFOUND": -3008, // 4008 + "EPERM": -1, // 4009 + "EACCES": -13, // 4010 + "EPIPE": -32, // 4011 + "EINVAL": -22, // 4012 + "ENOENT": -2 // 4013 +}; module.exports = (app, router) => { @@ -45,17 +77,18 @@ module.exports = (app, router) => { // Goal should be: // - to eliminate the need of "shared.js" // - handle in router.get only ws handshake: "wss.handleUpgrade(...)" - if (!interfaceServer.has(req.params._iid)) { + if (!WEBSOCKET_SERVER.has(req.params._iid)) { let wss = new WebSocket.Server({ noServer: true }); - interfaceServer.set(req.params._iid, wss); + WEBSOCKET_SERVER.set(req.params._iid, wss); // listen only once to connectoin event // gets fired every time websocket client hit this url/route wss.on("connection", (ws, req) => { + // TODO: check for pending request, if not peding, terminate ws connection if (req.query?.uuid && req.query?.socket === "true" && req.query?.type === "response") { // new bridge/connector practice @@ -63,9 +96,27 @@ module.exports = (app, router) => { let stream = WebSocket.createWebSocketStream(ws); - ws.once("close", (...args) => { - stream.emit("close", ...args); - stream.destroy(); + ws.once("close", (code) => { + if (code >= 4000 && code <= 4999) { + + // error on connection attempt + // underlaying os trhowed error + // build custom connection error + let err = new Error("Bridging failed"); + err.code = ERROR_CODE_MAPPINGS[code]; + err.errno = ERROR_CODE_MAPPINGS[err.code]; + err.syscall = "connect"; + + stream.emit("error", err); + + } else { + + // no clue why closed, cleanup anyway + // TODO: check code and decide if error or success closing + //stream.emit("close"); // desotroy() emit close event(!|?) + stream.destroy(); + + } }); @@ -81,7 +132,12 @@ module.exports = (app, router) => { // old/legacy connection mechanism // TODO: Remove this in future versions + ws.close(1008, "LEGACY_CONNECTION_NOT_SUPPORTED_ANYMORE"); + + // maybe this is needed later for things like serial port data transmission + // how to forward data between a plugin and serialport, via CLI tool, like "socketize"? + /* let upstream = WebSocket.createWebSocketStream(ws); // Cleanup: https://nodejs.org/dist/latest-v16.x/docs/api/stream.html#streamfinishedstream-options-callback @@ -104,6 +160,7 @@ module.exports = (app, router) => { }); }); + */ } }); @@ -133,7 +190,7 @@ module.exports = (app, router) => { } - let wss = interfaceServer.get(req.params._iid); + let wss = WEBSOCKET_SERVER.get(req.params._iid); wss.handleUpgrade(req, req.socket, req.headers, (ws) => { From 5ef11cc410f960a4f046aea3dbf1f1d49fc1a7fc Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 5 Dec 2024 10:09:25 +0100 Subject: [PATCH 036/112] debug message added --- routes/router.system.connector.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/routes/router.system.connector.js b/routes/router.system.connector.js index 3bc42ca..a4f2db9 100644 --- a/routes/router.system.connector.js +++ b/routes/router.system.connector.js @@ -38,8 +38,16 @@ module.exports = (router) => { if (PENDING_BRIDGES.size > 0 && ws.readyState === WebSocket.OPEN) { PENDING_BRIDGES.forEach((bridge) => { - ws.send(JSON.stringify(bridge)); + ws.send(JSON.stringify(bridge), () => { + + // sometimes it happens that pending bridges are not build + // but message is written to the connector + //let { remotePort, remoteAddress } = req.socket; + //console.log(err || `Writed to connector [${remoteAddress}:${remotePort}]: ${JSON.stringify(bridge)}`); + + }); }); + } }); From f58dfbab8f7b379572b635b040a65fc4aa167932 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 5 Dec 2024 10:33:52 +0100 Subject: [PATCH 037/112] working on #504 --- components/devices/{class.adapter.js => !class.adapter.js} | 0 .../{class.interfaceStream.js => !class.interfaceStream.js} | 2 +- components/devices/class.interface.js | 4 +++- components/devices/index.js | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) rename components/devices/{class.adapter.js => !class.adapter.js} (100%) rename components/devices/{class.interfaceStream.js => !class.interfaceStream.js} (99%) diff --git a/components/devices/class.adapter.js b/components/devices/!class.adapter.js similarity index 100% rename from components/devices/class.adapter.js rename to components/devices/!class.adapter.js diff --git a/components/devices/class.interfaceStream.js b/components/devices/!class.interfaceStream.js similarity index 99% rename from components/devices/class.interfaceStream.js rename to components/devices/!class.interfaceStream.js index 49a8fc1..0ae4c00 100644 --- a/components/devices/class.interfaceStream.js +++ b/components/devices/!class.interfaceStream.js @@ -4,7 +4,7 @@ const { Duplex, finished } = require("stream"); const { interfaceStreams } = require("../../system/shared.js"); const timeout = require("../../helper/timeout"); -const Adapter = require("./class.adapter.js"); +const Adapter = require("./!class.adapter.js"); const kSource = Symbol("source"); // https://www.programmersought.com/article/42661306247/ diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index 0818473..031484d 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -36,11 +36,12 @@ const WEBSOCKET_SERVER = new Map(); */ module.exports = class Interface { - constructor(obj, stream) { + constructor(obj/*, stream*/) { Object.assign(this, obj); this._id = String(obj._id); + /* // hide stream object on interface Object.defineProperty(this, "stream", { value: stream @@ -52,6 +53,7 @@ module.exports = class Interface { //let { interfaceStreams } = global.sharedObjects; let { interfaceStreams } = require("../../system/shared.js"); interfaceStreams.set(this._id, stream); + */ // hot fix for #350 /* diff --git a/components/devices/index.js b/components/devices/index.js index 92bb8f5..52ed92e 100644 --- a/components/devices/index.js +++ b/components/devices/index.js @@ -18,7 +18,7 @@ const COMPONENT = require("../../system/component/class.component.js"); const Device = require("./class.device.js"); const Interface = require("./class.interface.js"); -const InterfaceStream = require("./class.interfaceStream.js"); +//const InterfaceStream = require("./class.interfaceStream.js"); /** * @description @@ -147,7 +147,7 @@ class C_DEVICES extends COMPONENT { super("devices", Device.schema(), [ Device, Interface, - InterfaceStream + //InterfaceStream ]); From 40112712218648aeeaa4411a8b31451a580d20d9 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 11:54:23 +0100 Subject: [PATCH 038/112] note/debug comment added --- components/ssdp/class.ssdp.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/ssdp/class.ssdp.js b/components/ssdp/class.ssdp.js index 2ebc564..507b121 100644 --- a/components/ssdp/class.ssdp.js +++ b/components/ssdp/class.ssdp.js @@ -5,6 +5,8 @@ const Item = require("../../system/component/class.item.js"); // simple ssdp monitor: // nc -ulvv 239.255.255.250 1900 +// sudo tcpdump -i udp port 1900 +// sudo tcpdump -i eno1 udp port 1900 // TODO: Add documentation for class module.exports = class SSDP extends Item { From 20775c41a93747d08275bdbccfddd977bae67ed6 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 13:04:40 +0100 Subject: [PATCH 039/112] fix #438 --- components/endpoints/class.endpoint.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/endpoints/class.endpoint.js b/components/endpoints/class.endpoint.js index 9bef6fe..f174e9b 100644 --- a/components/endpoints/class.endpoint.js +++ b/components/endpoints/class.endpoint.js @@ -117,7 +117,8 @@ module.exports = class Endpoint extends Item { device: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).required(), commands: Joi.array().items(Command.schema()).default([]), states: Joi.array().items(State.schema()).default([]), - identifier: Joi.any().allow(null).default(null), // usefull for ssdp, etc. + // removed, see #438 + //identifier: Joi.any().allow(null).default(null), // usefull for ssdp, etc. icon: Joi.string().allow(null).default(null) }); } From e9864b805540c80c71001b511239e4fba41b7b1e Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 13:05:11 +0100 Subject: [PATCH 040/112] note/debug command added --- components/mdns/class.mdns.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/mdns/class.mdns.js b/components/mdns/class.mdns.js index 09ad8ba..6a4bfae 100644 --- a/components/mdns/class.mdns.js +++ b/components/mdns/class.mdns.js @@ -3,6 +3,10 @@ const mongodb = require("mongodb"); const Item = require("../../system/component/class.item.js"); +// simple mdns monitor: +// nc -ulvv 224.0.0.251 5353 +// sudo tcpdump -i udp port 5353 +// sudo tcpdump -i eno1 udp port 5353 module.exports = class MDNS extends Item { constructor(obj) { From 77374eca22ad1d4dff333f1efaa4d95c4646e1fa Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 13:06:33 +0100 Subject: [PATCH 041/112] fix #514 & loggin improved --- components/scenes/class.scene.js | 89 ++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 26 deletions(-) diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index 805d172..f354c7a 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -20,6 +20,14 @@ module.exports = class Scene extends Item { //Object.assign(this, obj); //this._id = String(obj._id); + // override values, start clean + Object.assign(obj?.states || {}, { + running: false, + aborted: false, + finished: false, + index: 0 + }); + this.makros = obj.makros.map((makro) => { return new Makro(makro); }); @@ -36,18 +44,6 @@ module.exports = class Scene extends Item { }); - Object.defineProperty(this, "states", { - value: { - running: false, - aborted: false, - finished: false, - index: 0 - }, - enumerable: false, - configurable: false, - writable: true - }); - Object.defineProperty(this, "_ac", { value: null, enumerable: false, @@ -58,23 +54,25 @@ module.exports = class Scene extends Item { // like in state updated // see components/endpoints/class.state.js - let updater = debounce((prop, value) => { + let updater = debounce(async (prop, value) => { let { update, logger } = Scene.scope; - update(this._id, this, (err) => { - if (err) { + try { - // feedback - logger.warn(err, `Could not save timestamp ${prop}=${value}`); + await update(this._id, this); - } else { + } catch (e) { - // feedback - logger.debug(`Updated timestamps in database: ${prop}=${value}`); + // feedback + logger.warn(e, `Could not update scene object, last property change: ${prop}=${value}`); - } - }); + } finally { + + // feedback + logger.verbose(`Updated scene object, last property change: ${prop}=${value}`); + + } }, 100); @@ -103,6 +101,31 @@ module.exports = class Scene extends Item { } }); + + // catch set operations on states object + // emit/trigger events/update + this.states = new Proxy(this?.states || {}, { + set: (target, prop, value, receiver) => { + + let { logger, events } = Scene.scope; + + if (value !== target[prop]) { + + // feedback + logger.debug(`state object changed, ${prop}=${value}`); + + events.emit("state", this.states, this); + + // call debounced `.update()` + updater(prop, value); + + } + + return Reflect.set(target, prop, value, receiver); + + } + }); + } static schema() { @@ -115,6 +138,12 @@ module.exports = class Scene extends Item { triggers: Joi.array().items(Trigger.schema()).default([]), visible: Joi.boolean().default(true), icon: Joi.string().allow(null).default(null), + states: Joi.object({ + running: Joi.boolean().default(false), + aborted: Joi.boolean().default(false), + finished: Joi.boolean().default(false), + index: Joi.number().default(0), + }).default({}), timestamps: { started: Joi.number().allow(null).default(null), aborted: Joi.number().allow(null).default(null), @@ -127,6 +156,10 @@ module.exports = class Scene extends Item { return Scene.schema().validate(data); } + static registerMakro() { + + } + trigger() { let { logger } = Scene.scope; @@ -197,16 +230,16 @@ module.exports = class Scene extends Item { }; }); - return init(true, this._ac).then((result) => { - console.log("Makro stack done", result); + return init(true, this._ac).then(() => { this.timestamps.finished = Date.now(); this.states.finished = true; + logger.debug(`Scene "${this.name}" finished`); }).catch((err) => { - console.log("Makro stack aborted", err); this.states.finished = false; + logger.debug(err, `Scene "${this.name}" error`); }).finally(() => { - console.log("Finaly"); this.states.running = false; + logger.info(`Scene "${this.name}" runned`, this.states); }); } @@ -225,6 +258,10 @@ module.exports = class Scene extends Item { this.timestamps.aborted = Date.now(); + let { logger } = Scene.scope; + + logger.info(`Scene "${this.name}" aborted!`); + } }; \ No newline at end of file From 7ddfe2d548580ce459338879e5b9e63017ce0f7a Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 13:07:00 +0100 Subject: [PATCH 042/112] notes added, before implement #519 --- components/scenes/makro-types.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/components/scenes/makro-types.js b/components/scenes/makro-types.js index 2fcde5b..adbe386 100644 --- a/components/scenes/makro-types.js +++ b/components/scenes/makro-types.js @@ -2,6 +2,21 @@ const dispatcher = require("../../system/dispatcher"); module.exports = { + // makro should have following signature + // before implementing #519 + // (, , {resolve, reject, signal, options}) + // scene = scene instance + // params = makro specific object, e.g. command id/timer value + // wrapper object to fullfill/abort execution + // - resolve = Promise.resolver(); + // - reject = Promise.reject(); + // - signal = AbortController.signal + // - options = "custom" options for makro, similar to params object + // > maybe can be merged with params object + // > currently only one option "parallel", comes into my mind + // > but this would also be only command makro specific, so it could/sould be merged into params object + // NOTE: The above, should also be adapted and applied to trigger types + // TODO (mstirner) change to "sleep" instead! "timer": ({ _id, value }, result, signal) => { return new Promise((resolve) => { From 76c2edb70a43c2cc9c7c24d648b78312697aeb9d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 13:29:54 +0100 Subject: [PATCH 043/112] fix `password=undefined` validation --- components/users/index.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/components/users/index.js b/components/users/index.js index 3fb348e..a205805 100644 --- a/components/users/index.js +++ b/components/users/index.js @@ -29,6 +29,33 @@ class C_USERS extends COMPONENT { next(null, new User(this, data)); }); + // patch password if item exists & is set + // otherwise the schema validation fails + this.hooks.pre("update", (_id, data, next) => { + if (data.password === null) { + + let item = this.items.find((user) => { + return user._id === _id; + }); + + if (!item) { + + next(null, _id, data); + + } else { + + data.password = item.password; + next(null, _id, data); + + } + + } else { + + next(null, _id, data); + + } + }); + this.hooks.pre(["add", "update"], (_id, data, next) => { // if next is missing & only 2 arguments passed From 22ac6514c7af6b715a1a5ba0736e793838f67528 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 13:30:02 +0100 Subject: [PATCH 044/112] error handling improved --- routes/router.api.vault.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/routes/router.api.vault.js b/routes/router.api.vault.js index 0b80508..342fff0 100644 --- a/routes/router.api.vault.js +++ b/routes/router.api.vault.js @@ -38,11 +38,19 @@ module.exports = (app, router) => { }); router.post("/:_id/secrets/:_sid/decrypt", (req, res) => { + try { - res.json({ - value: req.secret.decrypt() - }); + res.json({ + value: req.secret.decrypt() + }); + + } catch (err) { + res.status(422).json({ + error: err.message + }); + + } }); }; \ No newline at end of file From f9bf79ab7c5b68aa7893e045dfb901251e8ac668 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 15 Jan 2025 14:09:13 +0100 Subject: [PATCH 045/112] fix #517 --- components/ssdp/message-handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/ssdp/message-handler.js b/components/ssdp/message-handler.js index 9bb64b0..2287895 100644 --- a/components/ssdp/message-handler.js +++ b/components/ssdp/message-handler.js @@ -53,7 +53,7 @@ module.exports = (scope) => { */ //if (headers?.nt === nt || headers?.usn === usn || match) { - if (headers?.nt === nt || headers?.usn === usn) { + if ((headers?.nt === nt || headers?.usn === usn) && scope.items[i]) { let { timestamps, _id } = scope.items[i]; timestamps.announced = Date.now(); From e09ed8a379d813edf832eb6e6e08a3fc7af3d712 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 17 Jan 2025 13:20:40 +0100 Subject: [PATCH 046/112] note/debug command added --- components/mdns/class.mdns.js | 4 +++- components/ssdp/class.ssdp.js | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/components/mdns/class.mdns.js b/components/mdns/class.mdns.js index 6a4bfae..dd2fa78 100644 --- a/components/mdns/class.mdns.js +++ b/components/mdns/class.mdns.js @@ -4,9 +4,11 @@ const mongodb = require("mongodb"); const Item = require("../../system/component/class.item.js"); // simple mdns monitor: -// nc -ulvv 224.0.0.251 5353 +// nc -ulvv 224.0.0.251 5353 -> does not work, use socat below: +// socat UDP4-RECVFROM:5353,ip-add-membership=224.0.0.0:0.0.0.0,fork,reuseaddr - // sudo tcpdump -i udp port 5353 // sudo tcpdump -i eno1 udp port 5353 +// TODO: Add documentation for class module.exports = class MDNS extends Item { constructor(obj) { diff --git a/components/ssdp/class.ssdp.js b/components/ssdp/class.ssdp.js index 507b121..13e1715 100644 --- a/components/ssdp/class.ssdp.js +++ b/components/ssdp/class.ssdp.js @@ -4,7 +4,8 @@ const mongodb = require("mongodb"); const Item = require("../../system/component/class.item.js"); // simple ssdp monitor: -// nc -ulvv 239.255.255.250 1900 +// nc -ulvv 239.255.255.250 1900 -> does not work, use socat below: +// socat UDP4-RECVFROM:1900,ip-add-membership=239.255.255.250:0.0.0.0,fork,reuseaddr - // sudo tcpdump -i udp port 1900 // sudo tcpdump -i eno1 udp port 1900 // TODO: Add documentation for class From f385025b75b1e4cec2f01490473f5b5bf54497c4 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 17 Jan 2025 13:20:50 +0100 Subject: [PATCH 047/112] loggin improved --- routes/rest-handler.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/routes/rest-handler.js b/routes/rest-handler.js index 5bd3700..de0c43f 100644 --- a/routes/rest-handler.js +++ b/routes/rest-handler.js @@ -2,6 +2,8 @@ const _iterate = require("../helper/iterate.js"); module.exports = (C_COMPONENT, router) => { + const { logger } = C_COMPONENT; + router.use((req, res, next) => { let json = res.json; @@ -72,8 +74,10 @@ module.exports = (C_COMPONENT, router) => { C_COMPONENT.get(_id, (err, obj) => { if (err) { + logger.warn(`Could not get item "${_id}":`, err); + res.status(400).json({ - error: err + error: err.message }); } else { @@ -122,10 +126,10 @@ module.exports = (C_COMPONENT, router) => { C_COMPONENT.update(req.params["_id"], req.body, (err, result) => { if (err) { - console.log(err, result); + logger.warn(`Could not update item "${req.params._id}":`, err); res.status(400).json({ - error: err + error: err.message }); } else { @@ -143,6 +147,8 @@ module.exports = (C_COMPONENT, router) => { C_COMPONENT.add(req.body, (err, result) => { if (err) { + logger.warn(`Could not add item:`, err); + res.status(400).json({ error: err.message }); @@ -164,8 +170,10 @@ module.exports = (C_COMPONENT, router) => { C_COMPONENT.remove(req.params["_id"], (err, result) => { if (err) { + logger.warn(`Could not remove item "${req.params._id}":`, err); + res.status(400).json({ - error: err + error: err.message }); } else { From cc52ecc9f2c41a274eb5167411cdc4bfb7330686 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Sat, 18 Jan 2025 11:44:14 +0100 Subject: [PATCH 048/112] fix #524 --- components/plugins/class.plugin.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/components/plugins/class.plugin.js b/components/plugins/class.plugin.js index 657c8eb..e122b58 100644 --- a/components/plugins/class.plugin.js +++ b/components/plugins/class.plugin.js @@ -60,6 +60,16 @@ module.exports = class Plugin extends Item { name: Joi.string().required(), uuid: Joi.string().default(() => { return uuid.v4(); + }).messages({ + "any.invalid": `{{#label}} needs to be a valid v4 UUID` + }).custom((value, helpers) => { + + if (!uuid.validate(value) || uuid.version(value) !== 4) { + return helpers.error("any.invalid"); + } + + return value; + }), version: Joi.string().required().messages({ "any.invalid": `{{#label}} needs to be a valid semver version` From 87af635da92442fbda43354f8734067e271bb18f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Sat, 1 Feb 2025 20:48:27 +0100 Subject: [PATCH 049/112] admin backend added --- .vscode/tasks.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 81ebe74..25bcf38 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -9,6 +9,7 @@ "--tab", "--working-directory", "~/projects/OpenHaus/backend", "--tab", "--working-directory", "~/projects/OpenHaus/connector", "--tab", "--working-directory", "~/projects/OpenHaus/frontend", + "--tab", "--working-directory", "~/projects/OpenHaus/admin-frontend", ], "problemMatcher": [], "presentation": { From de570bba1cdef3e5c85515e87664d8b459693ece Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Sat, 1 Feb 2025 21:36:31 +0100 Subject: [PATCH 050/112] fix ` Cannot read properties of undefined (reading 'on')`, see #530 --- system/init/init.http-server.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/system/init/init.http-server.js b/system/init/init.http-server.js index 153e7c1..8763c39 100644 --- a/system/init/init.http-server.js +++ b/system/init/init.http-server.js @@ -58,7 +58,7 @@ module.exports = (logger) => { server.listen(Number(process.env.HTTP_PORT), process.env.HTTP_ADDRESS); } else { - resolve(); + resolve(null); } }), @@ -123,7 +123,7 @@ module.exports = (logger) => { } } else { - resolve(); + resolve(null); } }) @@ -152,26 +152,28 @@ module.exports = (logger) => { }); servers.forEach((server) => { + if (server) { - // use express request handler - server.on("request", app); + // use express request handler + server.on("request", app); - // fix #408, see: - // https://github.com/OpenHausIO/connector/issues/38 - // https://github.com/websockets/ws/issues/2193 - server.on("upgrade", (req, socket) => { + // fix #408, see: + // https://github.com/OpenHausIO/connector/issues/38 + // https://github.com/websockets/ws/issues/2193 + server.on("upgrade", (req, socket) => { - let res = new http.ServerResponse(req); - res.assignSocket(socket); + let res = new http.ServerResponse(req); + res.assignSocket(socket); - res.on("finish", () => { - res.socket.destroy(); - }); + res.on("finish", () => { + res.socket.destroy(); + }); - app(req, res); + app(req, res); - }); + }); + } }); resolve(); From 847a83bd438cd0d463bf4ec09a2f3ff1c37ad77a Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 3 Feb 2025 13:58:51 +0100 Subject: [PATCH 051/112] fix #529, possible fix for #528 --- components/endpoints/class.command.js | 70 ++++++++++++++------------- components/endpoints/class.param.js | 24 +++++++++ components/endpoints/index.js | 3 +- 3 files changed, 62 insertions(+), 35 deletions(-) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index d9eb34a..7637e33 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -205,6 +205,9 @@ module.exports = class Command { */ trigger(params, cb) { + let { events, logger } = Command.scope; + logger.verbose(`Trigger command "${this.name}"`, this); + if (!cb && params instanceof Function) { cb = params; params = []; @@ -218,57 +221,56 @@ module.exports = class Command { let worker = this.#privates.get("handler"); let iface = interfaces.get(this.interface); - //console.log("params array:", this.params, params) + // moved up, and used as callback debounce function + // see #528, timeout helper has a internal "called" flag + let timer = _timeout(this.#privates.get("timeout"), (timedout, duration, args) => { + if (timedout) { - let valid = params.every(({ key, value }) => { + console.log("Command timedout! Execution was not successful, worker function:", worker); + cb(null, false); - let param = this.params.find((param) => { - return param.key === key; - }); + } else { - if (!param) { - return false; - } + console.log("Command handler executed", duration, args); + cb(...args); - // auto convert "123" to 123 - if (param.type === "number") { - value = Number(value); } + }); - return typeof (value) === param.type; + try { + params = params.map((obj) => { - }); + let param = this.params.find((param) => { + return param.key === obj.key; + }); - if (!iface) { - let err = new Error(`Interface "${this.interface}" not found, cant write to it.`); - err.code = "NO_INTERFACE"; - return cb(err, false); - } + return Param.merge(param, obj); - if (!valid) { - let err = new Error(`Invalid parameter`); - err.code = "INVALID_PARAMETER"; - // TODO: Should not be as second argument passed "false"?! - return cb(err); - } + }); + } catch (err) { - let timer = _timeout(this.#privates.get("timeout"), (timedout, duration, args) => { - if (timedout) { + logger.warn(err, `Passed params to command "${this.name}" are invalid`, params); - console.log("Command timedout! Execution was not successful, worker function:", worker); - cb(null, false); + timer(err, false); + return; - } else { + } - console.log("Command handler executed", duration, args); - cb(...args); + // convert to params array with .lean method + params = new Params(...params); - } - }); + if (!iface) { + let err = new Error(`Interface "${this.interface}" not found, cant write to it.`); + err.code = "NO_INTERFACE"; + return timer(err, false); + } + + // emit command event, see #529 + events.emit("command", this, params); // handle timeout stuff here? // when so, timeout applys to custom functions too! - worker.call(this, this, iface, new Params(...params), timer); + worker.call(this, this, iface, params, timer); } diff --git a/components/endpoints/class.param.js b/components/endpoints/class.param.js index 0f53c6b..27613f9 100644 --- a/components/endpoints/class.param.js +++ b/components/endpoints/class.param.js @@ -8,6 +8,7 @@ module.exports = class Param { Object.defineProperty(this, "value", { get() { + // NOTE: Autoconvert value here? return obj.value; }, set(val) { @@ -36,6 +37,7 @@ module.exports = class Param { static schema() { return Joi.object({ + // TODO: name: Joi.string().required(); type: Joi.string().valid("number", "string", "boolean").required(), key: Joi.string().required() }).when(".type", { @@ -67,4 +69,26 @@ module.exports = class Param { return Param.schema().validate(data); } + static merge(self, obj) { + + if (!self) { + throw new Error("Parameter not found, got " + self); + } + + if (self.type === "number") { + obj.value = Number(obj.value); + } + + Object.assign(self, obj); + + let { error = null } = Param.validate(self); + + if (error) { + throw error; + } + + return self; + + } + }; \ No newline at end of file diff --git a/components/endpoints/index.js b/components/endpoints/index.js index 76a3076..fe6685a 100644 --- a/components/endpoints/index.js +++ b/components/endpoints/index.js @@ -42,7 +42,8 @@ class C_ENDPOINTS extends COMPONENT { // inject logger, collection and schema object super("endpoints", Endpoint.schema(), [ - Endpoint + Endpoint, + Command ]); From 5631f5895cbe71d36c9e366e4736c21ccf030473 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 3 Feb 2025 14:03:09 +0100 Subject: [PATCH 052/112] mongodb version 6,7,8 added --- .github/workflows/node-js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-js.yml b/.github/workflows/node-js.yml index 73183a7..a686549 100644 --- a/.github/workflows/node-js.yml +++ b/.github/workflows/node-js.yml @@ -28,7 +28,7 @@ jobs: matrix: os: [ubuntu-latest] node-version: [16.x, 18.x, 20.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - mongodb-version: ["4.2", "4.4", "5.0"] + mongodb-version: ["4.2", "4.4", "5.0", "6.0", "7.0", "8.0"] steps: - uses: actions/checkout@v4 From 9a88b4574d9fc1160231eb1a1a8de6f5533ec59f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 3 Feb 2025 14:04:24 +0100 Subject: [PATCH 053/112] node version 22.x added --- .github/workflows/node-js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-js.yml b/.github/workflows/node-js.yml index a686549..e4fedf4 100644 --- a/.github/workflows/node-js.yml +++ b/.github/workflows/node-js.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [16.x, 18.x, 20.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + node-version: [16.x, 18.x, 20.x, 22.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ mongodb-version: ["4.2", "4.4", "5.0", "6.0", "7.0", "8.0"] steps: From 47cfdeca8d2ddef8ee832d13fd2d54e1bf572a61 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 3 Feb 2025 16:24:28 +0100 Subject: [PATCH 054/112] fix #527 --- system/component/class.component.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/system/component/class.component.js b/system/component/class.component.js index 130253d..0658b4d 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -701,13 +701,24 @@ module.exports = class COMPONENT extends COMMON { if (key === "labels" && Array.isArray(filter[key]) && Array.isArray(target[key])) { found = filter[key].every((label) => { + + // split filter key/label + let [k = null, v = null] = label.split("="); + + // check wildcard key/value + if (k === "*" || v === "*") { + return true; + } + // fix #381 // target[key] is a instance if class.labels.js and not of plain string. // convert it to a array wiht plain strings, so that .includes works. return target[key]?.toString().includes(label); + }); return; + } if (typeof filter[key] === "object") { From 6ca7d9ebfeda8f2f3e24d8f2880ee95ee1ec30ba Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 3 Feb 2025 16:51:03 +0100 Subject: [PATCH 055/112] fix #518 --- index.js | 3 ++- routes/index.js | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index db34209..fbf7600 100644 --- a/index.js +++ b/index.js @@ -58,7 +58,8 @@ process.env = Object.assign({ MQTT_BROKER_VERSION: "4", MQTT_CLIENT_ID: "OpenHaus", MQTT_PING_INTERVAL: "5000", - CONNECT_TIMEOUT: "10000" + CONNECT_TIMEOUT: "10000", + HTTP_TRUSTED_PROXYS: "loopback" }, env.parsed, process.env); diff --git a/routes/index.js b/routes/index.js index 9af604e..0e9b04d 100644 --- a/routes/index.js +++ b/routes/index.js @@ -45,11 +45,7 @@ const about = express.Router(); //const system = express.Router(); // https://expressjs.com/en/guide/behind-proxies.html -app.set("trust proxy", [ - "loopback", - "linklocal", - "uniquelocal" -]); +app.set("trust proxy", process.env.HTTP_TRUSTED_PROXYS.split(",")); // fix #409 // add logging for http requests @@ -67,10 +63,14 @@ app.use((req, res, next) => { headers: req.headers })); + //res.removeHeader("x-powered-by"); + //res.setHeader("x-timestamp", Date.now()); + next(); }); +// NOTE: Remove limit?, since when is a 25mb json needed?! app.use(bodyParser.json({ limit: (Number(process.env.API_LIMIT_SIZE) * 1024) // default to 25, (=25mb) })); From 973b10674ca59ea783c15188c7c24aca39be3c2b Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 18 Feb 2025 12:10:32 +0100 Subject: [PATCH 056/112] fix #543 & warning `FromAsCasing` --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b360ac9..5d85d73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,14 +2,14 @@ # https://medium.com/@kahana.hagai/docker-compose-with-node-js-and-mongodb-dbdadab5ce0a # The instructions for the first stage -FROM node:20-alpine as builder +FROM node:20-alpine AS builder ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} # fix #233 RUN mkdir scripts -RUN echo "exit 0" > scripts/post-install.sh +RUN echo -e "#!/bin/sh\n\nexit 0" > scripts/post-install.sh RUN chmod +x scripts/post-install.sh RUN apk --no-cache add python3 make g++ @@ -26,7 +26,7 @@ FROM node:20-alpine WORKDIR /opt/OpenHaus/backend COPY --from=builder node_modules node_modules -RUN apk --no-cache add openssl +RUN apk --no-cache add openssl tzdata ARG version=unknown LABEL version=$version From 70edab8edd0d6790d913244bb8b7c09c29961949 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 18 Feb 2025 12:11:22 +0100 Subject: [PATCH 057/112] error message logging added --- components/users/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/components/users/index.js b/components/users/index.js index a205805..62cef51 100644 --- a/components/users/index.js +++ b/components/users/index.js @@ -151,6 +151,7 @@ class C_USERS extends COMPONENT { }, (err) => { if (err) { + this.logger.error(err, `Could not set login timestamp for user "${user.email}"`); done(err); } else { From ed864f1eed7d2603103e76a3a0323af78150277a Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 5 Mar 2025 15:35:10 +0100 Subject: [PATCH 058/112] comment added --- components/vault/class.vault.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/vault/class.vault.js b/components/vault/class.vault.js index d99ae9c..36dae1b 100644 --- a/components/vault/class.vault.js +++ b/components/vault/class.vault.js @@ -85,7 +85,7 @@ module.exports = class Vault extends Item { return String(new mongodb.ObjectId()); }), name: Joi.string().required(), - identifier: Joi.string().required(), + identifier: Joi.string().required(), // TODO: remove description: Joi.string().allow(null).default(null), secrets: Joi.array().items(Secret.schema()).default([]) }); From a1f58f6fcdbda66b5b6a3708c31e83479dadac77 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 5 Mar 2025 15:37:33 +0100 Subject: [PATCH 059/112] changed arguments order & options object, added parameter support --- components/scenes/class.makro.js | 70 ++++++++++---------------------- components/scenes/class.scene.js | 4 +- components/scenes/makro-types.js | 58 ++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 51 deletions(-) diff --git a/components/scenes/class.makro.js b/components/scenes/class.makro.js index ce11a0c..f25422f 100644 --- a/components/scenes/class.makro.js +++ b/components/scenes/class.makro.js @@ -31,6 +31,7 @@ module.exports = class Makro { Object.assign(this, obj); this._id = String(obj._id); + //this.options } @@ -44,62 +45,31 @@ module.exports = class Makro { * * @returns */ - execute(result, signal) { - + // TODO: remove result argument + execute(result, signal, scene) { if (types[this.type]) { - return types[this.type](this, result, signal); - } else { - throw new Error(`Type ${this.type} handler not found`); - } - - /* - return new Promise((resolve, reject) => { - try { - if (this.type === "timer") { - - let timeout = setTimeout(() => { - resolve(this._id, signal); - }, this.value); - - signal.addEventListener("abort", () => { - clearTimeout(timeout); - }, { - once: true - }); - - } else if (this.type === "command") { - dispatcher({ - "component": "endpoints", - "item": this.endpoint, - "method": "trigger", - "args": [this.command] - }); + return new Promise((resolve, reject) => { - resolve(this._id); + let options = { + resolve, + reject, + signal, + makro: this + }; - } else if (this.type === "scene") { + return Reflect.apply(types[this.type], null, [ + scene, + options + ]); - dispatcher({ - "component": "scenes", - "item": this.scene, - "method": "trigger", - "args": [] - }); + }); - } else { - - reject(`${this.type} is invalid!`); - - } - } catch (err) { - - reject(err); + } else { - } - }); - */ + throw new Error(`Type ${this.type} makro handler not defined`); + } } @@ -130,7 +100,9 @@ module.exports = class Makro { is: "command", then: Joi.object({ endpoint: Joi.string().pattern(/^[0-9a-fA-F]{24}$/), - command: Joi.string().pattern(/^[0-9a-fA-F]{24}$/) + command: Joi.string().pattern(/^[0-9a-fA-F]{24}$/), + parallel: Joi.boolean().default(true), + params: Joi.array().default([]) }) }, { is: "timer", diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index f354c7a..5e85a0a 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -203,7 +203,7 @@ module.exports = class Scene extends Item { }).reduce((acc, cur, i) => { return (result) => { - return acc(result, this._ac.signal).then(async (r) => { + return acc(result, this._ac.signal, this).then(async (r) => { if (this.states.aborted) { return Promise.reject("Aborted!"); @@ -220,7 +220,7 @@ module.exports = class Scene extends Item { // index = timer makro in `makros` array this.states.index = i; - return cur(r, this._ac.signal); + return cur(r, this._ac.signal, this); } }).catch((err) => { diff --git a/components/scenes/makro-types.js b/components/scenes/makro-types.js index adbe386..01def2a 100644 --- a/components/scenes/makro-types.js +++ b/components/scenes/makro-types.js @@ -15,8 +15,65 @@ module.exports = { // > maybe can be merged with params object // > currently only one option "parallel", comes into my mind // > but this would also be only command makro specific, so it could/sould be merged into params object + // options.value = timer value + // options.parallel = Boolean + // options.params = Arry, command params // NOTE: The above, should also be adapted and applied to trigger types + "timer": (scene, { resolve, reject, signal, makro }) => { + + let timeout = setTimeout(() => { + resolve(); + }, makro.value); + + signal.addEventListener("abort", () => { + clearTimeout(timeout); + reject(); + }, { + once: true + }); + + }, + + + "command": (scene, { resolve, makro }) => { + + dispatcher({ + "component": "endpoints", + "item": makro.endpoint, + "method": "trigger", + "args": [makro.command, makro.params || [], () => { + if (!makro?.parallel) { + resolve(); + } + }] + }); + + // use as default parallel if undefined + if (makro?.parallel ?? true) { + resolve(); + } + + }, + + + "scene": (scene, { resolve, makro }) => { + + dispatcher({ + "component": "scenes", + "item": makro.scene, + "method": "trigger", + "args": [] + }); + + resolve(); + + }, + + // create enable/disable makro + // calls via dispatcher update + + /* // TODO (mstirner) change to "sleep" instead! "timer": ({ _id, value }, result, signal) => { return new Promise((resolve) => { @@ -77,5 +134,6 @@ module.exports = { }); } + */ }; \ No newline at end of file From b3dab68832851bf24ec9f24117576ba2341d8ce4 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 5 Mar 2025 15:50:34 +0100 Subject: [PATCH 060/112] loggin improved, parameter bug fix added --- components/endpoints/class.command.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index 7637e33..ff3fb45 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -226,12 +226,12 @@ module.exports = class Command { let timer = _timeout(this.#privates.get("timeout"), (timedout, duration, args) => { if (timedout) { - console.log("Command timedout! Execution was not successful, worker function:", worker); + logger.warn(`Command timedout for "${this._id}"! Execution was not successful, worker function:`, worker); cb(null, false); } else { - console.log("Command handler executed", duration, args); + logger.debug(`Command handler for "${this._id}" executed in ${duration}ms, arguments:`, args); cb(...args); } @@ -244,6 +244,10 @@ module.exports = class Command { return param.key === obj.key; }); + if (!param) { + return obj; + } + return Param.merge(param, obj); }); From 7c90a2391940a2dd85edaad851d2a34b2f0a28ae Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 6 Mar 2025 14:24:41 +0100 Subject: [PATCH 061/112] comment added --- components/store/class.value.js | 1 + 1 file changed, 1 insertion(+) diff --git a/components/store/class.value.js b/components/store/class.value.js index 3daa0ff..567ed68 100644 --- a/components/store/class.value.js +++ b/components/store/class.value.js @@ -18,6 +18,7 @@ const Joi = require("joi"); * @property {String} namespace Object namespace, `uuid -v4` * @property {String} item MongoDB ObjectID for for what item the config applays (E.g: device or endpoint item) */ +// TODO: Rename to class.config.js class Value { constructor(obj, changed = () => { }) { From 7f39f330586aba308572e5885630cd25aa0b6bcf Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 27 Mar 2025 12:37:23 +0100 Subject: [PATCH 062/112] fix #539 --- index.js | 2 ++ system/init/init.database.js | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index fbf7600..c0e7069 100644 --- a/index.js +++ b/index.js @@ -29,6 +29,8 @@ process.env = Object.assign({ DATABASE_URL: "", DATABASE_WATCH_CHANGES: "false", DATABASE_UPDATE_DEBOUNCE_TIMER: "15", + DATABASE_AUTH_SOURCE: "admin", + DATABASE_APPNAME: "OpenHaus", HTTP_PORT: "8080", HTTP_ADDRESS: "0.0.0.0", HTTP_SOCKET: "/tmp/open-haus.sock", diff --git a/system/init/init.database.js b/system/init/init.database.js index a77a96f..2f392d7 100644 --- a/system/init/init.database.js +++ b/system/init/init.database.js @@ -9,11 +9,14 @@ module.exports = (logger) => { let url = new URL(`mongodb://${process.env.DATABASE_HOST}:${process.env.DATABASE_PORT}/${process.env.DATABASE_NAME}`); + url.searchParams.set("authSource", process.env.DATABASE_AUTH_SOURCE); // admin + url.searchParams.set("appName", process.env.DATABASE_APPNAME); // OpenHaus + if (process.env.DATABASE_AUTH_USERNAME) { url.username = process.env.DATABASE_AUTH_USERNAME; } - if (process.env.DATABASE_AUTH_USERNAME) { + if (process.env.DATABASE_AUTH_PASSWORD) { url.password = process.env.DATABASE_AUTH_PASSWORD; } @@ -40,9 +43,8 @@ module.exports = (logger) => { // monky patch db instance // use this instance in other files - //mongodb.client = client.db(process.env.DATABASE_NAME); + mongodb.client = client.db(process.env.DATABASE_NAME); mongodb.connection = client; - mongodb.client = client.db(); client.on("error", (err) => { From 2cb58af58dd146c42168251bdd7e37a1afb10e4d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 27 Mar 2025 12:38:54 +0100 Subject: [PATCH 063/112] fix #536 & fix #537 --- system/component/class.component.js | 11 ++-- system/component/class.label.js | 4 +- system/component/class.labels.js | 79 ++++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 11 deletions(-) diff --git a/system/component/class.component.js b/system/component/class.component.js index 0658b4d..7876022 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -703,7 +703,7 @@ module.exports = class COMPONENT extends COMMON { found = filter[key].every((label) => { // split filter key/label - let [k = null, v = null] = label.split("="); + let [k = null, v = null] = label.toString().split(/=(.+)/); // check wildcard key/value if (k === "*" || v === "*") { @@ -763,12 +763,7 @@ module.exports = class COMPONENT extends COMMON { if (target[key] instanceof Object) { return loop(target[key], filter[key]); - } else { - return target[key] === filter[key]; - } - - }); - }; + } else {endpoint if (loop(item, filter)) { matched = true; @@ -833,7 +828,7 @@ module.exports = class COMPONENT extends COMMON { } else { - let [key, value] = filter.split("="); + let [key, value] = filter.split(/=(.+)/); return arr.some((label) => { diff --git a/system/component/class.label.js b/system/component/class.label.js index cedc28e..8b9acec 100644 --- a/system/component/class.label.js +++ b/system/component/class.label.js @@ -2,7 +2,7 @@ module.exports = class Label { constructor(label) { - let [key, value] = label.split("="); + let [key, value] = label.split(/=(.+)/); Object.defineProperty(this, "key", { set(val) { @@ -28,7 +28,7 @@ module.exports = class Label { Object.defineProperty(this, "label", { set(val) { - let { k, v } = label.split("="); + let { k, v } = label.split(/=(.+)/); label = val; key = k; value = v; diff --git a/system/component/class.labels.js b/system/component/class.labels.js index 697d5e5..5a9e99d 100644 --- a/system/component/class.labels.js +++ b/system/component/class.labels.js @@ -24,7 +24,7 @@ module.exports = class Labels extends Array { filter(query) { - let [k, v] = query.split("="); + let [k, v] = query.split(/=(.+)/); return Array.prototype.filter.call(this, (label) => { @@ -52,4 +52,81 @@ module.exports = class Labels extends Array { return Array.prototype.includes.call(this.toJSON(), str); } + + static deserialize(labels) { + + let result = {}; + + labels.forEach((label) => { + + let [path, value] = label.split(/=(.+)/); + let parts = path.split("."); + let current = result; + + for (let i = 0; i < parts.length; i++) { + + let key = parts[i]; + //let isLast = (i === parts.length - 1); + let isArray = key.endsWith("[]"); + + if (isArray) { + key = key.slice(0, -2); + } + + //if (isLast) { + if (i === parts.length - 1) { + if (isArray) { + + if (!current[key]) { + current[key] = []; + } + + current[key].push(value); + + } else { + + current[key] = value; + + } + } else { + + if (!current[key]) { + current[key] = {}; + } + + current = current[key]; + + } + + } + + }); + + return result; + + } + + static serialize(obj, prefix = "") { + + let result = []; + + for (let key in obj) { + let value = obj[key]; + let newKey = prefix ? `${prefix}.${key}` : key; + + if (typeof value === "object" && !Array.isArray(value)) { + result = result.concat(Labels.serialize(value, newKey)); + } else if (Array.isArray(value)) { + value.forEach(val => { + result.push(`${newKey}[]=${val}`); + }); + } else { + result.push(`${newKey}=${value}`); + } + } + + return result; + + } + }; \ No newline at end of file From 3747b3081f16e462b00df8db511103b3c9037d33 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 27 Mar 2025 13:47:34 +0100 Subject: [PATCH 064/112] fix #522 --- components/mdns/message-handler.js | 27 ++++++++++++++++++++++++++- components/ssdp/message-handler.js | 24 +++++++++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/components/mdns/message-handler.js b/components/mdns/message-handler.js index 20d3dcc..3591958 100644 --- a/components/mdns/message-handler.js +++ b/components/mdns/message-handler.js @@ -14,8 +14,11 @@ module.exports = (scope) => { }); + console.log("match", matchCallbacks, matchCallbacks.indexOf()); + + // listen for newly added items - scope.events.on("added", ({ name, type, _matches }) => { + scope.events.on("add", ({ name, type, _matches }) => { matchCallbacks.push({ name, type, @@ -24,6 +27,28 @@ module.exports = (scope) => { }); + // liste for removed items + scope.events.on("remove", ({ name, type }) => { + try { + + let item = matchCallbacks.find((item) => { + return item.name === name && item.type === type; + }); + + let index = matchCallbacks.indexOf(item); + + if (index !== -1) { + matchCallbacks.splice(index, 1); + } + + } catch (err) { + + logger.error(err, "Could not remove matchCallback"); + + } + }); + + scope.events.on("connected", (ws) => { let questions = scope.items.map(({ type, name }) => { diff --git a/components/ssdp/message-handler.js b/components/ssdp/message-handler.js index 2287895..64bf4e4 100644 --- a/components/ssdp/message-handler.js +++ b/components/ssdp/message-handler.js @@ -24,7 +24,7 @@ module.exports = (scope) => { // listen for newly added items //scope.events.on("added", ({ nt, usn, _matches, headers }) => { - scope.events.on("added", ({ nt, usn, _matches }) => { + scope.events.on("add", ({ nt, usn, _matches }) => { matchCallbacks.push({ nt, usn, @@ -37,6 +37,28 @@ module.exports = (scope) => { }); + // liste for removed items + scope.events.on("remove", ({ name, type }) => { + try { + + let item = matchCallbacks.find((item) => { + return item.name === name && item.type === type; + }); + + let index = matchCallbacks.indexOf(item); + + if (index !== -1) { + matchCallbacks.splice(index, 1); + } + + } catch (err) { + + logger.error(err, "Could not remove matchCallback"); + + } + }); + + scope.events.on("message", (type, headers, description) => { // feedback From fd74e99f7684628b98845969ac40a34aeee93299 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 27 Mar 2025 14:26:00 +0100 Subject: [PATCH 065/112] fix #523 --- components/scenes/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/components/scenes/index.js b/components/scenes/index.js index ebe5676..9602b6b 100644 --- a/components/scenes/index.js +++ b/components/scenes/index.js @@ -39,7 +39,15 @@ class C_SCENES extends COMPONENT { // fix #390 data.triggers.forEach((trigger, i, arr) => { if (!(trigger instanceof Trigger)) { + arr[i] = new Trigger(trigger); + + // data = scene item instance + // same handling as in class.scene.js + arr[i].signal.on("fire", () => { + data.trigger(); + }); + } }); From db7e754ff48e7f57c84b4a5b98305d42280df11d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 27 Mar 2025 15:16:36 +0100 Subject: [PATCH 066/112] `console.log` removed --- components/mdns/message-handler.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/components/mdns/message-handler.js b/components/mdns/message-handler.js index 3591958..9dcf480 100644 --- a/components/mdns/message-handler.js +++ b/components/mdns/message-handler.js @@ -14,9 +14,6 @@ module.exports = (scope) => { }); - console.log("match", matchCallbacks, matchCallbacks.indexOf()); - - // listen for newly added items scope.events.on("add", ({ name, type, _matches }) => { matchCallbacks.push({ From 9ef8cd84226c4a5e047c8f1c7fedeb39f8130ddb Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 28 Mar 2025 13:39:24 +0100 Subject: [PATCH 067/112] logging improved --- routes/auth-handler.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/routes/auth-handler.js b/routes/auth-handler.js index 449799f..7e89741 100644 --- a/routes/auth-handler.js +++ b/routes/auth-handler.js @@ -2,6 +2,8 @@ const jwt = require("jsonwebtoken"); module.exports = (C_USERS, router) => { + const { logger } = C_USERS; + // check if the request came from the same machine // either via reverse proxy or socket // if it came via unix socket, handle the request as authentciated @@ -57,6 +59,7 @@ module.exports = (C_USERS, router) => { }, (err, decoded) => { if (err) { + logger.error(err); res.status(401).end(); } else { From 3d3925ac45e82fec97cb318421ac035649894685 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 28 Mar 2025 13:39:55 +0100 Subject: [PATCH 068/112] fix #541 --- routes/router.auth.js | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/routes/router.auth.js b/routes/router.auth.js index 6c3f485..e66a6aa 100644 --- a/routes/router.auth.js +++ b/routes/router.auth.js @@ -1,9 +1,10 @@ const jwt = require("jsonwebtoken"); const C_USERS = require("../components/users"); +const { logger } = C_USERS; module.exports = (app, router) => { - router.get("/", (req, res) => { + router.get("/check", (req, res) => { if (process.env.API_AUTH_ENABLED === "true") { // override header header token with query token @@ -79,32 +80,45 @@ module.exports = (app, router) => { router.post("/logout", (req, res) => { if (req.headers["x-auth-token"]) { - let decoded = jwt.decode(req.headers["x-auth-token"]); - - if (!decoded.uuid || decoded.uuid !== process.env.UUID) { - res.status(401).end(); - return; - } - - C_USERS.logout(decoded.email, (err, user, success) => { + // TODO: use jwt.verify() instead, otherwise you could trigger a logout for any other user + //let decoded = jwt.decode(req.headers["x-auth-token"]); + jwt.verify(req.headers["x-auth-token"], process.env.USERS_JWT_SECRET, { + algorithms: [process.env.USERS_JWT_ALGORITHM] + }, (err, decoded) => { if (err) { + logger.error(err); res.status(401).end(); } else { - if (!user) { + if (!decoded.uuid || decoded.uuid !== process.env.UUID) { res.status(401).end(); return; } - res.status(200).json({ - success + // NOTE: could this a security risk? + C_USERS.logout(decoded.email, (err, user, success) => { + if (err) { + + res.status(401).end(); + + } else { + + if (!user) { + res.status(401).end(); + return; + } + + res.status(200).json({ + success + }); + + } }); } }); - } else { res.status(401).end(); From 69a4b211f8a3556897c8b6995ff87c39041c0a36 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 23 Apr 2025 13:57:52 +0200 Subject: [PATCH 069/112] docs update + item limits added --- index.js | 3 ++- system/component/class.base.js | 2 ++ system/component/class.common.js | 24 +++++++++++++++++++++++- system/component/class.component.js | 9 +++++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index c0e7069..b1f15c4 100644 --- a/index.js +++ b/index.js @@ -61,7 +61,8 @@ process.env = Object.assign({ MQTT_CLIENT_ID: "OpenHaus", MQTT_PING_INTERVAL: "5000", CONNECT_TIMEOUT: "10000", - HTTP_TRUSTED_PROXYS: "loopback" + HTTP_TRUSTED_PROXYS: "loopback", + ITEM_LIMITS: "" }, env.parsed, process.env); diff --git a/system/component/class.base.js b/system/component/class.base.js index e99a037..bb4c64b 100644 --- a/system/component/class.base.js +++ b/system/component/class.base.js @@ -11,6 +11,7 @@ const Events = require("./class.events.js"); * * @class BASE * + * @property {String} name Name of the component * @property {Boolean} ready Indicate if the component is ready to use * @property {EventEmitter} events node.js EventEmitter instance * @property {Object} hooks Hooks class instance @@ -24,6 +25,7 @@ const Events = require("./class.events.js"); module.exports = class BASE { constructor(name) { + this.name = name; this.ready = false; this.events = new Events(name); this.hooks = new Hooks(); diff --git a/system/component/class.common.js b/system/component/class.common.js index 2d35f92..2581059 100644 --- a/system/component/class.common.js +++ b/system/component/class.common.js @@ -13,9 +13,10 @@ const promisify = require("../../helper/promisify"); * * @extends BASE system/component/class.base.js * - * @param {Object} logger Logger instance + * @param {String} name Component name * * @property {Logger} logger Logger instance + * @property {Number} limit Max number of items the component can have * * @see Logger system/logger/ */ @@ -26,6 +27,27 @@ module.exports = class COMMON extends BASE { super(name); this.logger = Logger.create(name); + this.limit = Number.MAX_SAFE_INTEGER; + + if (process.env.ITEM_LIMITS) { + try { + + let limits = JSON.parse(process.env.ITEM_LIMITS); + this.limit = limits?.[name]; + + } catch (err) { + + this.logger.warn(err, `Could not parse process.env.ITEM_LIMITS`); + process.exit(1); + + } + } + + Object.defineProperty(this, "limit", { + value: this.limit, + configurable: false, + writable: false + }); } diff --git a/system/component/class.component.js b/system/component/class.component.js index 7876022..ede3ed3 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -26,6 +26,10 @@ const PENDING_CHANGE_EVENTS = new Set(); * * @extends COMMON system/component/class.common.js * + * @param {String} name Component name + * @param {Object} schema Joi object schema + * @param {Array} classes Child classes where to inject "scope" property + * * @property {Array} items Store where instance of items are keept * @property {Object} collection MongoDB collection instance * @property {Object} schema Joi Object schema which is extend by a timestamp object: @@ -313,6 +317,11 @@ module.exports = class COMPONENT extends COMMON { return (data) => { return new Promise((resolve, reject) => { + if (this.items.length >= this.limit) { + let err = new Error(`Item limit for ${this.name} reached!`); + return reject(err); + } + let options = Object.assign({ returnDuplicate: true }, {}); From 445385294d525048aa8c78c01dfe77357ce452b7 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 21 May 2025 09:19:55 +0200 Subject: [PATCH 070/112] draft for #6 --- components/devices/!class.interface.js | 763 +++++++++++++++++++++++ components/devices/class.interface.js | 363 ++--------- components/endpoints/class.command.js | 203 ++++-- components/plugins/class.plugin.js | 302 ++++++--- components/plugins/index.js | 4 +- components/plugins/stdout-wrapper.js | 13 + components/plugins/worker.js | 64 ++ index.js | 19 +- routes/router.api.devices.js | 79 ++- routes/router.api.plugins.js | 15 +- system/component/class.events.js | 50 ++ system/init/init.components.js | 6 +- system/worker/class.messageportstream.js | 32 + system/worker/shared.js | 4 + 14 files changed, 1440 insertions(+), 477 deletions(-) create mode 100644 components/devices/!class.interface.js create mode 100644 components/plugins/stdout-wrapper.js create mode 100644 components/plugins/worker.js create mode 100644 system/worker/class.messageportstream.js create mode 100644 system/worker/shared.js diff --git a/components/devices/!class.interface.js b/components/devices/!class.interface.js new file mode 100644 index 0000000..70e7583 --- /dev/null +++ b/components/devices/!class.interface.js @@ -0,0 +1,763 @@ +const Joi = require("joi"); +const { Agent } = require("http"); +const https = require("https"); +const tls = require("tls"); +const mongodb = require("mongodb"); +const { Duplex, PassThrough } = require("stream"); +const { randomUUID } = require("crypto"); +//const path = require("path"); +const { EventEmitter } = require("events"); + +//const Adapter = require("./class.adapter.js"); + + +const timeout = require("../../helper/timeout.js"); +const promisfy = require("../../helper/promisify.js"); + +const PENDING_BRIDGES = new Set(); +const WEBSOCKET_SERVER = new Map(); +const LISTEN_INTERFACES = new Set(); + +/** + * @description + * Implements a interface item, that hides a duplex stream in it, to read/write data from a device interface + * + * @class Interface + * + * @param {Object} obj Object that matches the item schema. See properties below: + * @param {InterfaceStream} stream Instance of a InterfaceStream object + * + * @property {String} _id MongoDB Object id is as string + * @property {String} type Type of the interface, `SERIAL` or `ETHERNET` + * @property {Object} settings Interface specifiy type settings. + * @property {Array} [adapter=["raw"]] Array of adapter to use for encoding/decoding data: `base64`, `eiscp`, `json`, `raw` + * + * @see interfaceStream components/devices/class.interfaceStream.js + * @link https://github.com/OpenHausIO/backend/blob/dev/components/devices/class.interface.js#L27 + * @link https://github.com/OpenHausIO/backend/blob/dev/components/devices/class.interface.js#L40 + */ +module.exports = class Interface { + + constructor(obj/*, stream*/) { + + Object.assign(this, obj); + this._id = String(obj._id); + + /* + // hide stream object on interface + Object.defineProperty(this, "stream", { + value: stream + //value: new InterfaceStream(this) + }); + + // share/set interface stream + // see #86 + //let { interfaceStreams } = global.sharedObjects; + let { interfaceStreams } = require("../../system/shared.js"); + interfaceStreams.set(this._id, stream); + */ + + // hot fix for #350 + /* + Object.defineProperty(this, "cachedAgent", { + value: null, + enumerable: false, + configurable: false, + writable: true + }); + */ + + } + + /** + * @function schema + * Interface schema + * + * @static + * + * @returns {Object} https://joi.dev/api/?v=17.6.0#anyvalidatevalue-options + */ + static schema() { + + // settings from node.js serialport (https://serialport.io/docs/api-bindings-cpp#open) + const SERIAL = Joi.object({ + device: Joi.string().required(), + baudRate: Joi.number().default(9600), + dataBits: Joi.number().allow(5, 6, 7, 8).default(8), + stopBits: Joi.number().allow(1, 1.5, 2).default(1), + parity: Joi.string().valid("even", "odd", "none").default("none"), + rtscts: Joi.boolean().default(false), + xon: Joi.boolean().default(false), + xoff: Joi.boolean().default(false), + xany: Joi.boolean().default(false), + hupcl: Joi.boolean().default(true) + }).required(); + + const ETHERNET = Joi.object({ + //transport: Joi.string().valid("tcp", "udp", "raw").default("tcp"), + socket: Joi.string().valid("tcp", "udp", "raw").default("tcp"), + host: Joi.string().required(), + port: Joi.number().min(1).max(65535).required(), + // https://regex101.com/r/wF7Nfa/1 + // https://stackoverflow.com/a/50080404/5781499 + mac: Joi.string().default(null).allow(null).regex(/^([0-9a-fA-F]{2}[:]){5}[0-9a-fA-F]{2}$/) + }).required(); + + return Joi.object({ + _id: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).default(() => { + return String(new mongodb.ObjectId()); + }), + type: Joi.string().default("ETHERNET"), + settings: Joi.object().when("type", { + is: "ETHERNET", + then: ETHERNET + }).when("type", { + is: "SERIAL", + then: SERIAL + }), + adapter: Joi.array().items("eiscp", "raw", "eol").default(["raw"]), + description: Joi.string().allow(null).default(null) + }); + + } + + + /** + * @function httpAgent + * Creates a custom http agent which use the underalying interfaceStream to forward data + * + * @param {Object} [options] httpAgent options + * + * @returns {Object} httpAgent object + * + * @link https://nodejs.org/dist/latest-v16.x/docs/api/http.html#new-agentoptions + */ + /* + // *OLD* function, see #329 + httpAgent(options) { + + options = Object.assign({ + keepAlive: true, + //maxSockets: 1, + keepAliveMsecs: 3000, // use this as websocket ping/pong value to detect broken connections? + }, options); + + // stream nc tcp socket + // https://stackoverflow.com/a/33514724/5781499 + let agent = new Agent(options); + + // use interface stream as socket + // createConnection returns duplex stream + // https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_agent_createconnection_options_callback + agent.createConnection = (options, cb) => { + + let input = new PassThrough(); + let output = new PassThrough(); + + + this.stream.pipe(input, { end: false }); + output.pipe(this.stream, { end: false }); + + + let socket = Duplex.from({ + readable: input, + writable: output + }); + + // when multiple reuqests are done parallal, sometimes a AbortedErr is thrown + // see #329 for details + // TODO: Check if the upstream is drained, and perform requests in series + // As "quick fix" till a solution is found for #312 catch the trown error + socket.on("error", (err) => { + console.log("Catched error on http.agent.createConnection", err); + this.stream.destroy(); + }); + + /* + [socket, this.stream, input, output].forEach((stream) => { + let cleanup = finished(stream, (err) => { + + console.log("Socket duplex stream ended", err); + + let chunk; + + while (null !== (chunk = input.read())) { + console.log(`>>>>>> Read ${chunk.length} bytes of data...`); + } + + while (null !== (chunk = output.read())) { + console.log(`>>>>>> Read ${chunk.length} bytes of data...`); + } + + input.removeAllListeners(); + output.removeAllListeners(); + + this.stream.unpipe(input); + output.unpipe(this.stream); + + cleanup(); + + }); + }); + * + + + // TODO implement other socket functions?! + //if (process.env.NODE_ENV !== "production") { + socket.ref = (...args) => { console.log("socket.ref called", ...args); }; + socket.unref = (...args) => { console.log("socket.unref called", ...args); }; + socket.setKeepAlive = (...args) => { console.log("socket.setKeepAlive called", ...args); }; + socket.setTimeout = (...args) => { console.log("socket.setTimeout called", ...args); }; + socket.setNoDelay = (...args) => { console.log("socket.setNoDelay called", ...args); }; + // socket.remoteAddress=this.settings.host + // socket.remotePort=this.settings.port + //} + + //return socket; + cb(null, socket); + + }; + + return agent; + + } + */ + + + // NEW VERSION, fix for #329 + /* + httpAgent(options = {}) { + + if (this.cachedAgent) { + return this.cachedAgent; + } + + let agent = new Agent({ + keepAlive: true, + maxSockets: 1, + ...options + }); + + //let settings = this.settings; + + /* + // added for testing a solution for #411 + // does nothing/not work, but feels like can be useful in the future + // see: + // - https://nodejs.org/docs/latest/api/http.html#agentkeepsocketalivesocket + // - https://nodejs.org/docs/latest/api/http.html#agentkeepsocketalivesocket + agent.keepSocketAlive = (socket) => { + console.log("agent.keepSocketAlive called"); + return true; + }; + + agent.reuseSocket = (socket, request) => { + console.log("agent.reuseSocket called"); + }; + * + + agent.createConnection = ({ headers = {} }) => { + + //console.log(`############## Create connection to tcp://${host}:${port}`); + + // cleanup, could be possible be piped from previous "connections" + this.stream.unpipe(); + + /* + // check if passed host/port matches interface settings? + if (host != settings.host || port != settings.port) { + + let msg = "host/port for interface missmatch, expected:\r\n"; + msg += `\thost = ${host}; got = ${settings.host}\r\n`; + msg += `\tport = ${settings.port}; got = ${settings.port}`; + + throw new Error(msg); + + } + * + + //let readable = new PassThrough(); + //let writable = new PassThrough(); + + // convert headers key/values to lowercase + // the string conversion prevents a error thrown for numbers + // this happens for websocket requests, where e.g. "sec-websocket-version=13" + // see snipp below "detect websocket connection with set headers" + headers = Object.keys(headers).reduce((obj, key) => { + obj[key.toLowerCase()] = `${headers[key]}`.toLowerCase(); + return obj; + }, {}); + + + let readable = new Transform({ + transform(chunk, enc, cb) { + + //console.log("[incoming]", chunk); + + // temp fix for #343 + // this is not the prefered fix for this issue + // it should be handled on "stream/socket" level instead + // the issue above occoured with a "shelly 1pm" and parallel requests to /status /ota /settings + // NOTE: what if the body contains json that has a `connection: close` property/key/value? + + // detect websocket connection with set headers, fix #411 + // agent.protocol is never "ws" regardless of the url used in requests + // temp solution, more like a hotfix than a final solution + if (agent.protocol === "http:" && !(headers?.upgrade === "websocket" && headers?.connection === "upgrade")) { + chunk = chunk.toString().replace(/connection:\s?close\r\n/i, "connection: keep-alive\r\n"); + } + + this.push(chunk); + cb(); + + } + }); + + let writable = new Transform({ + transform(chunk, enc, cb) { + + //console.log("[outgoing]", chunk); + + this.push(chunk); + cb(); + + } + }); + + + // TODO Implement "auto-drain" when no upstream is attached -> Move this "lower", e.g. before ws upstream? + /* + let writable = new Transform({ + transform(chunk, enc, cb) { + + debugger; + + //console.log("this.stream",); + console.error(">>>> Write data, flowing?", str.upstream ? true : false, settings.host); + + if (str.upstream) { + this.push(chunk); + } else { + while (this.read() !== null) { + // do nothing with writen input data + // empty readable queue + } + } + + cb(); + + } + }); + * + + + let stream = new Duplex.from({ + readable, + writable + }); + + stream.destroy = () => { + //console.log("socket.destroy();", args); + }; + + stream.ref = () => { + //console.log("socket.unref();", args); + }; + + stream.unref = () => { + //console.log("socket.unref();", args); + }; + + stream.setKeepAlive = () => { + //console.log("socket.setKeepAlive()", args); + }; + + stream.setTimeout = () => { + //console.log("socket.setTimeout();", args); + }; + + stream.setNoDelay = () => { + //console.log("socket.setNotDelay();", args); + }; + + this.stream.pipe(readable, { end: false }); + writable.pipe(this.stream, { end: false }); + + return stream; + + }; + + /* + agent.createConnection = () => { + + let readable = new PassThrough(); + let writable = new PassThrough(); + + let stream = new Duplex.from({ + readable, + writable + }); + + stream.destroy = () => { }; + stream.ref = () => { }; + stream.unref = () => { }; + stream.setKeepAlive = () => { }; + stream.setTimeout = () => { }; + stream.setNoDelay = () => { }; + + Interface.socket({ + iface: this, + events: this.scope.events + }, (err, socket) => { + if (err) { + + stream.emit("error", err); + + } else { + + writable.pipe(socket) + socket.pipe(readable); + + } + }); + + return stream; + + }; + * + + this.cachedAgent = agent; + return agent; + + } + */ + + + httpAgent(options = {}) { + + options = Object.assign({ + keepAlive: true, + maxSockets: 1, + }, options); + + let agent = new Agent(options); + + agent.createConnection = () => { + return this.bridge(); + }; + + return agent; + + } + + httpsAgent(options = {}) { + + options = Object.assign({ + keepAlive: true, + maxSockets: 1, + }, options); + + let agent = new https.Agent(options); + + agent.createConnection = () => { + + let socket = this.bridge(); + let { host, port } = this.settings; + + return tls.connect({ + socket, + host, + port, + ...options + }); + + }; + + return agent; + + } + + + bridge() { + + let { logger } = Interface.scope; + let { host, port, socket: proto } = this.settings; + + let readable = new PassThrough(); + let writable = new PassThrough(); + + let socket = new Duplex.from({ + readable, + writable + }); + + // TODO: destroy ws stream here + //socket.destroy = () => { }; + socket.ref = () => { }; + socket.unref = () => { }; + + // forward calls here to connector + // like socket request/response, use a `type=settings` + socket.setKeepAlive = () => { }; + socket.setTimeout = () => { }; + socket.setNoDelay = () => { }; + + // stream = WebSocket.createWebSocketStream + // see routes/router.api.device.js + Interface.socket(this._id, (err, stream, request) => { + if (err) { + + socket.emit("error", err); + + } else { + + if (process.env.NODE_ENV === "development") { + + socket.once("open", () => { + logger.debug(`Bridge open: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); + }); + + socket.once("close", () => { + logger.debug(`Bridge closed: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); + }); + + } + + stream.once("close", () => { + + // feedback + //logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); + + // TODO: Improve error handling/forwarding/cleanup + // socket.destroy() throws ABORT_ERR after emitting custom connection error + // socket.end() does not throw, but is it enough to cleanup everything? + // does it matter that 2 diffrent errors events are emitted? + // 1) "ECONN*", 2) AbortError after calling socket.destroy() + // The ABORT_ERR is not emitted as error, `// Unhandled 'error' event`... + // on what instance is the error thrown? + + // destroy everything + socket.destroy(); + readable.destroy(); + writable.destroy(); + + }); + + // forward error on WebSocket.createWebSocketStream + // used for syscall errors forwarding from connector + stream.once("error", (...args) => { + logger.warn(args[0], "Error on WebSocket stream"); + socket.emit("error", ...args); + }); + + writable.pipe(stream); + stream.pipe(readable); + + process.nextTick(() => { + socket.emit("open"); + }); + + } + }); + + return socket; + + } + + listen() { + + if (!this.settings?.listen) { + throw new Error(".listen is set to false"); + } + + let emitter = new EventEmitter(); + + Object.assign(emitter, { + interface: this + }); + + LISTEN_INTERFACES.add(emitter); + + return emitter; + + } + + // bridge methods connects adapter with the underlaying network socket + // create a `.socket()` method that returns the palin websocket stream + /* + static _bridge({ device, interface: iface, events }, cb) { + return promisfy((done) => { + + console.log("Bridge request, iface", iface, device); + + // create a random uuid + // used as identifier for responses + let uuid = randomUUID(); + //let uuid = "4c6de542-f89f-42ac-a2b5-1c26f9e68d73"; + + + // timeout after certain time + // no connector available, not mocks or whatever reaseon + let caller = timeout(5000, (timedout, duration, args) => { + if (timedout) { + done(new Error("TIMEDOUT")); + } else { + done(null, args[0]); + } + }); + + + // socket response handler + // listen for uuid and compare it with generated + let handler = ({ stream, type, uuid: id, socket }) => { + if (uuid === id && type === "response" && socket) { + + console.log("adapter", iface.adapter); + + /* + // create adapter stack here + // pass adapter stack as caller argument + //caller(stack); + let stack = iface.adapter.map((name) => { + try { + return require(path.join(process.cwd(), "adapter", `${name}.js`))(); + } catch (err) { + console.error(`Error in adapter "${name}" `, err); + } + }); + + console.log("stack", stack); + + stream = new Adapter(stack, stream, { + emitClose: false, + end: false + }); + + console.log("stream", stream) + * + + caller(stream); + + } + }; + + events.on("socket", handler); + + events.emit("socket", { + uuid, + device, + interface: iface._id, + type: "request" + }); + + }, cb); + } + */ + + static PENDING_BRIDGES = PENDING_BRIDGES; + static WEBSOCKET_SERVER = WEBSOCKET_SERVER; + static LISTEN_INTERFACES = LISTEN_INTERFACES; + + static socket(iface, cb) { + return promisfy((done) => { + + let { logger } = Interface.scope; + let cleanup = () => { }; + + // timeout after certain time + // no connector available, not mocks or whatever reaseon + let caller = timeout(Number(process.env.CONNECT_TIMEOUT), (timedout, duration, args) => { + if (timedout) { + + // feedback + logger.warn(`Connection attempt timedout for interface "${iface}"`); + + // removes pending event listnener + // which may never triggers + cleanup(); + + // pass timeot error + done(new Error("TIMEDOUT")); + + } else { + + // feedback + logger.debug(`Bridge created for interface "${iface}" (${args[1].uuid})`); + + // remove event handler + // remove pending bridge from set + cleanup(); + + // resolve with socket + done(null, ...args); + + } + }); + + // returns removeHandler function + // cleanup registered event handler + // otherwise "MaxListenersExceededWarning: Possible EventEmitter memory leak" + cleanup = Interface.createBridge(iface, caller); + + }, cb); + } + + + static createBridgeRequest(iface) { + return { + iface, + type: "request", + uuid: randomUUID(), + socket: true // TODO: remove, unecessary + // NOTE: add a "options" object for net/udp options? + }; + } + + static parseBridgeRequest(request, cb) { + return ({ uuid, iface, type, socket, stream }) => { + // TODO: remove `socket` property + if (uuid === request.uuid && iface === request.iface && type === "response" && socket) { + + cb(stream); + + } + }; + } + + static createBridge(iface, cb) { + + let { events } = Interface.scope; + let request = Interface.createBridgeRequest(iface); + + PENDING_BRIDGES.add(request); + + let handler = Interface.parseBridgeRequest(request, (socket) => { + // moved below into `removeHandler()` + // removeHandler now gets called for: + // scuccess & error situations like timeout + // see `socket()` above + //events.off("socket", handler); + process.nextTick(cb, socket, request); + }); + + events.emit("socket", request); + events.on("socket", handler); + + return function removeHandler() { + + // NOTE: + // when pending sockets are somehwere stored + // here could they be removed, if needed + + // remove handler, which is never "resolves" + // Interface.parseBridgeRequest cb is never fired + events.off("socket", handler); + + PENDING_BRIDGES.delete(request); + + }; + + } + + +}; \ No newline at end of file diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index 031484d..c86fc27 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -12,6 +12,8 @@ const { randomUUID } = require("crypto"); const timeout = require("../../helper/timeout.js"); const promisfy = require("../../helper/promisify.js"); +const { isMainThread, parentPort } = require("worker_threads"); +const MessagePortStream = require("../../system/worker/class.messageportstream.js"); const PENDING_BRIDGES = new Set(); const WEBSOCKET_SERVER = new Map(); @@ -130,307 +132,6 @@ module.exports = class Interface { * * @link https://nodejs.org/dist/latest-v16.x/docs/api/http.html#new-agentoptions */ - /* - // *OLD* function, see #329 - httpAgent(options) { - - options = Object.assign({ - keepAlive: true, - //maxSockets: 1, - keepAliveMsecs: 3000, // use this as websocket ping/pong value to detect broken connections? - }, options); - - // stream nc tcp socket - // https://stackoverflow.com/a/33514724/5781499 - let agent = new Agent(options); - - // use interface stream as socket - // createConnection returns duplex stream - // https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_agent_createconnection_options_callback - agent.createConnection = (options, cb) => { - - let input = new PassThrough(); - let output = new PassThrough(); - - - this.stream.pipe(input, { end: false }); - output.pipe(this.stream, { end: false }); - - - let socket = Duplex.from({ - readable: input, - writable: output - }); - - // when multiple reuqests are done parallal, sometimes a AbortedErr is thrown - // see #329 for details - // TODO: Check if the upstream is drained, and perform requests in series - // As "quick fix" till a solution is found for #312 catch the trown error - socket.on("error", (err) => { - console.log("Catched error on http.agent.createConnection", err); - this.stream.destroy(); - }); - - /* - [socket, this.stream, input, output].forEach((stream) => { - let cleanup = finished(stream, (err) => { - - console.log("Socket duplex stream ended", err); - - let chunk; - - while (null !== (chunk = input.read())) { - console.log(`>>>>>> Read ${chunk.length} bytes of data...`); - } - - while (null !== (chunk = output.read())) { - console.log(`>>>>>> Read ${chunk.length} bytes of data...`); - } - - input.removeAllListeners(); - output.removeAllListeners(); - - this.stream.unpipe(input); - output.unpipe(this.stream); - - cleanup(); - - }); - }); - * - - - // TODO implement other socket functions?! - //if (process.env.NODE_ENV !== "production") { - socket.ref = (...args) => { console.log("socket.ref called", ...args); }; - socket.unref = (...args) => { console.log("socket.unref called", ...args); }; - socket.setKeepAlive = (...args) => { console.log("socket.setKeepAlive called", ...args); }; - socket.setTimeout = (...args) => { console.log("socket.setTimeout called", ...args); }; - socket.setNoDelay = (...args) => { console.log("socket.setNoDelay called", ...args); }; - // socket.remoteAddress=this.settings.host - // socket.remotePort=this.settings.port - //} - - //return socket; - cb(null, socket); - - }; - - return agent; - - } - */ - - - // NEW VERSION, fix for #329 - /* - httpAgent(options = {}) { - - if (this.cachedAgent) { - return this.cachedAgent; - } - - let agent = new Agent({ - keepAlive: true, - maxSockets: 1, - ...options - }); - - //let settings = this.settings; - - /* - // added for testing a solution for #411 - // does nothing/not work, but feels like can be useful in the future - // see: - // - https://nodejs.org/docs/latest/api/http.html#agentkeepsocketalivesocket - // - https://nodejs.org/docs/latest/api/http.html#agentkeepsocketalivesocket - agent.keepSocketAlive = (socket) => { - console.log("agent.keepSocketAlive called"); - return true; - }; - - agent.reuseSocket = (socket, request) => { - console.log("agent.reuseSocket called"); - }; - * - - agent.createConnection = ({ headers = {} }) => { - - //console.log(`############## Create connection to tcp://${host}:${port}`); - - // cleanup, could be possible be piped from previous "connections" - this.stream.unpipe(); - - /* - // check if passed host/port matches interface settings? - if (host != settings.host || port != settings.port) { - - let msg = "host/port for interface missmatch, expected:\r\n"; - msg += `\thost = ${host}; got = ${settings.host}\r\n`; - msg += `\tport = ${settings.port}; got = ${settings.port}`; - - throw new Error(msg); - - } - * - - //let readable = new PassThrough(); - //let writable = new PassThrough(); - - // convert headers key/values to lowercase - // the string conversion prevents a error thrown for numbers - // this happens for websocket requests, where e.g. "sec-websocket-version=13" - // see snipp below "detect websocket connection with set headers" - headers = Object.keys(headers).reduce((obj, key) => { - obj[key.toLowerCase()] = `${headers[key]}`.toLowerCase(); - return obj; - }, {}); - - - let readable = new Transform({ - transform(chunk, enc, cb) { - - //console.log("[incoming]", chunk); - - // temp fix for #343 - // this is not the prefered fix for this issue - // it should be handled on "stream/socket" level instead - // the issue above occoured with a "shelly 1pm" and parallel requests to /status /ota /settings - // NOTE: what if the body contains json that has a `connection: close` property/key/value? - - // detect websocket connection with set headers, fix #411 - // agent.protocol is never "ws" regardless of the url used in requests - // temp solution, more like a hotfix than a final solution - if (agent.protocol === "http:" && !(headers?.upgrade === "websocket" && headers?.connection === "upgrade")) { - chunk = chunk.toString().replace(/connection:\s?close\r\n/i, "connection: keep-alive\r\n"); - } - - this.push(chunk); - cb(); - - } - }); - - let writable = new Transform({ - transform(chunk, enc, cb) { - - //console.log("[outgoing]", chunk); - - this.push(chunk); - cb(); - - } - }); - - - // TODO Implement "auto-drain" when no upstream is attached -> Move this "lower", e.g. before ws upstream? - /* - let writable = new Transform({ - transform(chunk, enc, cb) { - - debugger; - - //console.log("this.stream",); - console.error(">>>> Write data, flowing?", str.upstream ? true : false, settings.host); - - if (str.upstream) { - this.push(chunk); - } else { - while (this.read() !== null) { - // do nothing with writen input data - // empty readable queue - } - } - - cb(); - - } - }); - * - - - let stream = new Duplex.from({ - readable, - writable - }); - - stream.destroy = () => { - //console.log("socket.destroy();", args); - }; - - stream.ref = () => { - //console.log("socket.unref();", args); - }; - - stream.unref = () => { - //console.log("socket.unref();", args); - }; - - stream.setKeepAlive = () => { - //console.log("socket.setKeepAlive()", args); - }; - - stream.setTimeout = () => { - //console.log("socket.setTimeout();", args); - }; - - stream.setNoDelay = () => { - //console.log("socket.setNotDelay();", args); - }; - - this.stream.pipe(readable, { end: false }); - writable.pipe(this.stream, { end: false }); - - return stream; - - }; - - /* - agent.createConnection = () => { - - let readable = new PassThrough(); - let writable = new PassThrough(); - - let stream = new Duplex.from({ - readable, - writable - }); - - stream.destroy = () => { }; - stream.ref = () => { }; - stream.unref = () => { }; - stream.setKeepAlive = () => { }; - stream.setTimeout = () => { }; - stream.setNoDelay = () => { }; - - Interface.socket({ - iface: this, - events: this.scope.events - }, (err, socket) => { - if (err) { - - stream.emit("error", err); - - } else { - - writable.pipe(socket) - socket.pipe(readable); - - } - }); - - return stream; - - }; - * - - this.cachedAgent = agent; - return agent; - - } - */ - - httpAgent(options = {}) { options = Object.assign({ @@ -693,6 +394,7 @@ module.exports = class Interface { }; } + // TODO: Rename to parseBridgeResponse static parseBridgeRequest(request, cb) { return ({ uuid, iface, type, socket, stream }) => { // TODO: remove `socket` property @@ -720,8 +422,63 @@ module.exports = class Interface { process.nextTick(cb, socket, request); }); - events.emit("socket", request); - events.on("socket", handler); + // check if in worker trhead + // if yes: post message to main thread + // listen for response + // if no: do nothign + + if (!isMainThread) { + + let handleMessage = (data) => { + if (data.component === "devices" && data.event === "socket" && data.uuid === request.uuid && data.type === "response" && data.port) { + + // data.event = socket + // data.uuid = request uuid + // data.iface = iface mongodb id + // data.type = reponse + // data.port = message port + + // remove message handler + parentPort.off("message", handleMessage); + + // create stream from message port + // which is used as the underlaying "socket" + let stream = new MessagePortStream(data.port); + + // call handler + // NOTE: emit "socket" event? + // to notify other threads/things that a response was send + // but without the stream/message port, this has no real benefit + Reflect.apply(handler, this, [{ + uuid: data.uuid, + iface: data.iface, + type: "response", + socket: true, + stream + }]); + + + } + }; + + parentPort.on("message", handleMessage); + + // tell main we are waiting for a socket + parentPort.postMessage({ + component: "devices", + event: "socket", + request + }); + + // forward message via events + events.emit("socket", request); + + } else { + + events.emit("socket", request); + events.on("socket", handler); + + } return function removeHandler() { diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index ff3fb45..78844c5 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -7,6 +7,10 @@ const { interfaces } = require("../../system/shared.js"); const Param = require("./class.param.js"); const Params = require("./class.params.js"); +const { parentPort, isMainThread } = require("worker_threads"); +const { commands } = require("../../system/worker/shared.js"); +const { randomUUID } = require("crypto"); + /** * @description * Single command @@ -21,11 +25,7 @@ const Params = require("./class.params.js"); * @property {String} alias Machine friendly name, e.g.: `POWER_ON` * @property {String} [identifier=null] Simple/custom identifiert for custom command handler * @property {String|Buffer} payload The payload to send over the device interface - * @property {String} [description=null] Command description, displayed on the frontend - * @property {Array} params Possible parameter for the command - * @property {String} params[].key Custom key - * @property {String} params[].type Type of value: "string", "number" or "boolean" - * @property {String|Number|Boolean} params[].value Value to set + * * @property {Number} [params[].min=0] Min value if param type is a number (`type=number`) * @property {Number} [params[].max=100] Max value if param type is a number (`type=number`) * @@ -93,6 +93,31 @@ module.exports = class Command { } }); + + if (process.env.WORKER_THREADS_ENABLED === "true" && !isMainThread) { + parentPort.on("message", (msg) => { + if (msg.component === "endpoints" && msg.type === "request" && msg.method === "trigger" && msg.command === this._id) { + + //console.log("Received command trigger request", msg); + + this.trigger(msg.params, (...args) => { + + //console.log("TRigger executed", args); + + parentPort.postMessage({ + uuid: msg.uuid, + type: "response", + method: "trigger", + args + }); + + }); + + } + }); + } + + // command duration timeout this.#privates.set("timeout", Number(process.env.COMMAND_RESPONSE_TIMEOUT)); @@ -159,7 +184,17 @@ module.exports = class Command { * @param {Function} handler */ setHandler(handler) { + this.#privates.set("handler", handler); + + if (!isMainThread) { + parentPort.postMessage({ + component: "endpoints", + method: "setHandler", + command: this._id + }); + } + } @@ -205,76 +240,136 @@ module.exports = class Command { */ trigger(params, cb) { - let { events, logger } = Command.scope; - logger.verbose(`Trigger command "${this.name}"`, this); + // when kein worker thread enabled, alles sinlge process = defualt beaufer + // wenn worker thread prüfen ob im main oder worker + // when main = post to worker + // when worker = handler like default beaufer - if (!cb && params instanceof Function) { - cb = params; - params = []; - } + let wrapper = () => { - if (!params && !cb) { - params = []; - cb = () => { }; - } + let { events, logger } = Command.scope; + logger.verbose(`Trigger command "${this.name}"`, this); - let worker = this.#privates.get("handler"); - let iface = interfaces.get(this.interface); + if (!cb && params instanceof Function) { + cb = params; + params = []; + } - // moved up, and used as callback debounce function - // see #528, timeout helper has a internal "called" flag - let timer = _timeout(this.#privates.get("timeout"), (timedout, duration, args) => { - if (timedout) { + if (!params && !cb) { + params = []; + cb = () => { }; + } - logger.warn(`Command timedout for "${this._id}"! Execution was not successful, worker function:`, worker); - cb(null, false); + let worker = this.#privates.get("handler"); + let iface = interfaces.get(this.interface); - } else { + // moved up, and used as callback debounce function + // see #528, timeout helper has a internal "called" flag + let timer = _timeout(this.#privates.get("timeout"), (timedout, duration, args) => { + if (timedout) { - logger.debug(`Command handler for "${this._id}" executed in ${duration}ms, arguments:`, args); - cb(...args); + logger.warn(`Command timedout for "${this._id}"! Execution was not successful, worker function:`, worker); + cb(null, false); - } - }); + } else { + + logger.debug(`Command handler for "${this._id}" executed in ${duration}ms, arguments:`, args); + cb(...args); + + } + }); + + try { + params = params.map((obj) => { - try { - params = params.map((obj) => { + let param = this.params.find((param) => { + return param.key === obj.key; + }); + + if (!param) { + return obj; + } + + return Param.merge(param, obj); - let param = this.params.find((param) => { - return param.key === obj.key; }); + } catch (err) { - if (!param) { - return obj; - } + logger.warn(err, `Passed params to command "${this.name}" are invalid`, params); - return Param.merge(param, obj); + timer(err, false); + return; - }); - } catch (err) { + } + + // convert to params array with .lean method + params = new Params(...params); - logger.warn(err, `Passed params to command "${this.name}" are invalid`, params); + if (!iface) { + let err = new Error(`Interface "${this.interface}" not found, cant write to it.`); + err.code = "NO_INTERFACE"; + return timer(err, false); + } - timer(err, false); - return; + // emit command event, see #529 + events.emit("command", this, params); - } + // handle timeout stuff here? + // when so, timeout applys to custom functions too! + worker.call(this, this, iface, params, timer); - // convert to params array with .lean method - params = new Params(...params); + }; - if (!iface) { - let err = new Error(`Interface "${this.interface}" not found, cant write to it.`); - err.code = "NO_INTERFACE"; - return timer(err, false); - } + if (process.env.WORKER_THREADS_ENABLED === "true") { + if (isMainThread) { + + // im main + // post message to worker + if (commands.has(this._id)) { + + let worker = commands.get(this._id); + let uuid = randomUUID(); + + worker.postMessage({ + component: "endpoints", + method: "trigger", + params, + type: "request", + uuid, + command: this._id + }); + + let messageHandler = (msg) => { + if (msg.type === "response" && msg.uuid === uuid && msg.method === "trigger") { - // emit command event, see #529 - events.emit("command", this, params); + //console.log("cmd Response received", msg) - // handle timeout stuff here? - // when so, timeout applys to custom functions too! - worker.call(this, this, iface, params, timer); + worker.off("messsage", messageHandler); + Reflect.apply(cb, this, msg.args); + + } + }; + + worker.on("message", messageHandler); + + } else { + + console.log("No hanlder registered"); + + } + + } else { + + // in worker + wrapper(); + + } + } else { + + // in main + wrapper(); + + } } diff --git a/components/plugins/class.plugin.js b/components/plugins/class.plugin.js index e122b58..6c48105 100644 --- a/components/plugins/class.plugin.js +++ b/components/plugins/class.plugin.js @@ -6,8 +6,12 @@ const logger = require("../../system/logger/index.js"); const semver = require("semver"); //const pkg = require("../../package.json"); const uuid = require("uuid"); +const { Worker, isMainThread } = require("worker_threads"); +const stdio = require("./stdout-wrapper.js"); const Item = require("../../system/component/class.item.js"); +const { connections, commands } = require("../../system/worker/shared.js"); + //const Bootstrap = require("./class.bootstrap.js"); @@ -50,6 +54,13 @@ module.exports = class Plugin extends Item { writable: true }); + Object.defineProperty(this, "worker", { + value: null, + configurable: false, + enumerable: false, + writable: true + }); + } static schema() { @@ -152,140 +163,261 @@ module.exports = class Plugin extends Item { * Start installed plugin */ start() { - if (!this.started) { - if (this.enabled) { - - // feedback - logger.debug(`Start plugin "${this.name}"...`); + return new Promise((resolve, reject) => { + try { - //let json = {}; - let plugin = path.resolve(process.cwd(), "plugins", this.uuid); - //let file = path.resolve(plugin, "package.json"); + if (!this.started) { + if (this.enabled) { + if (process.env.WORKER_THREADS_ENABLED === "true" && isMainThread) { + + //console.log("Starte worker/plugin", this.uuid) + + let worker = this.worker = new Worker(__dirname + "/worker.js", { + workerData: { + plugin: this + }, + env: { + ...process.env, + DEBUG_COLORS: "true", + //LOG_TARGET: "true" + }, + stderr: true, + stdout: true, + //execArgv: ['--max-old-space-size=64'] + name: this.name, + resourceLimits: { + maxOldGenerationSizeMb: 25 + //maxYoungGenerationSizeMb: 16, + //codeRangeSizeMb: 64 + } + }); - // 1) check if plugin is compatible - // removed, see #511 - /* - try { + // feedback + logger.debug(`#${worker.threadId} = ${this.uuid}`); - let content = fs.readFileSync(file); - json = JSON.parse(content); + if (process.env.NODE_ENV === "development") { - // check in further version: - // json?.openhaus?.backend || json?.openhaus?.versions?.backend - // when a plugin provides frontend stuff or store data about itself in openhaus.plugin/openhaus.intents - if (!semver.satisfies(pkg.version, json?.backend)) { - this.logger.warn(`Plugin "${this.name}" is incompatible. It may work not properly or break something!`); - } + // print debug thread id at the beginnung of a chunk/line + worker.stdout.pipe(stdio(worker.threadId)).pipe(process.stdout); + worker.stderr.pipe(stdio(worker.threadId)).pipe(process.stderr); - } catch (err) { + } else { - this.logger.warn(err, `Could not check plugin compatibility for plugin "${this.name}"`); + // print 1:1 to stdout + worker.stdout.pipe(process.stdout); + worker.stderr.pipe(process.stderr); - if (err.code === "ENOENT") { - this.logger.warn(`package.json for plugin "${this.name}" not found, try to start it anyway...`); - } else { - this.logger.error(err); - } + } - } - */ + worker.once("error", (err) => { - // 2) start plugin - if (fs.existsSync(plugin)) { + logger.error(err, `Worker ${worker.threadId} (${this.uuid}) error`); - /* - let init = (dependencies, cb) => { - try { + this.started = false; + this.worker = null; - // NOTE: Monkey patch ready/abort method to init? - // A plugin could siganlize if its ready or needs to be restarted - /* - let init = new Promise((resolve, reject) => { - init.ready = resolve; - init.abort = reject; }); - * - const granted = dependencies.every((c) => { - if (this.intents.includes(c)) { + worker.once("online", () => { - return true; + // feedback + logger.info(`Plugin "${this.name}" worker thread online`); - } else { + this.started = true; + resolve(); - logger.warn(`Plugin ${this.uuid} (${this.name}) wants to access not registerd intens "${c}"`); - return false; + let { events } = Plugin.scope; + events.emit("start", this); - } }); - if (granted) { + worker.once("exit", (code) => { - let components = dependencies.map((name) => { - return require(path.resolve(process.cwd(), `components/${name}`)); - }); + // feedback + logger.info(`Plugin "${this.name}" worker thread exited, code=${code}`); - cb(this, components); - return init; + this.started = false; + this.worker = null; + //this.timestamps.stopped = Date.now(); - } else { + let { events } = Plugin.scope; + events.emit("stop", this); - throw new Error(`Unregisterd intents access approach`); + }); - } + worker.on("message", (message) => { + if (message.component === "devices" && message.event === "socket" && message.request.type === "request") { - } catch (err) { + //console.log("Set iface request ", message.request.uuid, "to worker", worker.threadId); + connections.set(message.request.uuid, worker); - logger.error(err, `Plugin could not initalize!`, err.message); - throw err; + } else if (message.component === "endpoints" && message.method === "setHandler") { - } - }; - */ + // tell main thread which worker handles + // which command execution + commands.set(message.command, worker); - try { + } + }); - let init = Plugin.init(this, this.logger); - //init[Symbol.for("uuid")] = this.uuid; + } else { + + // feedback + logger.debug(`Start plugin "${this.name}"...`); + + //let json = {}; + let plugin = path.resolve(process.cwd(), "plugins", this.uuid); + //let file = path.resolve(plugin, "package.json"); + + // 1) check if plugin is compatible + // removed, see #511 + /* + try { + + let content = fs.readFileSync(file); + json = JSON.parse(content); + + // check in further version: + // json?.openhaus?.backend || json?.openhaus?.versions?.backend + // when a plugin provides frontend stuff or store data about itself in openhaus.plugin/openhaus.intents + if (!semver.satisfies(pkg.version, json?.backend)) { + this.logger.warn(`Plugin "${this.name}" is incompatible. It may work not properly or break something!`); + } + + } catch (err) { + + this.logger.warn(err, `Could not check plugin compatibility for plugin "${this.name}"`); + + if (err.code === "ENOENT") { + this.logger.warn(`package.json for plugin "${this.name}" not found, try to start it anyway...`); + } else { + this.logger.error(err); + } + + } + */ + + // 2) start plugin + if (fs.existsSync(plugin)) { + + /* + let init = (dependencies, cb) => { + try { + + // NOTE: Monkey patch ready/abort method to init? + // A plugin could siganlize if its ready or needs to be restarted + /* + let init = new Promise((resolve, reject) => { + init.ready = resolve; + init.abort = reject; + }); + * + + const granted = dependencies.every((c) => { + if (this.intents.includes(c)) { + + return true; + + } else { + + logger.warn(`Plugin ${this.uuid} (${this.name}) wants to access not registerd intens "${c}"`); + return false; + + } + }); + + if (granted) { + + let components = dependencies.map((name) => { + return require(path.resolve(process.cwd(), `components/${name}`)); + }); + + cb(this, components); + return init; + + } else { + + throw new Error(`Unregisterd intents access approach`); + + } + + } catch (err) { + + logger.error(err, `Plugin could not initalize!`, err.message); + throw err; + + } + }; + */ + + try { + + let init = Plugin.init(this, this.logger); + //init[Symbol.for("uuid")] = this.uuid; + + let returns = require(path.resolve(plugin, "index.js"))(this, this.logger, init); + + if (returns !== init) { + throw new Error("Invalid init function returnd!"); + } + + this.started = true; + + this.logger.debug("Plugin started"); + resolve(); + + } catch (err) { + + logger.error(err, `Error in plugin "${this.name}": `); + throw err; - let returns = require(path.resolve(plugin, "index.js"))(this, this.logger, init); + } - if (returns !== init) { - throw new Error("Invalid init function returnd!"); - } + } else { + + logger.error(`Could not found plugin file/folder "${this.uuid}"`); + throw new Error("Plugin not found"); + + } - this.started = true; + } + } else { - } catch (err) { + let err = Error("Plugin is not enabled!"); + err.code = "PLUGIN_NOT_ENABLED"; - logger.error(err, `Error in plugin "${this.name}": `); throw err; } } else { - logger.error(`Could not found plugin file/folder "${this.uuid}"`); - throw new Error("Plugin not found"); + resolve(); } - } else { + //this.timestamps.started = Date.now(); - let err = Error("Plugin is not enabled!"); - err.code = "PLUGIN_NOT_ENABLED"; + } catch (err) { - throw err; + reject(err); } - } + }); } - /* - stop(){ - // TODO: Implement - // When plugins run in seperate worker process + async stop() { + if (this?.worker) { + + let worker = this.worker; + // worker.postMessage({command: "exit"}); + await worker.terminate(); + + } else { + + return true; + + } } - */ }; \ No newline at end of file diff --git a/components/plugins/index.js b/components/plugins/index.js index a9a59e2..d1326c7 100644 --- a/components/plugins/index.js +++ b/components/plugins/index.js @@ -31,7 +31,9 @@ class C_PLUGINS extends COMPONENT { // inject logger, collection and schema object // super(logger, mongodb.client.collection("plugins"), { - super("plugins", Plugin.schema()); + super("plugins", Plugin.schema(), [ + Plugin + ]); this.hooks.post("add", (data, next) => { // NOTE: use path to plugins set via env, see #432 diff --git a/components/plugins/stdout-wrapper.js b/components/plugins/stdout-wrapper.js new file mode 100644 index 0000000..0813a32 --- /dev/null +++ b/components/plugins/stdout-wrapper.js @@ -0,0 +1,13 @@ +//const { createInterface } = require("readline"); +const { Transform } = require("stream"); + +module.exports = (id) => { + return new Transform({ + transform(chunk, enc, cb) { + + this.push(`[#${id}]` + chunk); + cb(null); + + } + }); +}; \ No newline at end of file diff --git a/components/plugins/worker.js b/components/plugins/worker.js new file mode 100644 index 0000000..4398118 --- /dev/null +++ b/components/plugins/worker.js @@ -0,0 +1,64 @@ +// init logger +// init components +// create wraper init func +// call plugin with init func +const { workerData, isMainThread, } = require("worker_threads"); + +if (isMainThread) { + process.exit(123); +} + +// "enable colors" +process.stdout.isTTY = true; +process.stderr.isTTY = true; + +process.env = Object.freeze({ ...process.env }); + + +//require("./system/shared.js"); +//require("./system/dispatcher.js"); + +const logger = require("../../system/logger"); +const log = logger.create(`plugins/${workerData.plugin.uuid}`); + +const init_db = require("../..//system/init/init.database.js")(logger); +const init_components = require("../../system/init/init.components.js")(logger); + +const Plugin = require("./class.plugin.js"); + + + +(async () => { + try { + + let data = workerData.plugin; + + // init database & components + await init_db(); + await init_components(data.intents); + + // feedback + log.info("System init done"); + + let plugin = new Plugin(data); + await plugin.start(); + + setInterval(() => { + + let mem = process.memoryUsage(); + console.group(Date.now()); + console.log(`RSS: ${Number(mem.rss / 1024 / 1024).toFixed(2)} MB`); + console.log(`Heap Used: ${Number(mem.heapUsed / 1024 / 1024).toFixed(2)} MB`); + console.log(`External: ${Number(mem.external / 1024 / 1024).toFixed(2)} MB`); + console.log(); + console.groupEnd(); + + }, 30_000); + + } catch (err) { + + log.error(err, "Could not initalize system"); + process.exit(1); + + } +})(); \ No newline at end of file diff --git a/index.js b/index.js index b1f15c4..25de46d 100644 --- a/index.js +++ b/index.js @@ -62,7 +62,8 @@ process.env = Object.assign({ MQTT_PING_INTERVAL: "5000", CONNECT_TIMEOUT: "10000", HTTP_TRUSTED_PROXYS: "loopback", - ITEM_LIMITS: "" + ITEM_LIMITS: "", + WORKER_THREADS_ENABLED: "false" }, env.parsed, process.env); @@ -288,3 +289,19 @@ const starter = new Promise((resolve) => { }); }); + + + +if (process.env.WORKER_THREADS_ENABLED === "true") { + setInterval(() => { + + let mem = process.memoryUsage(); + console.group(Date.now()); + console.log(`RSS: ${Number(mem.rss / 1024 / 1024).toFixed(2)} MB`); + console.log(`Heap Used: ${Number(mem.heapUsed / 1024 / 1024).toFixed(2)} MB`); + console.log(`External: ${Number(mem.external / 1024 / 1024).toFixed(2)} MB`); + console.log(); + console.groupEnd(); + + }, 30_000); +} \ No newline at end of file diff --git a/routes/router.api.devices.js b/routes/router.api.devices.js index 919c640..592f056 100644 --- a/routes/router.api.devices.js +++ b/routes/router.api.devices.js @@ -3,6 +3,10 @@ const WebSocket = require("ws"); const C_DEVICES = require("../components/devices"); const { WEBSOCKET_SERVER } = require("../components/devices/class.interface.js"); +const { connections } = require("../system/worker/shared.js"); +const MessagePortStream = require("../system/worker/class.messageportstream.js"); +const { MessageChannel } = require("worker_threads"); + //const iface_locked = new Map(); // move that to "event bus" @@ -96,37 +100,66 @@ module.exports = (app, router) => { let stream = WebSocket.createWebSocketStream(ws); - ws.once("close", (code) => { - if (code >= 4000 && code <= 4999) { + if (process.env.WORKER_THREADS_ENABLED === "true") { + + if (connections.has(req.query.uuid)) { - // error on connection attempt - // underlaying os trhowed error - // build custom connection error - let err = new Error("Bridging failed"); - err.code = ERROR_CODE_MAPPINGS[code]; - err.errno = ERROR_CODE_MAPPINGS[err.code]; - err.syscall = "connect"; + let worker = connections.get(req.query.uuid); + let { port1, port2 } = new MessageChannel(); - stream.emit("error", err); + let socket = new MessagePortStream(port1); - } else { + stream.pipe(socket); + socket.pipe(stream); - // no clue why closed, cleanup anyway - // TODO: check code and decide if error or success closing - //stream.emit("close"); // desotroy() emit close event(!|?) - stream.destroy(); + worker.postMessage({ + component: "devices", + event: "socket", + uuid: req.query.uuid, + iface: req.params._iid, + type: "response", + port: port2 + }, [port2]); + + // cleanup + connections.delete(req.query.uuid); } - }); + } else { - C_DEVICES.events.emit("socket", { - uuid: req.query.uuid, - iface: req.params._iid, - type: "response", - socket: true, - stream - }); + ws.once("close", (code) => { + if (code >= 4000 && code <= 4999) { + + // error on connection attempt + // underlaying os trhowed error + // build custom connection error + let err = new Error("Bridging failed"); + err.code = ERROR_CODE_MAPPINGS[code]; + err.errno = ERROR_CODE_MAPPINGS[err.code]; + err.syscall = "connect"; + + stream.emit("error", err); + + } else { + + // no clue why closed, cleanup anyway + // TODO: check code and decide if error or success closing + //stream.emit("close"); // desotroy() emit close event(!|?) + stream.destroy(); + + } + }); + + C_DEVICES.events.emit("socket", { + uuid: req.query.uuid, + iface: req.params._iid, + type: "response", + socket: true, + stream + }); + + } } else { diff --git a/routes/router.api.plugins.js b/routes/router.api.plugins.js index 434b65a..229712f 100644 --- a/routes/router.api.plugins.js +++ b/routes/router.api.plugins.js @@ -167,10 +167,10 @@ module.exports = (app, router) => { } }); - router.post("/:_id/start", (req, res) => { + router.post("/:_id/start", async (req, res) => { try { - req.item.start(); + await req.item.start(); res.json(req.item); } catch (err) { @@ -183,19 +183,20 @@ module.exports = (app, router) => { } }); - /* - router.post("/:_id/stop", (req, res) => { + router.post("/:_id/stop", async (req, res) => { try { - req.item.stop(); + await req.item.stop(); res.json(req.item); } catch (err) { - res.status(500).end(err); + res.status(500).json({ + error: err.message, + stack: err.stack + }); } }); - */ }; \ No newline at end of file diff --git a/system/component/class.events.js b/system/component/class.events.js index b4b9488..bd72911 100644 --- a/system/component/class.events.js +++ b/system/component/class.events.js @@ -1,4 +1,7 @@ const { EventEmitter } = require("events"); +const { isMainThread, BroadcastChannel, threadId } = require("worker_threads"); + +const channel = new BroadcastChannel("events"); module.exports = class Events extends EventEmitter { @@ -7,9 +10,34 @@ module.exports = class Events extends EventEmitter { static emitter = new EventEmitter(); constructor(name) { + super(); + this.name = name; this._registeredEvents = new Set(); + + if (process.env.WORKER_THREADS_ENABLED === "true") { + channel.addEventListener("message", ({ data }) => { + if (data.origin !== threadId && name === data.message.component) { + + // without this, /api/system/events does not work correctly + // this results that if a plugin adds a device, its not shown in the UI + if (isMainThread) { + Events.emitter.emit(Events.emitted, { + component: this.name, + event: data.message.event, + args: data.message.args + }); + } + + // call `.emit` creates a loop, because `emitter(emitted)` pics up the event + //events.emit(event.event, ...event.args) + EventEmitter.prototype.emit.call(this, data.message.event, ...data.message.args); + + } + }); + } + } emit(event, ...args) { @@ -35,6 +63,28 @@ module.exports = class Events extends EventEmitter { args }); + if (process.env.WORKER_THREADS_ENABLED === "true") { + if (!["ready", "error"].includes(event)) { + try { + + channel.postMessage({ + origin: threadId, + message: { + component: this.name, + event, + args + } + }); + + } catch (err) { + + //console.log(event, args); + //console.error("Error, could not post message", err); + + } + } + } + return super.emit(event, ...args); } diff --git a/system/init/init.components.js b/system/init/init.components.js index 513e018..9bcc3e5 100644 --- a/system/init/init.components.js +++ b/system/init/init.components.js @@ -1,12 +1,12 @@ const path = require("path"); module.exports = (logger) => { - return () => { + return (intents) => { return new Promise((resolve) => { logger.debug("Init components..."); - const componentNames = [ + const componentNames = (intents || [ "devices", "endpoints", "plugins", @@ -19,7 +19,7 @@ module.exports = (logger) => { "mqtt", "mdns", "scenes" - ].sort(() => { + ]).sort(() => { // pseudo randomize start/init of components // https://stackoverflow.com/a/18650169/5781499 diff --git a/system/worker/class.messageportstream.js b/system/worker/class.messageportstream.js new file mode 100644 index 0000000..d9eb11c --- /dev/null +++ b/system/worker/class.messageportstream.js @@ -0,0 +1,32 @@ +const { Duplex } = require("stream"); + +module.exports = class MessagePortStream extends Duplex { + + constructor(port) { + super({ objectMode: true }); + this.port = port; + + this.port.on("message", (msg) => { + this.push(msg); + }); + + this.port.on("close", () => { + this.push(null); + }); + } + + _read() { + // not used, handled via .push() above + } + + _write(chunk, encoding, callback) { + this.port.postMessage(chunk); + callback(); + } + + _final(callback) { + this.port.close(); + callback(); + } + +}; \ No newline at end of file diff --git a/system/worker/shared.js b/system/worker/shared.js new file mode 100644 index 0000000..d79a5d0 --- /dev/null +++ b/system/worker/shared.js @@ -0,0 +1,4 @@ +module.exports = { + connections: new Map(), + commands: new Map() +}; \ No newline at end of file From 5b370a803957cf410bb7cf0739b8b4c3100cdaf7 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 21 May 2025 09:20:29 +0200 Subject: [PATCH 071/112] comment/todo added --- routes/router.system.connector.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/routes/router.system.connector.js b/routes/router.system.connector.js index a4f2db9..6c37ca1 100644 --- a/routes/router.system.connector.js +++ b/routes/router.system.connector.js @@ -54,9 +54,14 @@ module.exports = (router) => { C_DEVICES.events.on("socket", (obj) => { if (obj.type === "request") { + wss.clients.forEach((ws) => { + // TODO: check if readyState = open + //if (ws.readyState === WebSocket.OPEN) { ws.send(JSON.stringify(obj)); + //} }); + } }); From 8d720a47210abbb774bba48d37277af72a37fb65 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 21 May 2025 13:19:52 +0200 Subject: [PATCH 072/112] draft for #542 --- components/scenes/class.input.js | 39 ++++++++++++++++++++++++++++++++ components/scenes/class.scene.js | 24 ++++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 components/scenes/class.input.js diff --git a/components/scenes/class.input.js b/components/scenes/class.input.js new file mode 100644 index 0000000..f867c3a --- /dev/null +++ b/components/scenes/class.input.js @@ -0,0 +1,39 @@ +const Joi = require("joi"); + +module.exports = class Input { + + static schema() { + return Joi.object({ + name: Joi.string().required(), + type: Joi.string().valid("number", "string", "boolean").required(), + key: Joi.string().required() + }).when(".type", { + switch: [{ + is: "number", + then: Joi.object({ + value: Joi.number().default(null).allow(null), + min: Joi.number().default(0), + max: Joi.number().default(100), + //default: Joi.number().allow(null).default(null) + }) + }, { + is: "string", + then: Joi.object({ + value: Joi.string().default(null).allow(null), + //default: Joi.string().allow(null).default(null) + }) + }, { + is: "boolean", + then: Joi.object({ + value: Joi.boolean().default(null).allow(null), + //default: Joi.boolean().allow(null).default(null) + }) + }] + }); + } + + static validate(data) { + return Input.schema().validate(data); + } + +}; \ No newline at end of file diff --git a/components/scenes/class.scene.js b/components/scenes/class.scene.js index 5e85a0a..f114d5b 100644 --- a/components/scenes/class.scene.js +++ b/components/scenes/class.scene.js @@ -6,6 +6,7 @@ const debounce = require("../../helper/debounce.js"); const Makro = require("./class.makro.js"); const Trigger = require("./class.trigger.js"); +const Input = require("./class.input.js"); const Item = require("../../system/component/class.item.js"); @@ -138,6 +139,7 @@ module.exports = class Scene extends Item { triggers: Joi.array().items(Trigger.schema()).default([]), visible: Joi.boolean().default(true), icon: Joi.string().allow(null).default(null), + inputs: Joi.array().items(Input.schema()).default([]), states: Joi.object({ running: Joi.boolean().default(false), aborted: Joi.boolean().default(false), @@ -160,10 +162,10 @@ module.exports = class Scene extends Item { } - trigger() { + trigger(inputs) { let { logger } = Scene.scope; - logger.info(`Trigger scene "${this.name}" (${this._id})`); + logger.info(`Trigger scene "${this.name}" (${this._id}), inputs:`, inputs); // fix #507 // stop previous running scene @@ -172,6 +174,19 @@ module.exports = class Scene extends Item { this._ac.abort(); } + // Without this, when the scene is done + // default values are set for input + // we need to ensure that the "input" value are correct saved + inputs?.forEach(({ key, value }) => { + + let input = this.inputs.find((input) => { + return input.key === key; + }); + + input.value = value; + + }); + this.timestamps.started = Date.now(); let ac = new AbortController(); this._ac = ac; @@ -198,6 +213,11 @@ module.exports = class Scene extends Item { }).map((makro) => { + // monkey patch input/params array + if (makro.type === "command") { + makro.params = inputs; + } + // bind scope to method return makro.execute.bind(makro); From cde10366a9b34b9fac048d6a03e50bec5a1cac50 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 21 May 2025 13:37:41 +0200 Subject: [PATCH 073/112] cleanup for draft #6 improved --- components/plugins/class.plugin.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/components/plugins/class.plugin.js b/components/plugins/class.plugin.js index 6c48105..fceb633 100644 --- a/components/plugins/class.plugin.js +++ b/components/plugins/class.plugin.js @@ -240,6 +240,18 @@ module.exports = class Plugin extends Item { this.worker = null; //this.timestamps.stopped = Date.now(); + for (const [key, value] of connections) { + if (value === worker) { + connections.delete(key); + } + } + + for (const [key, value] of commands) { + if (value === worker) { + commands.delete(key); + } + } + let { events } = Plugin.scope; events.emit("stop", this); From 16afb1e1db4747e89ffa0fb5ec996936df176032 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 21 May 2025 14:45:32 +0200 Subject: [PATCH 074/112] `resolve()` called when no/empty intents array is passed --- system/init/init.components.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/system/init/init.components.js b/system/init/init.components.js index 9bcc3e5..9f33999 100644 --- a/system/init/init.components.js +++ b/system/init/init.components.js @@ -27,6 +27,10 @@ module.exports = (logger) => { }); + if (componentNames.length === 0) { + return resolve(); + } + let componentConter = 0; //let counter = componentNames.length; From da50a5b276b9136575bc972fecd99354aa2675f8 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 22 May 2025 08:44:52 +0200 Subject: [PATCH 075/112] fix #448 --- components/endpoints/class.command.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index 78844c5..d015b87 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -244,10 +244,11 @@ module.exports = class Command { // wenn worker thread prüfen ob im main oder worker // when main = post to worker // when worker = handler like default beaufer + let { events, logger } = Command.scope; let wrapper = () => { - let { events, logger } = Command.scope; + // feedback logger.verbose(`Trigger command "${this.name}"`, this); if (!cb && params instanceof Function) { @@ -354,7 +355,8 @@ module.exports = class Command { } else { - console.log("No hanlder registered"); + // feedback + logger.warn("No command hanlder registered"); } From 80abd6659702ffb789cde18ded170fafe09d688c Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 22 May 2025 09:55:21 +0200 Subject: [PATCH 076/112] fix #545 --- routes/index.js | 2 +- routes/router.api.plugins.js | 31 ++++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/routes/index.js b/routes/index.js index 0e9b04d..14efa15 100644 --- a/routes/index.js +++ b/routes/index.js @@ -169,8 +169,8 @@ const systemRouter = express.Router(); // http://127.0.0.1/api/plugins api.use("/plugins", pluginsRouter); -require("./rest-handler.js")(C_PLUGINS, pluginsRouter); require("./router.api.plugins.js")(app, pluginsRouter); +require("./rest-handler.js")(C_PLUGINS, pluginsRouter); // http://127.0.0.1/api/rooms api.use("/rooms", roomsRouter); diff --git a/routes/router.api.plugins.js b/routes/router.api.plugins.js index 229712f..c5db854 100644 --- a/routes/router.api.plugins.js +++ b/routes/router.api.plugins.js @@ -5,7 +5,8 @@ const process = require("process"); const fs = require("fs/promises"); const { statSync } = require("fs"); -//const C_PLUGINS = require("../components/plugins"); +const C_PLUGINS = require("../components/plugins"); +const { logger } = C_PLUGINS; module.exports = (app, router) => { @@ -33,8 +34,36 @@ module.exports = (app, router) => { }); */ + // catch delete request + // stop plugin worker thread before deleting item + if (process.env.WORKER_THREADS_ENABLED == "true") { + router.delete("/:_id", async (req, res, next) => { + try { + + // req.item is set from rest-handler router.param() + // TODO: Make this optional e.g. via req.query + // In the frontend then should a checkbox which sets it to true + if (req?.item?.started) { + await req.item.stop(); + } + + } catch (err) { + + // feedback + logger.warn(err, "Could not stop plugin before delete, it may be still running. Restart the backend to apply changes"); + + } finally { + + // foward to rest-handler.js + next(); + + } + }); + } + const variables = (req, res, next) => { + // TODO: use process.env. req.install = req.query?.install === "true" || false; req.folder = path.join(process.cwd(), "plugins", req.item.uuid); From 315b8758b488d47e0f11e30906934060b7c2a07b Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 22 May 2025 09:56:04 +0200 Subject: [PATCH 077/112] fix #546 --- system/component/class.component.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/system/component/class.component.js b/system/component/class.component.js index ede3ed3..435461f 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -405,6 +405,8 @@ module.exports = class COMPONENT extends COMMON { } else { + // feedback + this.logger.info(`Item "${doc.name || doc.description}" added`); // resolve takes a array // these are arguments passed to the callback function @@ -498,6 +500,7 @@ module.exports = class COMPONENT extends COMMON { //if (result.n === 1 && result.ok === 1 && target) { if (result.acknowledged && result.deletedCount > 0) { + this.logger.info(`Item "${target.name || target.description}" removed`); resolve([target, result, _id]); } else { @@ -593,6 +596,9 @@ module.exports = class COMPONENT extends COMMON { // Umwandlung von object/string zu/von object/string // muss in middlware erflogen!!!!!!!!!!!!!! + // feedback + this.logger.info(`Item "${target.name || target.description}" updated`); + // TODO CHECK RESUTL! // extend exisiting object in items array //_extend(target, validation.value); From 90b2b769ee84259fe58f3067aea3e95d9df755b0 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 22 May 2025 13:15:33 +0200 Subject: [PATCH 078/112] error message improved --- components/plugins/class.plugin.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/components/plugins/class.plugin.js b/components/plugins/class.plugin.js index fceb633..bf8f34b 100644 --- a/components/plugins/class.plugin.js +++ b/components/plugins/class.plugin.js @@ -142,7 +142,10 @@ module.exports = class Plugin extends Item { } else { - throw new Error(`Unregisterd intents access approach`); + let msg = `Unregisterd intents access approach\n`; + msg += `Needs "${dependencies}", granted "${data.intents}"`; + + throw new Error(msg); } From 37bfcbc917d83b57ee14fed70481b28af6c2cabd Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 22 May 2025 13:15:49 +0200 Subject: [PATCH 079/112] plugin start error handling improved --- index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 25de46d..d8d5e6f 100644 --- a/index.js +++ b/index.js @@ -255,12 +255,14 @@ const starter = new Promise((resolve) => { let started = 0; - bootable.forEach((plugin) => { + // without async/await the process crashes + // if a error is thrown, even when it has no influence on the plugin start per se + bootable.forEach(async (plugin) => { try { logger.verbose(`Start plugin "${plugin.name}" (${plugin.uuid})`); - plugin.start(); + await plugin.start(); started += 1; From 23b172df80732b73c4cb3c116434b32cc4c35d36 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 22 May 2025 17:33:21 +0200 Subject: [PATCH 080/112] start/error handling/logging improved --- components/plugins/class.plugin.js | 10 +++++++-- components/plugins/worker.js | 7 +++++- index.js | 34 ++++++++++++++++++++++++------ 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/components/plugins/class.plugin.js b/components/plugins/class.plugin.js index bf8f34b..2c604fd 100644 --- a/components/plugins/class.plugin.js +++ b/components/plugins/class.plugin.js @@ -196,7 +196,7 @@ module.exports = class Plugin extends Item { }); // feedback - logger.debug(`#${worker.threadId} = ${this.uuid}`); + logger.debug(`#${worker.threadId} = ${this.uuid} (${this.name})`); if (process.env.NODE_ENV === "development") { @@ -237,7 +237,13 @@ module.exports = class Plugin extends Item { worker.once("exit", (code) => { // feedback - logger.info(`Plugin "${this.name}" worker thread exited, code=${code}`); + let msg = `Plugin "${this.name}" worker thread exited, code=${code}`; + + if (code >= 0) { + logger.warn(msg); + } else { + logger.info(msg); + } this.started = false; this.worker = null; diff --git a/components/plugins/worker.js b/components/plugins/worker.js index 4398118..baf1849 100644 --- a/components/plugins/worker.js +++ b/components/plugins/worker.js @@ -58,7 +58,12 @@ const Plugin = require("./class.plugin.js"); } catch (err) { log.error(err, "Could not initalize system"); - process.exit(1); + + // without setTimeout, logs are not printed + // drain the event loop/flush stdout, and exit then + setTimeout(() => { + process.exit(1); + }); } })(); \ No newline at end of file diff --git a/index.js b/index.js index d8d5e6f..95b5e0f 100644 --- a/index.js +++ b/index.js @@ -257,6 +257,7 @@ const starter = new Promise((resolve) => { // without async/await the process crashes // if a error is thrown, even when it has no influence on the plugin start per se + /* bootable.forEach(async (plugin) => { try { @@ -272,14 +273,35 @@ const starter = new Promise((resolve) => { } }); + */ - if (bootable.length > started) { - logger.warn(`${started}/${bootable.length} Plugins started (Check the previously logs)`); - } else { - logger.info(`${started}/${bootable.length} Plugins started`); - } + (async () => { + + for (const plugin of bootable) { + try { + + logger.verbose(`Start plugin "${plugin.name}" (${plugin.uuid})`); + + await plugin.start(); + + started += 1; + + } catch (err) { + + logger.error(err, `Could not boot plugin "${plugin.name}" (${plugin.uuid})`); + + } + } + + if (bootable.length > started) { + logger.warn(`${started}/${bootable.length} Plugins started (Check the previously logs)`); + } else { + logger.info(`${started}/${bootable.length} Plugins started`); + } + + logger.info("Startup complete"); - logger.info("Startup complete"); + })(); // fix #435 ["SIGINT", /*"SIGTERM", "SIGQUIT"*/].forEach((signal) => { From 3e9ef205526433c843553a41d0a9864fc52d05a7 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 26 May 2025 08:18:26 +0200 Subject: [PATCH 081/112] implement #516 change --- components/endpoints/class.command.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/endpoints/class.command.js b/components/endpoints/class.command.js index d015b87..f888abb 100644 --- a/components/endpoints/class.command.js +++ b/components/endpoints/class.command.js @@ -396,7 +396,8 @@ module.exports = class Command { //payload: Joi.string().allow(null).default(null), payload: Joi.alternatives().try(Joi.string(), Joi.binary()).allow(null).default(null), description: Joi.string().allow(null).default(null), - params: Joi.array().items(Param.schema()).default([]) + params: Joi.array().items(Param.schema()).default([]), + icon: Joi.string().allow(null).default(null) }); } From 0f5612461270d8649c6edd8a0de708c6bba15f91 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 26 May 2025 08:34:55 +0200 Subject: [PATCH 082/112] implement #516 - "add triggered timestamp" --- components/webhooks/class.webhook.js | 29 +++++++++++++++++++++++++++- components/webhooks/index.js | 4 +++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/components/webhooks/class.webhook.js b/components/webhooks/class.webhook.js index b209803..95ae259 100644 --- a/components/webhooks/class.webhook.js +++ b/components/webhooks/class.webhook.js @@ -3,6 +3,8 @@ const mongodb = require("mongodb"); const Item = require("../../system/component/class.item.js"); +const _debounce = require("../../helper/debounce.js"); + /** * @description * Represents a webhook item @@ -24,6 +26,25 @@ module.exports = class Webhook extends Item { //Object.assign(this, obj); //this._id = String(obj._id); + let { update, logger } = Webhook.scope; + + let updater = _debounce(async () => { + try { + + // trigger update on endpoint item + // otherwise ui is not rendered/refreshed on state changed + await update(this._id, this); + + // feedback + logger.verbose("Webhook trigger timestamp updated", this.timestamps); + + } catch (err) { + + logger.warn(err, "Could not update webhook item after debouncing"); + + } + }, 100); + Object.defineProperty(this, "_handler", { value: [], configurable: false, @@ -38,6 +59,9 @@ module.exports = class Webhook extends Item { cb(body, query); }); + this.timestamps.triggered = Date.now(); + process.nextTick(updater, this); + }, enumerable: false, configurable: false, @@ -51,7 +75,10 @@ module.exports = class Webhook extends Item { _id: Joi.string().pattern(/^[0-9a-fA-F]{24}$/).default(() => { return String(new mongodb.ObjectId()); }), - name: Joi.string().required() + name: Joi.string().required(), + timestamps: { + triggered: Joi.number().allow(null).default(null), + } }); } diff --git a/components/webhooks/index.js b/components/webhooks/index.js index b36b9b2..77c4edf 100644 --- a/components/webhooks/index.js +++ b/components/webhooks/index.js @@ -15,7 +15,9 @@ class C_WEBHOOKS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("webhooks", Webhook.schema()); + super("webhooks", Webhook.schema(), [ + Webhook + ]); this.hooks.post("add", (data, next) => { next(null, new Webhook(data)); From a5ddfc183fbcd292c458fb74741bc4ccfb0d04ca Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 26 May 2025 10:00:08 +0200 Subject: [PATCH 083/112] implement #514 - "add timestamp published" --- components/mqtt/class.mqtt.js | 16 +++++++++- components/mqtt/message-handler.js | 49 ++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/components/mqtt/class.mqtt.js b/components/mqtt/class.mqtt.js index 3d2aa81..1bf96a1 100644 --- a/components/mqtt/class.mqtt.js +++ b/components/mqtt/class.mqtt.js @@ -46,7 +46,21 @@ class MQTT extends Item { return String(new mongodb.ObjectId()); }), topic: Joi.string().required(), - description: Joi.string().allow(null).default(null) + description: Joi.string().allow(null).default(null), + /* + value: Joi.any().custom((value, helpers) => { + + if (!Buffer.isBuffer(value)) { + return helpers.error("any.invalid"); + } + + return value; + + }, "Buffer Validation"), + */ + timestamps: { + published: Joi.number().allow(null).default(null), + } }); } diff --git a/components/mqtt/message-handler.js b/components/mqtt/message-handler.js index 53de2d8..bf22ee9 100644 --- a/components/mqtt/message-handler.js +++ b/components/mqtt/message-handler.js @@ -4,16 +4,34 @@ const mqtt = require("mqtt-packet"); const VERSION = Number(process.env.MQTT_BROKER_VERSION); const exitCodes = require("./exit-codes.js")(VERSION); +const _debounce = require("../../helper/debounce.js"); + const parser = mqtt.parser({ protocolVersion: VERSION }); module.exports = (scope) => { - scope._ready(({ logger, events, items }) => { + scope._ready(({ logger, events, items, update }) => { // ping setTimeout timer let interval = null; + let updater = _debounce(async (topic) => { + try { + + // trigger update on item + await update(topic._id, topic); + + // feedback + logger.verbose(`Topic timestamp "published" updated`, topic); + + } catch (err) { + + logger.warn(err, "Could not update topic item after debouncing"); + + } + }, 100); + // listen for published topics // call publish handler on each mqtt item @@ -22,13 +40,40 @@ module.exports = (scope) => { // feedback logger.trace(`Published: ${packet.topic}=${packet.payload}`); - items.forEach(({ topic, _subscriber }) => { + items.forEach(({ topic, _subscriber }, index) => { if (String(packet.topic).startsWith(topic) || packet.topic === topic) { + let item = items[index]; + let { timestamps } = item; + + /* + // when value should be stored + // prevent useless set when value is the same as previous one + // same should be for published timestamp + if (topic.value !== packet.payload) { + + topic.value = Number(packet.payload); + timestamps.published = Date.now(); + + console.log("Published", topic, packet.payload) + + _subscriber.forEach((cb) => { + cb(packet.payload, packet); + }); + + process.nextTick(updater, topic); + + } + */ + + timestamps.published = Date.now(); + _subscriber.forEach((cb) => { cb(packet.payload, packet); }); + process.nextTick(updater, item); + } }); From b287473e64a88d156b9e17965525667cbae3735f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 26 May 2025 14:49:51 +0200 Subject: [PATCH 084/112] fix #533 --- routes/router.system.backup.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/routes/router.system.backup.js b/routes/router.system.backup.js index 628203b..9970215 100644 --- a/routes/router.system.backup.js +++ b/routes/router.system.backup.js @@ -244,8 +244,17 @@ module.exports = (router) => { } else if (header.name === ".env") { - if (req.query?.truncate === "true") { - fs.truncateSync(path.join(process.cwd(), ".env")); + let envPath = path.join(process.cwd(), ".env"); + let fd = null; + + try { + if (req.query?.truncate === "true") { + fs.truncateSync(envPath, 0); + } + } catch (err) { + // ignore + } finally { + fd = fs.openSync(envPath, "w"); } let rl = createInterface({ @@ -253,10 +262,12 @@ module.exports = (router) => { }); rl.once("error", (err) => { + fs.closeSync(fd); next(err); }); rl.once("close", () => { + fs.closeSync(fd); next(); }); @@ -265,11 +276,11 @@ module.exports = (router) => { let [key, value] = line.split("="); if (!key || !value || req.query?.decode !== "true") { - return fs.appendFileSync(path.join(process.cwd(), ".env"), line + EOL); + return fs.writeSync(fd, line + EOL); } line = `${key}=${Buffer.from(value, "base64").toString()}`; - fs.appendFileSync(path.join(process.cwd(), ".env"), line + EOL); + fs.writeSync(fd, line + EOL); }); From bfcbef8005417f7203aa1c506a07e626630a2368 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 26 May 2025 14:51:37 +0200 Subject: [PATCH 085/112] logging message removed & minor bug fix --- components/devices/class.interface.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/devices/class.interface.js b/components/devices/class.interface.js index c86fc27..cd83097 100644 --- a/components/devices/class.interface.js +++ b/components/devices/class.interface.js @@ -225,7 +225,7 @@ module.exports = class Interface { stream.once("close", () => { // feedback - logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); + //logger.debug(`Bridge closed, destroy everything: iface ${this._id} <-> ${proto}://${host}:${port} (${request.uuid})`); // TODO: Improve error handling/forwarding/cleanup // socket.destroy() throws ABORT_ERR after emitting custom connection error @@ -250,7 +250,7 @@ module.exports = class Interface { process.nextTick(() => { - stream.emit("open"); + socket.emit("open"); writable.pipe(stream); stream.pipe(readable); From 723d2e420c9bcd288b9b38445a53d25e85f6a08c Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Mon, 26 May 2025 20:10:51 +0200 Subject: [PATCH 086/112] timeformat changed --- index.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 95b5e0f..c141e5f 100644 --- a/index.js +++ b/index.js @@ -36,7 +36,7 @@ process.env = Object.assign({ HTTP_SOCKET: "/tmp/open-haus.sock", LOG_PATH: path.resolve(process.cwd(), "logs"), LOG_LEVEL: "info", - LOG_DATEFORMAT: "yyyy.mm.dd - HH:MM.ss.l", + LOG_DATEFORMAT: "yyyy.mm.dd - HH:MM:ss.l", LOG_SUPPRESS: "false", LOG_TARGET: "", NODE_ENV: "production", @@ -82,7 +82,7 @@ if (process.execArgv.includes("--inspect") && process.env.NODE_ENV === "developm try { exec("chromium-browser & sleep 1 && xdotool type 'chrome://inspect' && xdotool key Return"); } catch (err) { - console.error("Could not open chromium browser"); + console.error(err, "Could not open chromium browser"); } } @@ -307,8 +307,13 @@ const starter = new Promise((resolve) => { ["SIGINT", /*"SIGTERM", "SIGQUIT"*/].forEach((signal) => { process.once(signal, () => { + logger.debug(`signal=${signal} received`); logger.warn("Shuting down..."); + setTimeout(() => { + process.exit(0); + }); + }); }); From ab23270c3c08dbc10f4f27403c18db6d8b6c7e7a Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 27 May 2025 16:27:24 +0200 Subject: [PATCH 087/112] fix linting due to update eslint --- components/store/!class.namespace.js | 1 - scripts/connector.js | 2 +- system/cronjob/class.job.js | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/components/store/!class.namespace.js b/components/store/!class.namespace.js index 0915d88..5856c95 100644 --- a/components/store/!class.namespace.js +++ b/components/store/!class.namespace.js @@ -55,7 +55,6 @@ class Namespace extends EventEmitter { // https://medium.com/trabe/async-getters-and-setters-is-it-possible-c18759b6f7e4 Reflect.defineProperty(this, obj.key, { set: (value) => { - // eslint-disable-next-line no-setter-return return new Promise((resolve, reject) => { // update value in database diff --git a/scripts/connector.js b/scripts/connector.js index a12f036..a471900 100755 --- a/scripts/connector.js +++ b/scripts/connector.js @@ -34,7 +34,7 @@ if ("help" in args) { console.log(`--url\t\tFull server url (inkl. proto), default "http://127.0.0.1"`); console.log(`--delay\t\tConnection delay in sec, before start bridging to WebSocket, default "5"`); - return; + process.exit(0); } diff --git a/system/cronjob/class.job.js b/system/cronjob/class.job.js index e7c9df3..3c4a625 100644 --- a/system/cronjob/class.job.js +++ b/system/cronjob/class.job.js @@ -23,7 +23,6 @@ module.exports = class Job { constructor(cron, fnc) { // TODO (mstirner) fix eslint rule - // eslint-disable-next-line no-useless-escape let parts = cron.match(/^([0-9,\-\/]+|\*{1}|\*{1}\/[0-9]+)\s+([0-9,\-\/]+|\*{1}|\*{1}\/[0-9]+)\s+([0-9,\-\/]+|\*{1}|\*{1}\/[0-9]+)\s+([0-9,\-\/]+|\*{1}|\*{1}\/[0-9]+)\s+([0-9,\-\/]+|\*{1}|\*{1}\/[0-9]+)\s*$/); this.minute = this.parse(parts[1]); From 50795963adeb74d59d20fd55ddc02f13585110d6 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 27 May 2025 16:27:35 +0200 Subject: [PATCH 088/112] fix #543 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5d85d73..cf06908 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # https://medium.com/@kahana.hagai/docker-compose-with-node-js-and-mongodb-dbdadab5ce0a # The instructions for the first stage -FROM node:20-alpine AS builder +FROM node:22-alpine AS builder ARG NODE_ENV=production ENV NODE_ENV=${NODE_ENV} @@ -22,7 +22,7 @@ RUN npm install # The instructions for second stage -FROM node:20-alpine +FROM node:22-alpine WORKDIR /opt/OpenHaus/backend COPY --from=builder node_modules node_modules From c3e416579e3a50c724551d14ff40d2378933518e Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 27 May 2025 16:51:55 +0200 Subject: [PATCH 089/112] fix #548 --- .eslintrc.json | 34 - .husky/pre-commit | 3 - Dockerfile | 1 + Gruntfile.js | 1 + eslint.config.mjs | 52 + package-lock.json | 4835 +++++++++++++++++++----------------- package.json | 46 +- scripts/post-install.sh | 4 +- system/logger/formatter.js | 2 +- 9 files changed, 2589 insertions(+), 2389 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 3c278d5..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "env": { - "node": true, - "commonjs": true, - "es2021": true - }, - "parserOptions": { - "ecmaVersion": 13 - }, - "ignorePatterns": [ - "node_modules", - "logs", - "plugins/*", - "dist", - "build" - ], - "extends": [ - "eslint:recommended" - ], - "rules": { - "semi": [ - "error", - "always" - ], - "quotes": [ - "error", - "double", - { - "avoidEscape": true, // Does not work https://eslint.org/docs/rules/quotes#avoidescape - "allowTemplateLiterals": true - } - ] - } -} \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index 251a23e..a845b85 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - npm run lint \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index cf06908..b459ff4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,7 @@ RUN chmod +x scripts/post-install.sh RUN apk --no-cache add python3 make g++ COPY ./package*.json ./ +RUN npm pkg delete scripts.prepare RUN npm install diff --git a/Gruntfile.js b/Gruntfile.js index ee0c707..9af0bb2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -62,6 +62,7 @@ module.exports = function (grunt) { `echo "exit 0" > ${path.join(PATH_BUILD, "scripts/post-install.sh")}`, `chmod +x ${path.join(PATH_BUILD, "scripts/post-install.sh")}`, `cp ./package*.json ${PATH_BUILD}`, + `cd ${PATH_BUILD} && npm pkg delete scripts.prepare`, "grunt uglify", ].forEach((cmd) => { cp.execSync(cmd, { diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..1c49846 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,52 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import globals from "globals"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default defineConfig([ + globalIgnores([ + "**/node_modules", + "**/build", + "**/dist", + "**/plugins" + ]), { + files: ["*.js"], + extends: compat.extends("eslint:recommended"), + languageOptions: { + globals: { + ...globals.node, + ...globals.commonjs, + }, + ecmaVersion: 12, + sourceType: "commonjs" + }, + rules: { + semi: ["error", "always"], + quotes: ["error", "double", { + avoidEscape: true, + allowTemplateLiterals: true, + }], + "no-inner-declarations": "off", + "no-unused-vars": ["error", { + caughtErrors: "none" + }] + } + }, { + files: ["eslint.config.mjs"], + languageOptions: { + ecmaVersion: 12, + sourceType: "module", + } + } +]); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 36a1d71..23786ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,36 +10,39 @@ "hasInstallScript": true, "license": "ISC", "dependencies": { - "bcrypt": "^5.1.0", - "body-parser": "^1.20.1", + "bcrypt": "^6.0.0", + "body-parser": "^2.2.0", "colors": "^1.4.0", - "dateformat": "^4.6.3", - "dns-packet": "^5.4.0", - "dotenv": "^16.0.3", - "express": "^4.18.2", - "joi": "^17.6.4", - "jsonwebtoken": "^9.0.0", + "dateformat": "^5.0.3", + "dns-packet": "^5.6.1", + "dotenv": "^16.5.0", + "express": "^4.21.2", + "joi": "^17.13.3", + "jsonwebtoken": "^9.0.2", "mongodb": "^4.11.0", - "mqtt-packet": "^8.1.2", - "semver": "^7.5.4", + "mqtt-packet": "^9.0.2", + "semver": "^7.7.2", "tar-stream": "^3.1.7", - "uuid": "^9.0.0", - "ws": "^8.10.0" + "uuid": "^11.1.0", + "ws": "^8.18.2" }, "devDependencies": { - "eslint": "^8.24.0", - "grunt": "^1.5.3", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.27.0", + "eslint": "^9.27.0", + "globals": "^16.2.0", + "grunt": "^1.6.1", "grunt-contrib-compress": "^2.0.0", "grunt-contrib-uglify": "^5.0.1", "grunt-env": "^1.0.1", "grunt-run": "^0.8.1", - "husky": "^8.0.3", - "minimist": "^1.2.6", - "mocha": "^9.2.2", + "husky": "^9.1.7", + "minimist": "^1.2.8", + "mocha": "^11.5.0", "mocha.parallel": "^0.15.6", - "newman": "^6.0.0", - "nodemon": "^3.0.1", - "sinon": "^14.0.2" + "newman": "^6.2.1", + "nodemon": "^3.1.10", + "sinon": "^20.0.0" }, "engines": { "node": ">=18.0.0" @@ -794,16 +797,122 @@ "node": ">=0.1.90" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -811,19 +920,20 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -834,11 +944,62 @@ } } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } }, "node_modules/@faker-js/faker": { "version": "5.5.3", @@ -861,42 +1022,43 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ms": "2.1.2" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", @@ -911,78 +1073,146 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", - "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" } }, "node_modules/@postman/form-data": { @@ -1030,9 +1260,10 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -1048,48 +1279,46 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "type-detect": "4.0.8" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/@sinonjs/samsam": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz", - "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", + "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, "node_modules/@smithy/abort-controller": { "version": "3.1.5", @@ -1270,6 +1499,20 @@ "node": ">=16.0.0" } }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@smithy/middleware-serde": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", @@ -1683,11 +1926,34 @@ "node": ">=16.0.0" } }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.8.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" }, + "node_modules/@types/readable-stream": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.19.tgz", + "integrity": "sha512-6Tgd3lMocKwOul/kwAAgSebkhdMCLhRvcJ6CKHA6wdql2qNIwK6hw3Y4PZQxn9HcJogoC/1ZOmkFM7OZKH/VrA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/webidl-conversions": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", @@ -1702,16 +1968,23 @@ "@types/webidl-conversions": "*" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } }, "node_modules/accepts": { "version": "1.3.8", @@ -1726,10 +1999,11 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1742,6 +2016,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -1755,38 +2030,6 @@ "node": ">=6.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1803,19 +2046,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1848,11 +2083,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "node_modules/archiver": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", @@ -1949,18 +2179,6 @@ "node": ">=6" } }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1990,15 +2208,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -2058,7 +2267,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bare-events": { "version": "2.3.1", @@ -2086,16 +2296,17 @@ ] }, "node_modules/bcrypt": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", - "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.10", - "node-addon-api": "^5.0.0" + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" }, "engines": { - "node": ">= 10.0.0" + "node": ">= 18" } }, "node_modules/bcrypt-pbkdf": { @@ -2118,13 +2329,15 @@ } }, "node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", + "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", + "license": "MIT", "dependencies": { + "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^4.2.0" } }, "node_modules/bl/node_modules/buffer": { @@ -2145,11 +2358,28 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, + "node_modules/bl/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/bluebird": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", @@ -2157,27 +2387,105 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/body-parser/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.6" } }, "node_modules/bowser": { @@ -2191,6 +2499,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2282,17 +2591,27 @@ "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -2306,6 +2625,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2401,14 +2721,6 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, "node_modules/cli-progress": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", @@ -2438,14 +2750,18 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -2466,14 +2782,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -2523,12 +2831,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -2596,10 +2900,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2629,11 +2934,12 @@ } }, "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-5.0.3.tgz", + "integrity": "sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=12.20" } }, "node_modules/debug": { @@ -2660,24 +2966,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true, + "license": "MIT" }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -2689,11 +2979,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2731,39 +3016,21 @@ "node": ">=0.10.0" } }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "engines": { - "node": ">=8" - } - }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -2771,24 +3038,30 @@ "node": ">=6" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", "engines": { - "node": ">=6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, "node_modules/duplexer": { @@ -2797,6 +3070,13 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2824,7 +3104,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "2.0.0", @@ -2845,13 +3126,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -2865,11 +3143,24 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2893,107 +3184,94 @@ } }, "node_modules/eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/debug": { @@ -3020,17 +3298,18 @@ "dev": true }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3050,10 +3329,11 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -3066,6 +3346,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -3078,6 +3359,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3087,6 +3369,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -3100,12 +3383,30 @@ "node": ">= 0.6" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", "dev": true }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -3128,9 +3429,9 @@ } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -3152,7 +3453,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -3167,6 +3468,61 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, "node_modules/extend": { @@ -3183,46 +3539,18 @@ "engines": [ "node >=0.6.0" ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -3234,7 +3562,8 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-xml-parser": { "version": "4.4.1", @@ -3259,15 +3588,6 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -3293,15 +3613,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-type": { @@ -3372,31 +3693,19 @@ } }, "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==", - "dev": true, - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, + "license": "MIT", "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": "*" + "node": ">= 10.13.0" } }, "node_modules/fined": { @@ -3434,16 +3743,17 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -3474,6 +3784,23 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3507,21 +3834,11 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -3546,45 +3863,32 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3593,6 +3897,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/getobject": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", @@ -3616,6 +3933,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3686,47 +4004,25 @@ } }, "node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3738,48 +4034,32 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, + "license": "MIT", "dependencies": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" }, "bin": { "grunt": "bin/grunt" }, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/grunt-cli": { @@ -3969,10 +4249,11 @@ } }, "node_modules/grunt/node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -4101,34 +4382,10 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -4137,11 +4394,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4256,60 +4508,29 @@ "node": ">= 6.15.1" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, + "license": "MIT", "bin": { - "husky": "lib/bin.js" + "husky": "bin.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -4335,10 +4556,11 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -4350,10 +4572,11 @@ "dev": true }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4378,6 +4601,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4477,6 +4701,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4604,22 +4829,39 @@ "dev": true, "license": "MIT" }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/joi": { - "version": "17.6.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.4.tgz", - "integrity": "sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "node_modules/jose": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", - "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", + "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", "dev": true, "license": "MIT", "funding": { @@ -4633,12 +4875,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "node_modules/js-sha512": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.9.0.tgz", @@ -4665,6 +4901,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -4692,14 +4935,21 @@ "license": "ISC" }, "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -4727,12 +4977,6 @@ "verror": "1.10.0" } }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -4752,6 +4996,16 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4808,6 +5062,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4878,7 +5133,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.defaults": { "version": "4.2.0", @@ -4902,13 +5158,44 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -4916,6 +5203,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -4942,6 +5235,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -4949,28 +5244,6 @@ "node": ">=10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -4992,6 +5265,15 @@ "node": ">=0.10.0" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/maxmin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", @@ -5033,15 +5315,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -5116,6 +5389,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5124,89 +5398,59 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha.parallel": { @@ -5222,13 +5466,40 @@ "mocha": ">=2.2.5" } }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5239,54 +5510,41 @@ } } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/ms": { @@ -5295,6 +5553,20 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -5368,12 +5640,13 @@ } }, "node_modules/mqtt-packet": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-8.1.2.tgz", - "integrity": "sha512-vL1YTct+TAy0PqX3Jv8jM3JMzObH6vC/lyA0I5LtD4xvydOdIdmofrSp12PE3jajiIOUaW3XxmQekbyToXpsSw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.2.tgz", + "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==", + "license": "MIT", "dependencies": { - "bl": "^5.0.0", - "debug": "^4.1.1", + "bl": "^6.0.8", + "debug": "^4.3.4", "process-nextick-args": "^2.0.1" } }, @@ -5403,18 +5676,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5437,9 +5698,9 @@ "license": "MIT" }, "node_modules/newman": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/newman/-/newman-6.2.0.tgz", - "integrity": "sha512-CHo/wMv+Q9B3YcIJ18pdmY9XN9X8mc2hXso8yybeclV0BVPSFz1+P5vJELWg5DB/qJgxJOh+B+k+i9tTqfzcbw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/newman/-/newman-6.2.1.tgz", + "integrity": "sha512-Zq8Sr5GFF+OXs5yIbyglLMKMh1WNMjYVV0yZaSBZ+DIgQOIWcxT8QTfbrl/YUGrLyT4rjpu+yZ/Z+kozw79GEA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5455,10 +5716,10 @@ "liquid-json": "0.3.1", "lodash": "4.17.21", "mkdirp": "3.0.1", - "postman-collection": "4.5.0", + "postman-collection": "4.4.0", "postman-collection-transformer": "4.1.8", - "postman-request": "2.88.1-postman.39", - "postman-runtime": "7.41.2", + "postman-request": "2.88.1-postman.34", + "postman-runtime": "7.39.1", "pretty-ms": "7.0.1", "semver": "7.6.3", "serialised-error": "1.1.3", @@ -5500,75 +5761,13 @@ "node": ">=10" } }, - "node_modules/nise": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.2.tgz", - "integrity": "sha512-+gQjFi8v+tkfCuSCxfURHLhRhniE/+IaYbIphxAN2JRR9SHKhY8hgXpaXiYfHdw+gcGe4buxgbprBQFab9FkhA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^7.0.4", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/nise/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, "node_modules/node-addon-api": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", - "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.1.tgz", + "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==", + "license": "MIT", "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": "^18 || ^20 || >= 21" } }, "node_modules/node-forge": { @@ -5581,6 +5780,17 @@ "node": ">= 6.13.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-oauth1": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/node-oauth1/-/node-oauth1-1.3.0.tgz", @@ -5589,13 +5799,14 @@ "license": "Apache-2.0" }, "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -5617,12 +5828,21 @@ } }, "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/nodemon/node_modules/has-flag": { @@ -5638,7 +5858,8 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", @@ -5652,20 +5873,6 @@ "node": ">=4" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5675,17 +5882,6 @@ "node": ">=0.10.0" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -5696,14 +5892,6 @@ "node": "*" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-hash": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", @@ -5715,9 +5903,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -5781,22 +5969,24 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -5860,11 +6050,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5926,6 +6124,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5935,6 +6134,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5966,21 +6166,36 @@ "node": ">=0.10.0" } }, - "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -5988,6 +6203,13 @@ "dev": true, "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -6010,9 +6232,9 @@ } }, "node_modules/postman-collection": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz", - "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", + "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6025,7 +6247,7 @@ "mime-format": "2.0.1", "mime-types": "2.1.35", "postman-url-encoder": "3.0.5", - "semver": "7.6.3", + "semver": "7.5.4", "uuid": "8.3.2" }, "engines": { @@ -6062,25 +6284,31 @@ "node": ">= 12" } }, - "node_modules/postman-collection/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/postman-collection-transformer/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, "node_modules/postman-collection/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -6099,15 +6327,15 @@ } }, "node_modules/postman-request": { - "version": "2.88.1-postman.39", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.39.tgz", - "integrity": "sha512-rsncxxDlbn1YpygXSgJqbJzIjGlHFcZjbYDzeBPTQHMDfLuSTzZz735JHV8i1+lOROuJ7MjNap4eaSD3UijHzQ==", + "version": "2.88.1-postman.34", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.34.tgz", + "integrity": "sha512-GkolJ4cIzgamcwHRDkeZc/taFWO1u2HuGNML47K9ZAsFH2LdEkS5Yy8QanpzhjydzV3WWthl9v60J8E7SjKodQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@postman/form-data": "~3.1.1", "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.4", + "@postman/tunnel-agent": "^0.6.3", "aws-sign2": "~0.7.0", "aws4": "^1.12.0", "brotli": "^1.3.3", @@ -6129,7 +6357,7 @@ "uuid": "^8.3.2" }, "engines": { - "node": ">= 16" + "node": ">= 6" } }, "node_modules/postman-request/node_modules/qs": { @@ -6153,40 +6381,40 @@ } }, "node_modules/postman-runtime": { - "version": "7.41.2", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.41.2.tgz", - "integrity": "sha512-efKnii+yBfqZMRjV5zFh4VXogLeZB58HmLkgT+/sZcjglth23wzp+QRlkl4nbgcL2SZX6e5cLI2/aG2Of3wMyg==", + "version": "7.39.1", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.39.1.tgz", + "integrity": "sha512-IRNrBE0l1K3ZqQhQVYgF6MPuqOB9HqYncal+a7RpSS+sysKLhJMkC9SfUn1HVuOpokdPkK92ykvPzj8kCOLYAg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@postman/tough-cookie": "4.1.3-postman.1", "async": "3.2.5", - "aws4": "1.13.1", + "aws4": "1.12.0", "handlebars": "4.7.8", "httpntlm": "1.8.13", - "jose": "5.6.3", + "jose": "4.14.4", "js-sha512": "0.9.0", "lodash": "4.17.21", "mime-types": "2.1.35", "node-forge": "1.3.1", "node-oauth1": "1.3.0", "performance-now": "2.1.0", - "postman-collection": "4.5.0", - "postman-request": "2.88.1-postman.39", - "postman-sandbox": "5.1.1", + "postman-collection": "4.4.0", + "postman-request": "2.88.1-postman.34", + "postman-sandbox": "4.7.1", "postman-url-encoder": "3.0.5", "serialised-error": "1.1.3", "strip-json-comments": "3.1.1", "uuid": "8.3.2" }, "engines": { - "node": ">=16" + "node": ">=12" } }, "node_modules/postman-runtime/node_modules/aws4": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz", - "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true, "license": "MIT" }, @@ -6201,19 +6429,19 @@ } }, "node_modules/postman-sandbox": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-5.1.1.tgz", - "integrity": "sha512-RfCTMwz3OaqhYYgtoe3VlHGiQl9hEmJ9sPh/XOlNcuvd/km6ARSFkKXFvQaLFsTHyXcHaqpInKaQSJi23uTynA==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-4.7.1.tgz", + "integrity": "sha512-H2wYSLK0mB588IaxoLrLoPbpmxsIcwFtgaK2c8gAsAQ+TgYFePwb4qdeVcYDMqmwrLd77/ViXkjasP/sBMz1sQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "lodash": "4.17.21", - "postman-collection": "4.5.0", + "postman-collection": "4.4.0", "teleport-javascript": "1.0.0", - "uvm": "3.0.0" + "uvm": "2.1.1" }, "engines": { - "node": ">=16" + "node": ">=10" } }, "node_modules/postman-url-encoder": { @@ -6234,6 +6462,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -6265,6 +6494,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6283,11 +6521,17 @@ } }, "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } }, "node_modules/pstree.remy": { "version": "1.1.8", @@ -6296,9 +6540,10 @@ "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6325,26 +6570,6 @@ "dev": true, "license": "MIT" }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", @@ -6355,6 +6580,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -6369,14 +6595,14 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { @@ -6387,6 +6613,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6450,23 +6677,12 @@ "node": ">= 0.10" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6513,57 +6729,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6598,12 +6768,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6674,10 +6842,11 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -6697,28 +6866,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6729,6 +6876,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6741,20 +6889,75 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -6764,9 +6967,17 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-update-notifier": { "version": "2.0.0", @@ -6781,16 +6992,16 @@ } }, "node_modules/sinon": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", - "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-20.0.0.tgz", + "integrity": "sha512-+FXOAbdnj94AQIxH0w1v8gzNxkawVvNqE3jUzRLptR71Oykeu2RrQXXl/VQjKay+Qnh73fDt/oDfMo6xMeDQbQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^9.1.2", - "@sinonjs/samsam": "^7.0.1", - "diff": "^5.0.0", - "nise": "^5.1.2", + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", "supports-color": "^7.2.0" }, "funding": { @@ -6798,15 +7009,6 @@ "url": "https://opencollective.com/sinon" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -6941,6 +7143,23 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6954,6 +7173,21 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7004,23 +7238,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/tar-stream": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", @@ -7031,15 +7248,6 @@ "streamx": "^2.15.0" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, "node_modules/teleport-javascript": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/teleport-javascript/-/teleport-javascript-1.0.0.tgz", @@ -7047,12 +7255,6 @@ "dev": true, "license": "ISC" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7101,11 +7303,6 @@ "node": "*" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -7125,6 +7322,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -7137,22 +7335,11 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -7263,7 +7450,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", @@ -7274,31 +7462,38 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/uvm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-3.0.0.tgz", - "integrity": "sha512-dATVpxsNfFBpHNdq6sy4/CV2UnoRbV8tvvkK0VrUPnm+o7dK6fnir4LEm8czeDdpbw2KKDKjIPcRSZY4AEwEZA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-2.1.1.tgz", + "integrity": "sha512-BZ5w8adTpNNr+zczOBRpaX/hH8UPKAf7fmCnidrcsqt3bn8KT9bDIfuS7hgRU9RXgiN01su2pwysBONY6w8W5w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "flatted": "3.3.1" + "flatted": "3.2.6" }, "engines": { - "node": ">=16" + "node": ">=10" } }, + "node_modules/uvm/node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true, + "license": "ISC" + }, "node_modules/v8flags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", @@ -7334,20 +7529,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7363,14 +7544,6 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -7388,16 +7561,37 @@ "license": "MIT" }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, - "node_modules/wrap-ansi": { + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7413,12 +7607,13 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -7450,6 +7645,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -7457,33 +7653,37 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-unparser": { @@ -8130,16 +8330,82 @@ "dev": true, "optional": true }, + "@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true + }, + "@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "dependencies": { + "debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true + }, + "@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -8148,22 +8414,50 @@ }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, + "@eslint/js": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", + "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "dev": true + }, + "@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", + "dev": true, + "requires": { + "@eslint/core": "^0.14.0", + "levn": "^0.4.1" + } + }, "@faker-js/faker": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", @@ -8183,30 +8477,26 @@ "@hapi/hoek": "^9.0.0" } }, - "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true } } @@ -8217,33 +8507,82 @@ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, - "@mapbox/node-pre-gyp": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", - "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - } - }, "@mongodb-js/saslprep": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", @@ -8253,31 +8592,12 @@ "sparse-bitfield": "^3.0.3" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } + "optional": true }, "@postman/form-data": { "version": "3.1.1", @@ -8312,9 +8632,9 @@ } }, "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "requires": { "@hapi/hoek": "^9.0.0" } @@ -8330,51 +8650,42 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - } + "@sinonjs/commons": "^3.0.1" } }, "@sinonjs/samsam": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz", - "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0", + "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" + }, + "dependencies": { + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true + } } }, - "@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true - }, "@smithy/abort-controller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", @@ -8514,6 +8825,14 @@ "@smithy/util-retry": "^3.0.7", "tslib": "^2.6.2", "uuid": "^9.0.1" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "optional": true + } } }, "@smithy/middleware-serde": { @@ -8823,11 +9142,31 @@ "tslib": "^2.6.2" } }, + "@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "@types/node": { "version": "20.8.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==" }, + "@types/readable-stream": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.19.tgz", + "integrity": "sha512-6Tgd3lMocKwOul/kwAAgSebkhdMCLhRvcJ6CKHA6wdql2qNIwK6hw3Y4PZQxn9HcJogoC/1ZOmkFM7OZKH/VrA==", + "requires": { + "@types/node": "*" + } + }, "@types/webidl-conversions": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", @@ -8842,16 +9181,19 @@ "@types/webidl-conversions": "*" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } }, "accepts": { "version": "1.3.8", @@ -8863,9 +9205,9 @@ } }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true }, "acorn-jsx": { @@ -8881,29 +9223,6 @@ "integrity": "sha512-s+3fXLkeeLjZ2kLjCBwQufpI5fuN+kIGBxu6530nVQZGVol0d7Y/M88/xw9HGGUcJjKf8LutN3VPRUBq6N7Ajg==", "dev": true }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8916,16 +9235,11 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -8946,11 +9260,6 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "archiver": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", @@ -9042,15 +9351,6 @@ } } }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -9074,12 +9374,6 @@ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -9127,7 +9421,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "bare-events": { "version": "2.3.1", @@ -9141,12 +9436,12 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", - "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", "requires": { - "@mapbox/node-pre-gyp": "^1.0.10", - "node-addon-api": "^5.0.0" + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" } }, "bcrypt-pbkdf": { @@ -9165,13 +9460,14 @@ "dev": true }, "bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", + "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", "requires": { + "@types/readable-stream": "^4.0.0", "buffer": "^6.0.3", "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^4.2.0" }, "dependencies": { "buffer": { @@ -9182,6 +9478,18 @@ "base64-js": "^1.3.1", "ieee754": "^1.2.1" } + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } } } }, @@ -9192,22 +9500,70 @@ "dev": true }, "body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" + }, + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==" + }, + "mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "requires": { + "mime-db": "^1.54.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + }, + "type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "requires": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + } + } } }, "bowser": { @@ -9220,6 +9576,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9282,16 +9639,22 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "requires": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" } }, "callsites": { @@ -9361,11 +9724,6 @@ } } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, "cli-progress": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", @@ -9386,13 +9744,13 @@ } }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -9411,11 +9769,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -9451,12 +9804,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "content-disposition": { "version": "0.5.4", @@ -9504,9 +9853,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -9530,9 +9879,9 @@ } }, "dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-5.0.3.tgz", + "integrity": "sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==" }, "debug": { "version": "2.6.9", @@ -9554,27 +9903,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -9601,54 +9935,47 @@ "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "requires": { "@leichtgewicht/ip-codec": "^2.0.1" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==" + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "requires": { - "esutils": "^2.0.2" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" } }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" - }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -9675,7 +10002,8 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "2.0.0", @@ -9692,22 +10020,27 @@ } }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, "es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, "escape-html": { @@ -9722,49 +10055,46 @@ "dev": true }, "eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", + "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.27.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "dependencies": { "debug": { @@ -9785,47 +10115,30 @@ } }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^4.2.0" } }, "esprima": { @@ -9835,9 +10148,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -9869,12 +10182,22 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", "dev": true }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -9891,9 +10214,9 @@ } }, "express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -9914,7 +10237,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -9926,6 +10249,46 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } } }, "extend": { @@ -9951,30 +10314,6 @@ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -9996,15 +10335,6 @@ "strnum": "^1.0.5" } }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -10023,12 +10353,12 @@ } }, "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "requires": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" } }, "file-type": { @@ -10077,27 +10407,15 @@ } }, "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -10126,13 +10444,13 @@ "dev": true }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" } }, "flatted": { @@ -10156,6 +10474,16 @@ "for-in": "^1.0.1" } }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -10178,18 +10506,11 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -10203,22 +10524,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -10226,15 +10531,29 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, "getobject": { @@ -10256,6 +10575,7 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10310,35 +10630,15 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", + "dev": true }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, "graceful-fs": { "version": "4.2.10", @@ -10346,39 +10646,25 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz", + "integrity": "sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==", "dev": true, "requires": { - "dateformat": "~3.0.3", + "dateformat": "~4.6.2", "eventemitter2": "~0.4.13", "exit": "~0.1.2", - "findup-sync": "~0.3.0", + "findup-sync": "~5.0.0", "glob": "~7.1.6", "grunt-cli": "~1.4.3", "grunt-known-options": "~2.0.0", "grunt-legacy-log": "~3.0.0", "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", + "iconv-lite": "~0.6.3", "js-yaml": "~3.14.0", "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" + "nopt": "~3.0.6" }, "dependencies": { "argparse": { @@ -10391,9 +10677,9 @@ } }, "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, "js-yaml": { @@ -10624,28 +10910,10 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" - }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, "hasown": { "version": "2.0.2", @@ -10723,42 +10991,18 @@ "integrity": "sha512-uhSZLPPD2VXXOSN8Cni3kIsoFHaU2pT/nySEU/fHr/ePbqHYr0jeiQRmUKLEirC09SFPsdMoA7LU7UXMd/w0Kw==", "dev": true }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ieee754": { @@ -10767,9 +11011,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, "ignore-by-default": { @@ -10779,9 +11023,9 @@ "dev": true }, "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -10798,6 +11042,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -10878,7 +11123,8 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -10970,22 +11216,32 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "joi": { - "version": "17.6.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.4.tgz", - "integrity": "sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "requires": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "jose": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", - "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", + "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", "dev": true }, "js-md4": { @@ -10994,12 +11250,6 @@ "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", "dev": true }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "js-sha512": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.9.0.tgz", @@ -11021,6 +11271,12 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", @@ -11046,14 +11302,20 @@ "dev": true }, "jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "requires": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "dependencies": { "ms": { @@ -11075,12 +11337,6 @@ "verror": "1.10.0" } }, - "just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", - "dev": true - }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -11100,6 +11356,15 @@ "safe-buffer": "^5.0.1" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -11205,7 +11470,8 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.defaults": { "version": "4.2.0", @@ -11231,11 +11497,35 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "lodash.merge": { "version": "4.6.2", @@ -11243,6 +11533,11 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -11263,25 +11558,11 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } - } - }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -11297,6 +11578,11 @@ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "maxmin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", @@ -11325,12 +11611,6 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -11383,119 +11663,99 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true }, "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "dev": true, + "requires": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ms": "^2.1.3" } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, "ms": { @@ -11504,6 +11764,12 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -11571,12 +11837,12 @@ } }, "mqtt-packet": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-8.1.2.tgz", - "integrity": "sha512-vL1YTct+TAy0PqX3Jv8jM3JMzObH6vC/lyA0I5LtD4xvydOdIdmofrSp12PE3jajiIOUaW3XxmQekbyToXpsSw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.2.tgz", + "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==", "requires": { - "bl": "^5.0.0", - "debug": "^4.1.1", + "bl": "^6.0.8", + "debug": "^4.3.4", "process-nextick-args": "^2.0.1" }, "dependencies": { @@ -11600,12 +11866,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11624,9 +11884,9 @@ "dev": true }, "newman": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/newman/-/newman-6.2.0.tgz", - "integrity": "sha512-CHo/wMv+Q9B3YcIJ18pdmY9XN9X8mc2hXso8yybeclV0BVPSFz1+P5vJELWg5DB/qJgxJOh+B+k+i9tTqfzcbw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/newman/-/newman-6.2.1.tgz", + "integrity": "sha512-Zq8Sr5GFF+OXs5yIbyglLMKMh1WNMjYVV0yZaSBZ+DIgQOIWcxT8QTfbrl/YUGrLyT4rjpu+yZ/Z+kozw79GEA==", "dev": true, "requires": { "@postman/tough-cookie": "4.1.3-postman.1", @@ -11641,10 +11901,10 @@ "liquid-json": "0.3.1", "lodash": "4.17.21", "mkdirp": "3.0.1", - "postman-collection": "4.5.0", + "postman-collection": "4.4.0", "postman-collection-transformer": "4.1.8", - "postman-request": "2.88.1-postman.39", - "postman-runtime": "7.41.2", + "postman-request": "2.88.1-postman.34", + "postman-runtime": "7.39.1", "pretty-ms": "7.0.1", "semver": "7.6.3", "serialised-error": "1.1.3", @@ -11666,68 +11926,10 @@ } } }, - "nise": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.2.tgz", - "integrity": "sha512-+gQjFi8v+tkfCuSCxfURHLhRhniE/+IaYbIphxAN2JRR9SHKhY8hgXpaXiYfHdw+gcGe4buxgbprBQFab9FkhA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^7.0.4", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - }, - "dependencies": { - "@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, "node-addon-api": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", - "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.1.tgz", + "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==" }, "node-forge": { "version": "1.3.1", @@ -11735,6 +11937,11 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, + "node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==" + }, "node-oauth1": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/node-oauth1/-/node-oauth1-1.3.0.tgz", @@ -11742,13 +11949,13 @@ "dev": true }, "nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, "requires": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -11760,12 +11967,12 @@ }, "dependencies": { "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "^2.1.3" } }, "has-flag": { @@ -11791,42 +11998,18 @@ } } }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, "object-hash": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", @@ -11834,9 +12017,9 @@ "dev": true }, "object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" }, "object.defaults": { "version": "1.1.0", @@ -11881,14 +12064,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -11896,7 +12080,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" } }, "os-homedir": { @@ -11939,6 +12123,12 @@ "p-limit": "^3.0.2" } }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11985,7 +12175,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, "path-key": { "version": "3.1.1", @@ -12014,16 +12205,28 @@ "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true }, - "path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + } + } }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + "path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "performance-now": { "version": "2.1.0", @@ -12031,6 +12234,12 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -12044,9 +12253,9 @@ "dev": true }, "postman-collection": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz", - "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", + "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", "dev": true, "requires": { "@faker-js/faker": "5.5.3", @@ -12058,25 +12267,19 @@ "mime-format": "2.0.1", "mime-types": "2.1.35", "postman-url-encoder": "3.0.5", - "semver": "7.6.3", + "semver": "7.5.4", "uuid": "8.3.2" }, "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "lru-cache": "^6.0.0" } }, - "semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -12103,18 +12306,27 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } } } }, "postman-request": { - "version": "2.88.1-postman.39", - "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.39.tgz", - "integrity": "sha512-rsncxxDlbn1YpygXSgJqbJzIjGlHFcZjbYDzeBPTQHMDfLuSTzZz735JHV8i1+lOROuJ7MjNap4eaSD3UijHzQ==", + "version": "2.88.1-postman.34", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.34.tgz", + "integrity": "sha512-GkolJ4cIzgamcwHRDkeZc/taFWO1u2HuGNML47K9ZAsFH2LdEkS5Yy8QanpzhjydzV3WWthl9v60J8E7SjKodQ==", "dev": true, "requires": { "@postman/form-data": "~3.1.1", "@postman/tough-cookie": "~4.1.3-postman.1", - "@postman/tunnel-agent": "^0.6.4", + "@postman/tunnel-agent": "^0.6.3", "aws-sign2": "~0.7.0", "aws4": "^1.12.0", "brotli": "^1.3.3", @@ -12151,26 +12363,26 @@ } }, "postman-runtime": { - "version": "7.41.2", - "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.41.2.tgz", - "integrity": "sha512-efKnii+yBfqZMRjV5zFh4VXogLeZB58HmLkgT+/sZcjglth23wzp+QRlkl4nbgcL2SZX6e5cLI2/aG2Of3wMyg==", + "version": "7.39.1", + "resolved": "https://registry.npmjs.org/postman-runtime/-/postman-runtime-7.39.1.tgz", + "integrity": "sha512-IRNrBE0l1K3ZqQhQVYgF6MPuqOB9HqYncal+a7RpSS+sysKLhJMkC9SfUn1HVuOpokdPkK92ykvPzj8kCOLYAg==", "dev": true, "requires": { "@postman/tough-cookie": "4.1.3-postman.1", "async": "3.2.5", - "aws4": "1.13.1", + "aws4": "1.12.0", "handlebars": "4.7.8", "httpntlm": "1.8.13", - "jose": "5.6.3", + "jose": "4.14.4", "js-sha512": "0.9.0", "lodash": "4.17.21", "mime-types": "2.1.35", "node-forge": "1.3.1", "node-oauth1": "1.3.0", "performance-now": "2.1.0", - "postman-collection": "4.5.0", - "postman-request": "2.88.1-postman.39", - "postman-sandbox": "5.1.1", + "postman-collection": "4.4.0", + "postman-request": "2.88.1-postman.34", + "postman-sandbox": "4.7.1", "postman-url-encoder": "3.0.5", "serialised-error": "1.1.3", "strip-json-comments": "3.1.1", @@ -12178,9 +12390,9 @@ }, "dependencies": { "aws4": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz", - "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, "uuid": { @@ -12192,15 +12404,15 @@ } }, "postman-sandbox": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-5.1.1.tgz", - "integrity": "sha512-RfCTMwz3OaqhYYgtoe3VlHGiQl9hEmJ9sPh/XOlNcuvd/km6ARSFkKXFvQaLFsTHyXcHaqpInKaQSJi23uTynA==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/postman-sandbox/-/postman-sandbox-4.7.1.tgz", + "integrity": "sha512-H2wYSLK0mB588IaxoLrLoPbpmxsIcwFtgaK2c8gAsAQ+TgYFePwb4qdeVcYDMqmwrLd77/ViXkjasP/sBMz1sQ==", "dev": true, "requires": { "lodash": "4.17.21", - "postman-collection": "4.5.0", + "postman-collection": "4.4.0", "teleport-javascript": "1.0.0", - "uvm": "3.0.0" + "uvm": "2.1.1" } }, "postman-url-encoder": { @@ -12233,6 +12445,11 @@ "parse-ms": "^2.1.0" } }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -12248,10 +12465,13 @@ } }, "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } }, "pstree.remy": { "version": "1.1.8", @@ -12260,9 +12480,9 @@ "dev": true }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "qs": { "version": "6.13.0", @@ -12278,12 +12498,6 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, "queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", @@ -12304,13 +12518,13 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" } }, @@ -12318,6 +12532,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12371,12 +12586,6 @@ "resolve": "^1.9.0" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -12416,29 +12625,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -12456,12 +12642,9 @@ "dev": true }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==" }, "send": { "version": "0.19.0", @@ -12515,9 +12698,9 @@ } }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -12534,24 +12717,6 @@ "send": "0.19.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12573,20 +12738,54 @@ "dev": true }, "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "requires": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true }, "simple-update-notifier": { "version": "2.0.0", @@ -12598,25 +12797,18 @@ } }, "sinon": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", - "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-20.0.0.tgz", + "integrity": "sha512-+FXOAbdnj94AQIxH0w1v8gzNxkawVvNqE3jUzRLptR71Oykeu2RrQXXl/VQjKay+Qnh73fDt/oDfMo6xMeDQbQ==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^9.1.2", - "@sinonjs/samsam": "^7.0.1", - "diff": "^5.0.0", - "nise": "^5.1.2", + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", "supports-color": "^7.2.0" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -12716,6 +12908,18 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12726,6 +12930,16 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -12757,26 +12971,6 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, - "tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" - } - } - }, "tar-stream": { "version": "3.1.7", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", @@ -12793,12 +12987,6 @@ "integrity": "sha512-j1llvWVFyEn/6XIFDfX5LAU43DXe0GCt3NfXDwJ8XpRRMkS+i50SAkonAONBy+vxwPFBd50MFU8a2uj8R/ccLg==", "dev": true }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -12833,11 +13021,6 @@ } } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -12865,12 +13048,6 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -12953,7 +13130,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "utils-merge": { "version": "1.0.1", @@ -12961,17 +13139,25 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==" }, "uvm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uvm/-/uvm-3.0.0.tgz", - "integrity": "sha512-dATVpxsNfFBpHNdq6sy4/CV2UnoRbV8tvvkK0VrUPnm+o7dK6fnir4LEm8czeDdpbw2KKDKjIPcRSZY4AEwEZA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/uvm/-/uvm-2.1.1.tgz", + "integrity": "sha512-BZ5w8adTpNNr+zczOBRpaX/hH8UPKAf7fmCnidrcsqt3bn8KT9bDIfuS7hgRU9RXgiN01su2pwysBONY6w8W5w==", "dev": true, "requires": { - "flatted": "3.3.1" + "flatted": "3.2.6" + }, + "dependencies": { + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true + } } }, "v8flags": { @@ -12999,20 +13185,6 @@ "extsprintf": "^1.2.0" } }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -13022,14 +13194,6 @@ "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -13043,9 +13207,9 @@ "dev": true }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true }, "wrap-ansi": { @@ -13059,15 +13223,27 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "requires": {} }, "xmlbuilder": { @@ -13085,27 +13261,28 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yargs-unparser": { diff --git a/package.json b/package.json index f1cf1d6..d0ca503 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "db:export": "mongodump --db OpenHaus --archive=./demo-database.gz", "db:import": "mongorestore --db OpenHaus --archive=./demo-database.gz", "postinstall": "scripts/post-install.sh", - "publish": "grunt publish" + "publish": "grunt publish", + "prepare": "husky" }, "engines": { "node": ">=18.0.0" @@ -28,35 +29,38 @@ "author": "Marc Stirner ", "license": "ISC", "dependencies": { - "bcrypt": "^5.1.0", - "body-parser": "^1.20.1", + "bcrypt": "^6.0.0", + "body-parser": "^2.2.0", "colors": "^1.4.0", - "dateformat": "^4.6.3", - "dns-packet": "^5.4.0", - "dotenv": "^16.0.3", - "express": "^4.18.2", - "joi": "^17.6.4", - "jsonwebtoken": "^9.0.0", + "dateformat": "^5.0.3", + "dns-packet": "^5.6.1", + "dotenv": "^16.5.0", + "express": "^4.21.2", + "joi": "^17.13.3", + "jsonwebtoken": "^9.0.2", "mongodb": "^4.11.0", - "mqtt-packet": "^8.1.2", - "semver": "^7.5.4", + "mqtt-packet": "^9.0.2", + "semver": "^7.7.2", "tar-stream": "^3.1.7", - "uuid": "^9.0.0", - "ws": "^8.10.0" + "uuid": "^11.1.0", + "ws": "^8.18.2" }, "devDependencies": { - "eslint": "^8.24.0", - "grunt": "^1.5.3", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.27.0", + "eslint": "^9.27.0", + "globals": "^16.2.0", + "grunt": "^1.6.1", "grunt-contrib-compress": "^2.0.0", "grunt-contrib-uglify": "^5.0.1", "grunt-env": "^1.0.1", "grunt-run": "^0.8.1", - "husky": "^8.0.3", - "minimist": "^1.2.6", - "mocha": "^9.2.2", + "husky": "^9.1.7", + "minimist": "^1.2.8", + "mocha": "^11.5.0", "mocha.parallel": "^0.15.6", - "newman": "^6.0.0", - "nodemon": "^3.0.1", - "sinon": "^14.0.2" + "newman": "^6.2.1", + "nodemon": "^3.1.10", + "sinon": "^20.0.0" } } diff --git a/scripts/post-install.sh b/scripts/post-install.sh index 821f5c3..0bc6292 100755 --- a/scripts/post-install.sh +++ b/scripts/post-install.sh @@ -19,6 +19,8 @@ if [ "$NODE_ENV" = "production" ]; then else # test/development installation - npx husky install + #npx husky install # deprecated + #npx husky init + true fi \ No newline at end of file diff --git a/system/logger/formatter.js b/system/logger/formatter.js index 9256fb8..b0f08a0 100644 --- a/system/logger/formatter.js +++ b/system/logger/formatter.js @@ -1,4 +1,4 @@ -const dateFormat = require("dateformat"); +const dateFormat = require("dateformat").default; const safe = require("colors/safe"); const levels = require("./levels.js"); From 87b17dfafef806385bffaba53c2ccc53d5839cd1 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Tue, 27 May 2025 16:53:39 +0200 Subject: [PATCH 090/112] v16 removed, v24 added --- .github/workflows/node-js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-js.yml b/.github/workflows/node-js.yml index e4fedf4..c68d84b 100644 --- a/.github/workflows/node-js.yml +++ b/.github/workflows/node-js.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [16.x, 18.x, 20.x, 22.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + node-version: [18.x, 20.x, 22.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ mongodb-version: ["4.2", "4.4", "5.0", "6.0", "7.0", "8.0"] steps: From c9cfaef2e51abeb38261a802315216894e7d9749 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Wed, 28 May 2025 20:51:29 +0200 Subject: [PATCH 091/112] updated mongodb, see #548 --- components/devices/index.js | 22 +- components/endpoints/index.js | 23 +- components/mdns/index.js | 22 +- components/mqtt/index.js | 22 +- components/plugins/index.js | 21 +- components/rooms/index.js | 22 +- components/scenes/index.js | 22 +- components/ssdp/index.js | 22 +- components/store/index.js | 22 +- components/users/index.js | 22 +- components/vault/index.js | 22 +- components/webhooks/index.js | 23 +- package-lock.json | 473 ++++++++++++++++++++-------- package.json | 4 +- system/component/class.base.js | 30 +- system/component/class.component.js | 185 ++++++----- system/init/init.database.js | 47 ++- 17 files changed, 587 insertions(+), 417 deletions(-) diff --git a/components/devices/index.js b/components/devices/index.js index 52ed92e..9e3e1b6 100644 --- a/components/devices/index.js +++ b/components/devices/index.js @@ -215,25 +215,21 @@ const instance = module.exports = new C_DEVICES(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Device(obj); + scope.items.push(item); + }); - data = data.map((item) => { - return new Device(item); - }); - + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/endpoints/index.js b/components/endpoints/index.js index fe6685a..626a72a 100644 --- a/components/endpoints/index.js +++ b/components/endpoints/index.js @@ -126,23 +126,22 @@ const instance = module.exports = new C_ENDPOINTS(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Endpoint(obj); + scope.items.push(item); - data = data.map((item) => { - return new Endpoint(item); - }); + }); - scope.items.push(...data); + // init done + ready(null); - // init done - ready(null); + }).catch((err) => { + + ready(err); - } }); + }); \ No newline at end of file diff --git a/components/mdns/index.js b/components/mdns/index.js index f4aeced..1759c83 100644 --- a/components/mdns/index.js +++ b/components/mdns/index.js @@ -56,23 +56,21 @@ const instance = module.exports = new C_MDNS(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new MDNS(obj); + scope.items.push(item); - data = data.map((obj) => { - return new MDNS(obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/mqtt/index.js b/components/mqtt/index.js index 9f19f15..b1abfa2 100644 --- a/components/mqtt/index.js +++ b/components/mqtt/index.js @@ -75,23 +75,21 @@ const instance = module.exports = new C_MQTT(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new MQTT(obj); + scope.items.push(item); - data = data.map((obj) => { - return new MQTT(obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/plugins/index.js b/components/plugins/index.js index d1326c7..fb32ffb 100644 --- a/components/plugins/index.js +++ b/components/plugins/index.js @@ -86,24 +86,21 @@ const instance = module.exports = new C_PLUGINS(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Plugin(obj); + scope.items.push(item); - data = data.map((obj) => { - return new Plugin(obj); - }); + }); - scope.items.push(...data); + // init done + ready(null); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/rooms/index.js b/components/rooms/index.js index 8fbd783..44ab398 100644 --- a/components/rooms/index.js +++ b/components/rooms/index.js @@ -68,23 +68,21 @@ const instance = module.exports = new C_ROOMS(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Room(obj); + scope.items.push(item); - data = data.map((obj) => { - return new Room(obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/scenes/index.js b/components/scenes/index.js index 9602b6b..1bd455d 100644 --- a/components/scenes/index.js +++ b/components/scenes/index.js @@ -66,21 +66,21 @@ const instance = module.exports = new C_SCENES(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Scene(obj); + scope.items.push(item); - data.forEach((obj) => { - scope.items.push(new Scene(obj)); - }); + }); + + // init done + ready(null); + + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/ssdp/index.js b/components/ssdp/index.js index 87254b1..46bb878 100644 --- a/components/ssdp/index.js +++ b/components/ssdp/index.js @@ -79,23 +79,21 @@ const instance = module.exports = new C_SSDP(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new SSDP(obj); + scope.items.push(item); - data = data.map((obj) => { - return new SSDP(obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/store/index.js b/components/store/index.js index 2a1712a..c70b49e 100644 --- a/components/store/index.js +++ b/components/store/index.js @@ -71,25 +71,21 @@ const instance = module.exports = new C_STORE(); // init component // set items/build cache instance.init((scope, ready) => { + scope.collection.find({}).toArray().then((data) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + data.forEach((obj) => { - // shit... - ready(err); + let item = new Store(obj); + scope.items.push(item); - } else { + }); - data = data.map((obj) => { - return new Store(obj); - }); + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); - }); \ No newline at end of file diff --git a/components/users/index.js b/components/users/index.js index 62cef51..48a6e4c 100644 --- a/components/users/index.js +++ b/components/users/index.js @@ -232,24 +232,22 @@ instance.init((scope, ready) => { return ready(new Error("You need to set a `USERS_JWT_SECRET` environment variable!")); } - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new User(scope, obj); + scope.items.push(item); - data = data.map((obj) => { - return new User(scope, obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/vault/index.js b/components/vault/index.js index f3f2d39..2384682 100644 --- a/components/vault/index.js +++ b/components/vault/index.js @@ -100,24 +100,22 @@ instance.init((scope, ready) => { return ready(new Error("You need to set a `VAULT_MASTER_PASSWORD` environment variable!")); } - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Vault(obj); + scope.items.push(item); - data = data.map((obj) => { - return new Vault(obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); }); \ No newline at end of file diff --git a/components/webhooks/index.js b/components/webhooks/index.js index 77c4edf..8e0c2ca 100644 --- a/components/webhooks/index.js +++ b/components/webhooks/index.js @@ -34,23 +34,22 @@ const instance = module.exports = new C_WEBHOOKS(); // init component // set items/build cache instance.init((scope, ready) => { - scope.collection.find({}).toArray((err, data) => { - if (err) { + scope.collection.find({}).toArray().then((data) => { - // shit... - ready(err); + data.forEach((obj) => { - } else { + let item = new Webhook(obj); + scope.items.push(item); - data = data.map((obj) => { - return new Webhook(obj); - }); + }); + + // init done + ready(null); - scope.items.push(...data); + }).catch((err) => { - // init done - ready(null); + ready(err); - } }); + }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 23786ad..4bcaed8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "express": "^4.21.2", "joi": "^17.13.3", "jsonwebtoken": "^9.0.2", - "mongodb": "^4.11.0", + "mongodb": "^6.16.0", "mqtt-packet": "^9.0.2", "semver": "^7.7.2", "tar-stream": "^3.1.7", @@ -45,7 +45,7 @@ "sinon": "^20.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" } }, "node_modules/@aws-crypto/sha256-browser": { @@ -54,6 +54,7 @@ "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -70,6 +71,7 @@ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -83,6 +85,7 @@ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -97,6 +100,7 @@ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -111,6 +115,7 @@ "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -126,6 +131,7 @@ "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" } @@ -136,6 +142,7 @@ "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -148,6 +155,7 @@ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -161,6 +169,7 @@ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -175,6 +184,7 @@ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -189,6 +199,7 @@ "integrity": "sha512-kOk4hIJy51xta2Tq2bNonHXdOZEZ3b3IdctxSYPtXMxATvhGPxEYm4reiIabDxBxWv+blF5qM54pBQXV/dsfrQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -242,6 +253,7 @@ "integrity": "sha512-E0MObuGylqY2yf47bZZAFK+4+C13c4Cs3HobXgCV3+myoHaxxQHltQuGrapxWOiJJzNmABKEPjBcMnRWnZHXCQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -292,6 +304,7 @@ "integrity": "sha512-VgnAnQwt88oj6OSnIEouvTKN8JI2PzcC3qWQSL87ZtzBSscfrSwbtBNqBxk6nQWwE7AlZuzvT7IN6loz6c7kGA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -346,6 +359,7 @@ "integrity": "sha512-+kFS+B/U/thLi8yxYgKc7QFsababYrgrIkbVgTvSzudkzk5RIlDu753L/DfXqYOtecbc6WUwlTKA+Ltee3OVXg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -398,6 +412,7 @@ "integrity": "sha512-QdfMpTpJqtpuFIFfUJEgJ+Rq/dO3I5iaViLKr9Zad4Gfi/GiRWTeXd4IvjcyRntB5GkyCak9RKMkxkECQavPJg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/core": "^2.4.7", @@ -421,6 +436,7 @@ "integrity": "sha512-wOWir00Ve38kSnkoP8CS8Vq4UqRSCSrHm7Nym1iAL0Hmf4hOQRcWXBKP08/dHpk4nt4+LqVd+dT8V2LhN7RCog==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/client-cognito-identity": "3.664.0", "@aws-sdk/types": "3.664.0", @@ -438,6 +454,7 @@ "integrity": "sha512-95rE+9Voaco0nmKJrXqfJAxSSkSWqlBy76zomiZrUrv7YuijQtHCW8jte6v6UHAFAaBzgFsY7QqBxs15u9SM7g==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -454,6 +471,7 @@ "integrity": "sha512-svaPwVfWV3g/qjd4cYHTUyBtkdOwcVjC+tSj6EjoMrpZwGUXcCbYe04iU0ARZ6tuH/u3vySbTLOGjSa7g8o9Qw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/fetch-http-handler": "^3.2.9", @@ -475,6 +493,7 @@ "integrity": "sha512-ykRLQi9gqY7xlgC33iEWyPMv19JDMpOqQfqb5zaV46NteT60ouBrS3WsCrDiwygF7HznGLpr0lpt17/C6Mq27g==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.664.0", "@aws-sdk/credential-provider-http": "3.664.0", @@ -501,6 +520,7 @@ "integrity": "sha512-JrLtx4tEtEzqYAmk+pz8B7QcBCNRN+lZAh3fbQox7q9YQaIELLM3MA6LM5kEp/uHop920MQvdhHOMtR5jjJqWA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/credential-provider-env": "3.664.0", "@aws-sdk/credential-provider-http": "3.664.0", @@ -525,6 +545,7 @@ "integrity": "sha512-sQicIw/qWTsmMw8EUQNJXdrWV5SXaZc2zGdCQsQxhR6wwNO2/rZ5JmzdcwUADmleBVyPYk3KGLhcofF/qXT2Ng==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -542,6 +563,7 @@ "integrity": "sha512-r7m+XkTAvGT9nW4aHqjWOHcoo3EfUsXx6d9JJjWn/gnvdsvhobCJx8p621aR9WeSBUTKJg5+EXGhZF6awRdZGQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/client-sso": "3.664.0", "@aws-sdk/token-providers": "3.664.0", @@ -561,6 +583,7 @@ "integrity": "sha512-10ltP1BfSKRJVXd8Yr5oLbo+VSDskWbps0X3szSsxTk0Dju1xvkz7hoIjylWLvtGbvQ+yb2pmsJYKCudW/4DJg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -580,6 +603,7 @@ "integrity": "sha512-9xxEyvZVsXvf0Dpm7eVYIrLiqOiNSWY8mAk594HldL/GYDokUzokA6NmZyQtCY2rYPSInB/4TCZ1tH4IeXRKeQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/client-cognito-identity": "3.664.0", "@aws-sdk/client-sso": "3.664.0", @@ -608,6 +632,7 @@ "integrity": "sha512-4tCXJ+DZWTq38eLmFgnEmO8X4jfWpgPbWoCyVYpRHCPHq6xbrU65gfwS9jGx25L4YdEce641ChI9TKLryuUgRA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/protocol-http": "^4.1.4", @@ -624,6 +649,7 @@ "integrity": "sha512-eNykMqQuv7eg9pAcaLro44fscIe1VkFfhm+gYnlxd+PH6xqapRki1E68VHehnIptnVBdqnWfEqLUSLGm9suqhg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/types": "^3.5.0", @@ -639,6 +665,7 @@ "integrity": "sha512-jq27WMZhm+dY8BWZ9Ipy3eXtZj0lJzpaKQE3A3tH5AOIlUV/gqrmnJ9CdqVVef4EJsq9Yil4ZzQjKKmPsxveQg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/protocol-http": "^4.1.4", @@ -655,6 +682,7 @@ "integrity": "sha512-Kp5UwXwayO6d472nntiwgrxqay2KS9ozXNmKjQfDrUWbEzvgKI+jgKNMia8MMnjSxYoBGpQ1B8NGh8a6KMEJJg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@aws-sdk/util-endpoints": "3.664.0", @@ -673,6 +701,7 @@ "integrity": "sha512-o/B8dg8K+9714RGYPgMxZgAChPe/MTSMkf/eHXTUFHNik5i1HgVKfac22njV2iictGy/6GhpFsKa1OWNYAkcUg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/node-config-provider": "^3.1.8", @@ -691,6 +720,7 @@ "integrity": "sha512-dBAvXW2/6bAxidvKARFxyCY2uCynYBKRFN00NhS1T5ggxm3sUnuTpWw1DTjl02CVPkacBOocZf10h8pQbHSK8w==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -711,6 +741,7 @@ "integrity": "sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -725,6 +756,7 @@ "integrity": "sha512-KrXoHz6zmAahVHkyWMRT+P6xJaxItgmklxEDrT+npsUB4d5C/lhw16Crcp9TDi828fiZK3GYKRAmmNhvmzvBNg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/types": "^3.5.0", @@ -741,6 +773,7 @@ "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -754,6 +787,7 @@ "integrity": "sha512-c/PV3+f1ss4PpskHbcOxTZ6fntV2oXy/xcDR9nW+kVaz5cM1G702gF0rvGLKPqoBwkj2rWGe6KZvEBeLzynTUQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/types": "3.664.0", "@smithy/types": "^3.5.0", @@ -767,6 +801,7 @@ "integrity": "sha512-l/m6KkgrTw1p/VTJTk0IoP9I2OnpWp3WbBgzxoNeh9cUcxTufIn++sBxKj5hhDql57LKWsckScG/MhFuH0vZZA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@aws-sdk/middleware-user-agent": "3.664.0", "@aws-sdk/types": "3.664.0", @@ -1196,10 +1231,10 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mongodb-js/saslprep": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", - "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", - "optional": true, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.2.2.tgz", + "integrity": "sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==", + "license": "MIT", "dependencies": { "sparse-bitfield": "^3.0.3" } @@ -1326,6 +1361,7 @@ "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1340,6 +1376,7 @@ "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/node-config-provider": "^3.1.8", "@smithy/types": "^3.5.0", @@ -1357,6 +1394,7 @@ "integrity": "sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/middleware-endpoint": "^3.1.4", "@smithy/middleware-retry": "^3.0.23", @@ -1379,6 +1417,7 @@ "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/node-config-provider": "^3.1.8", "@smithy/property-provider": "^3.1.7", @@ -1396,6 +1435,7 @@ "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/protocol-http": "^4.1.4", "@smithy/querystring-builder": "^3.0.7", @@ -1410,6 +1450,7 @@ "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "@smithy/util-buffer-from": "^3.0.0", @@ -1426,6 +1467,7 @@ "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1437,6 +1479,7 @@ "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1450,6 +1493,7 @@ "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", @@ -1465,6 +1509,7 @@ "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/middleware-serde": "^3.0.7", "@smithy/node-config-provider": "^3.1.8", @@ -1484,6 +1529,7 @@ "integrity": "sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/node-config-provider": "^3.1.8", "@smithy/protocol-http": "^4.1.4", @@ -1509,6 +1555,7 @@ ], "license": "MIT", "optional": true, + "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -1519,6 +1566,7 @@ "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1533,6 +1581,7 @@ "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1547,6 +1596,7 @@ "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", @@ -1563,6 +1613,7 @@ "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/abort-controller": "^3.1.5", "@smithy/protocol-http": "^4.1.4", @@ -1580,6 +1631,7 @@ "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1594,6 +1646,7 @@ "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1608,6 +1661,7 @@ "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "@smithy/util-uri-escape": "^3.0.0", @@ -1623,6 +1677,7 @@ "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1637,6 +1692,7 @@ "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0" }, @@ -1650,6 +1706,7 @@ "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1664,6 +1721,7 @@ "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.4", @@ -1684,6 +1742,7 @@ "integrity": "sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/middleware-endpoint": "^3.1.4", "@smithy/middleware-stack": "^3.0.7", @@ -1702,6 +1761,7 @@ "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1715,6 +1775,7 @@ "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/querystring-parser": "^3.0.7", "@smithy/types": "^3.5.0", @@ -1727,6 +1788,7 @@ "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -1742,6 +1804,7 @@ "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" } @@ -1752,6 +1815,7 @@ "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1765,6 +1829,7 @@ "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -1779,6 +1844,7 @@ "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1792,6 +1858,7 @@ "integrity": "sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/property-provider": "^3.1.7", "@smithy/smithy-client": "^3.4.0", @@ -1809,6 +1876,7 @@ "integrity": "sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/config-resolver": "^3.0.9", "@smithy/credential-provider-imds": "^3.2.4", @@ -1828,6 +1896,7 @@ "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/node-config-provider": "^3.1.8", "@smithy/types": "^3.5.0", @@ -1843,6 +1912,7 @@ "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1856,6 +1926,7 @@ "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -1870,6 +1941,7 @@ "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/service-error-classification": "^3.0.7", "@smithy/types": "^3.5.0", @@ -1885,6 +1957,7 @@ "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/fetch-http-handler": "^3.2.9", "@smithy/node-http-handler": "^3.2.4", @@ -1905,6 +1978,7 @@ "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.6.2" }, @@ -1918,6 +1992,7 @@ "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "license": "Apache-2.0", "optional": true, + "peer": true, "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -1955,16 +2030,17 @@ } }, "node_modules/@types/webidl-conversions": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", - "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" }, "node_modules/@types/whatwg-url": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", - "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", "dependencies": { - "@types/node": "*", "@types/webidl-conversions": "*" } }, @@ -2493,7 +2569,8 @@ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2535,20 +2612,19 @@ "dev": true }, "node_modules/bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "dependencies": { - "buffer": "^5.6.0" - }, + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.3.tgz", + "integrity": "sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==", + "license": "Apache-2.0", "engines": { - "node": ">=6.9.0" + "node": ">=16.20.1" } }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -3581,6 +3657,7 @@ ], "license": "MIT", "optional": true, + "peer": true, "dependencies": { "strnum": "^1.0.5" }, @@ -4629,6 +4706,8 @@ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -4641,7 +4720,9 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -5304,7 +5385,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true + "license": "MIT" }, "node_modules/merge-descriptors": { "version": "1.0.3", @@ -5583,60 +5664,59 @@ } }, "node_modules/mongodb": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", - "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.16.0.tgz", + "integrity": "sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==", + "license": "Apache-2.0", "dependencies": { - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.3", + "mongodb-connection-string-url": "^3.0.0" }, "engines": { - "node": ">=12.9.0" + "node": ">=16.20.1" }, - "optionalDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "@mongodb-js/saslprep": "^1.1.0" - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", - "dependencies": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" - } - }, - "node_modules/mongodb-connection-string-url/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dependencies": { - "punycode": "^2.1.1" + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } } }, - "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" } }, "node_modules/mqtt-packet": { @@ -7013,6 +7093,8 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "peer": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -7023,6 +7105,8 @@ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -7046,7 +7130,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "optional": true, + "license": "MIT", "dependencies": { "memory-pager": "^1.0.2" } @@ -7055,6 +7139,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/sshpk": { @@ -7212,7 +7297,8 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/supports-color": { "version": "7.2.0", @@ -7303,12 +7389,25 @@ "node": "*" } }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "license": "0BSD", - "optional": true + "optional": true, + "peer": true }, "node_modules/tweetnacl": { "version": "0.14.5", @@ -7529,6 +7628,28 @@ "extsprintf": "^1.2.0" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7734,6 +7855,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "optional": true, + "peer": true, "requires": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -7749,6 +7871,7 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -7758,6 +7881,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "optional": true, + "peer": true, "requires": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -7768,6 +7892,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "optional": true, + "peer": true, "requires": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -7780,6 +7905,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "optional": true, + "peer": true, "requires": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -7791,6 +7917,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -7800,6 +7927,7 @@ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -7811,6 +7939,7 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -7820,6 +7949,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "optional": true, + "peer": true, "requires": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -7830,6 +7960,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "optional": true, + "peer": true, "requires": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -7842,6 +7973,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.664.0.tgz", "integrity": "sha512-kOk4hIJy51xta2Tq2bNonHXdOZEZ3b3IdctxSYPtXMxATvhGPxEYm4reiIabDxBxWv+blF5qM54pBQXV/dsfrQ==", "optional": true, + "peer": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -7891,6 +8023,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.664.0.tgz", "integrity": "sha512-E0MObuGylqY2yf47bZZAFK+4+C13c4Cs3HobXgCV3+myoHaxxQHltQuGrapxWOiJJzNmABKEPjBcMnRWnZHXCQ==", "optional": true, + "peer": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -7937,6 +8070,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.664.0.tgz", "integrity": "sha512-VgnAnQwt88oj6OSnIEouvTKN8JI2PzcC3qWQSL87ZtzBSscfrSwbtBNqBxk6nQWwE7AlZuzvT7IN6loz6c7kGA==", "optional": true, + "peer": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -7984,6 +8118,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.664.0.tgz", "integrity": "sha512-+kFS+B/U/thLi8yxYgKc7QFsababYrgrIkbVgTvSzudkzk5RIlDu753L/DfXqYOtecbc6WUwlTKA+Ltee3OVXg==", "optional": true, + "peer": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -8032,6 +8167,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.664.0.tgz", "integrity": "sha512-QdfMpTpJqtpuFIFfUJEgJ+Rq/dO3I5iaViLKr9Zad4Gfi/GiRWTeXd4IvjcyRntB5GkyCak9RKMkxkECQavPJg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/core": "^2.4.7", @@ -8051,6 +8187,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.664.0.tgz", "integrity": "sha512-wOWir00Ve38kSnkoP8CS8Vq4UqRSCSrHm7Nym1iAL0Hmf4hOQRcWXBKP08/dHpk4nt4+LqVd+dT8V2LhN7RCog==", "optional": true, + "peer": true, "requires": { "@aws-sdk/client-cognito-identity": "3.664.0", "@aws-sdk/types": "3.664.0", @@ -8064,6 +8201,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.664.0.tgz", "integrity": "sha512-95rE+9Voaco0nmKJrXqfJAxSSkSWqlBy76zomiZrUrv7YuijQtHCW8jte6v6UHAFAaBzgFsY7QqBxs15u9SM7g==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -8076,6 +8214,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.664.0.tgz", "integrity": "sha512-svaPwVfWV3g/qjd4cYHTUyBtkdOwcVjC+tSj6EjoMrpZwGUXcCbYe04iU0ARZ6tuH/u3vySbTLOGjSa7g8o9Qw==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/fetch-http-handler": "^3.2.9", @@ -8093,6 +8232,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.664.0.tgz", "integrity": "sha512-ykRLQi9gqY7xlgC33iEWyPMv19JDMpOqQfqb5zaV46NteT60ouBrS3WsCrDiwygF7HznGLpr0lpt17/C6Mq27g==", "optional": true, + "peer": true, "requires": { "@aws-sdk/credential-provider-env": "3.664.0", "@aws-sdk/credential-provider-http": "3.664.0", @@ -8112,6 +8252,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.664.0.tgz", "integrity": "sha512-JrLtx4tEtEzqYAmk+pz8B7QcBCNRN+lZAh3fbQox7q9YQaIELLM3MA6LM5kEp/uHop920MQvdhHOMtR5jjJqWA==", "optional": true, + "peer": true, "requires": { "@aws-sdk/credential-provider-env": "3.664.0", "@aws-sdk/credential-provider-http": "3.664.0", @@ -8132,6 +8273,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.664.0.tgz", "integrity": "sha512-sQicIw/qWTsmMw8EUQNJXdrWV5SXaZc2zGdCQsQxhR6wwNO2/rZ5JmzdcwUADmleBVyPYk3KGLhcofF/qXT2Ng==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -8145,6 +8287,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.664.0.tgz", "integrity": "sha512-r7m+XkTAvGT9nW4aHqjWOHcoo3EfUsXx6d9JJjWn/gnvdsvhobCJx8p621aR9WeSBUTKJg5+EXGhZF6awRdZGQ==", "optional": true, + "peer": true, "requires": { "@aws-sdk/client-sso": "3.664.0", "@aws-sdk/token-providers": "3.664.0", @@ -8160,6 +8303,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.664.0.tgz", "integrity": "sha512-10ltP1BfSKRJVXd8Yr5oLbo+VSDskWbps0X3szSsxTk0Dju1xvkz7hoIjylWLvtGbvQ+yb2pmsJYKCudW/4DJg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -8172,6 +8316,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.664.0.tgz", "integrity": "sha512-9xxEyvZVsXvf0Dpm7eVYIrLiqOiNSWY8mAk594HldL/GYDokUzokA6NmZyQtCY2rYPSInB/4TCZ1tH4IeXRKeQ==", "optional": true, + "peer": true, "requires": { "@aws-sdk/client-cognito-identity": "3.664.0", "@aws-sdk/client-sso": "3.664.0", @@ -8196,6 +8341,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.664.0.tgz", "integrity": "sha512-4tCXJ+DZWTq38eLmFgnEmO8X4jfWpgPbWoCyVYpRHCPHq6xbrU65gfwS9jGx25L4YdEce641ChI9TKLryuUgRA==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/protocol-http": "^4.1.4", @@ -8208,6 +8354,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.664.0.tgz", "integrity": "sha512-eNykMqQuv7eg9pAcaLro44fscIe1VkFfhm+gYnlxd+PH6xqapRki1E68VHehnIptnVBdqnWfEqLUSLGm9suqhg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/types": "^3.5.0", @@ -8219,6 +8366,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.664.0.tgz", "integrity": "sha512-jq27WMZhm+dY8BWZ9Ipy3eXtZj0lJzpaKQE3A3tH5AOIlUV/gqrmnJ9CdqVVef4EJsq9Yil4ZzQjKKmPsxveQg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/protocol-http": "^4.1.4", @@ -8231,6 +8379,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.664.0.tgz", "integrity": "sha512-Kp5UwXwayO6d472nntiwgrxqay2KS9ozXNmKjQfDrUWbEzvgKI+jgKNMia8MMnjSxYoBGpQ1B8NGh8a6KMEJJg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@aws-sdk/util-endpoints": "3.664.0", @@ -8245,6 +8394,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.664.0.tgz", "integrity": "sha512-o/B8dg8K+9714RGYPgMxZgAChPe/MTSMkf/eHXTUFHNik5i1HgVKfac22njV2iictGy/6GhpFsKa1OWNYAkcUg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/node-config-provider": "^3.1.8", @@ -8259,6 +8409,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.664.0.tgz", "integrity": "sha512-dBAvXW2/6bAxidvKARFxyCY2uCynYBKRFN00NhS1T5ggxm3sUnuTpWw1DTjl02CVPkacBOocZf10h8pQbHSK8w==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/property-provider": "^3.1.7", @@ -8272,6 +8423,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.664.0.tgz", "integrity": "sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8282,6 +8434,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.664.0.tgz", "integrity": "sha512-KrXoHz6zmAahVHkyWMRT+P6xJaxItgmklxEDrT+npsUB4d5C/lhw16Crcp9TDi828fiZK3GYKRAmmNhvmzvBNg==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/types": "^3.5.0", @@ -8294,6 +8447,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -8303,6 +8457,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.664.0.tgz", "integrity": "sha512-c/PV3+f1ss4PpskHbcOxTZ6fntV2oXy/xcDR9nW+kVaz5cM1G702gF0rvGLKPqoBwkj2rWGe6KZvEBeLzynTUQ==", "optional": true, + "peer": true, "requires": { "@aws-sdk/types": "3.664.0", "@smithy/types": "^3.5.0", @@ -8315,6 +8470,7 @@ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.664.0.tgz", "integrity": "sha512-l/m6KkgrTw1p/VTJTk0IoP9I2OnpWp3WbBgzxoNeh9cUcxTufIn++sBxKj5hhDql57LKWsckScG/MhFuH0vZZA==", "optional": true, + "peer": true, "requires": { "@aws-sdk/middleware-user-agent": "3.664.0", "@aws-sdk/types": "3.664.0", @@ -8584,10 +8740,9 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@mongodb-js/saslprep": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", - "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", - "optional": true, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.2.2.tgz", + "integrity": "sha512-EB0O3SCSNRUFk66iRCpI+cXzIjdswfCs7F6nOC3RAGJ7xr5YhaicvsRwJ9eyzYvYRlCSDUO/c7g4yNulxKC1WA==", "requires": { "sparse-bitfield": "^3.0.3" } @@ -8691,6 +8846,7 @@ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8701,6 +8857,7 @@ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz", "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", "optional": true, + "peer": true, "requires": { "@smithy/node-config-provider": "^3.1.8", "@smithy/types": "^3.5.0", @@ -8714,6 +8871,7 @@ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.8.tgz", "integrity": "sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==", "optional": true, + "peer": true, "requires": { "@smithy/middleware-endpoint": "^3.1.4", "@smithy/middleware-retry": "^3.0.23", @@ -8732,6 +8890,7 @@ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz", "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", "optional": true, + "peer": true, "requires": { "@smithy/node-config-provider": "^3.1.8", "@smithy/property-provider": "^3.1.7", @@ -8745,6 +8904,7 @@ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", "optional": true, + "peer": true, "requires": { "@smithy/protocol-http": "^4.1.4", "@smithy/querystring-builder": "^3.0.7", @@ -8758,6 +8918,7 @@ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz", "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "@smithy/util-buffer-from": "^3.0.0", @@ -8770,6 +8931,7 @@ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz", "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8780,6 +8942,7 @@ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -8789,6 +8952,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz", "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", "optional": true, + "peer": true, "requires": { "@smithy/protocol-http": "^4.1.4", "@smithy/types": "^3.5.0", @@ -8800,6 +8964,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz", "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", "optional": true, + "peer": true, "requires": { "@smithy/middleware-serde": "^3.0.7", "@smithy/node-config-provider": "^3.1.8", @@ -8815,6 +8980,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.23.tgz", "integrity": "sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==", "optional": true, + "peer": true, "requires": { "@smithy/node-config-provider": "^3.1.8", "@smithy/protocol-http": "^4.1.4", @@ -8831,7 +8997,8 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "optional": true + "optional": true, + "peer": true } } }, @@ -8840,6 +9007,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8850,6 +9018,7 @@ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz", "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8860,6 +9029,7 @@ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz", "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", "optional": true, + "peer": true, "requires": { "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", @@ -8872,6 +9042,7 @@ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz", "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", "optional": true, + "peer": true, "requires": { "@smithy/abort-controller": "^3.1.5", "@smithy/protocol-http": "^4.1.4", @@ -8885,6 +9056,7 @@ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz", "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8895,6 +9067,7 @@ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz", "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8905,6 +9078,7 @@ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz", "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "@smithy/util-uri-escape": "^3.0.0", @@ -8916,6 +9090,7 @@ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz", "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8926,6 +9101,7 @@ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz", "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0" } @@ -8935,6 +9111,7 @@ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz", "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -8945,6 +9122,7 @@ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz", "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", "optional": true, + "peer": true, "requires": { "@smithy/is-array-buffer": "^3.0.0", "@smithy/protocol-http": "^4.1.4", @@ -8961,6 +9139,7 @@ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.0.tgz", "integrity": "sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==", "optional": true, + "peer": true, "requires": { "@smithy/middleware-endpoint": "^3.1.4", "@smithy/middleware-stack": "^3.0.7", @@ -8975,6 +9154,7 @@ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz", "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -8984,6 +9164,7 @@ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz", "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", "optional": true, + "peer": true, "requires": { "@smithy/querystring-parser": "^3.0.7", "@smithy/types": "^3.5.0", @@ -8995,6 +9176,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "optional": true, + "peer": true, "requires": { "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", @@ -9006,6 +9188,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -9015,6 +9198,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -9024,6 +9208,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "optional": true, + "peer": true, "requires": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -9034,6 +9219,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -9043,6 +9229,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.23.tgz", "integrity": "sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==", "optional": true, + "peer": true, "requires": { "@smithy/property-provider": "^3.1.7", "@smithy/smithy-client": "^3.4.0", @@ -9056,6 +9243,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.23.tgz", "integrity": "sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==", "optional": true, + "peer": true, "requires": { "@smithy/config-resolver": "^3.0.9", "@smithy/credential-provider-imds": "^3.2.4", @@ -9071,6 +9259,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz", "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", "optional": true, + "peer": true, "requires": { "@smithy/node-config-provider": "^3.1.8", "@smithy/types": "^3.5.0", @@ -9082,6 +9271,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -9091,6 +9281,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz", "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", "optional": true, + "peer": true, "requires": { "@smithy/types": "^3.5.0", "tslib": "^2.6.2" @@ -9101,6 +9292,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz", "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", "optional": true, + "peer": true, "requires": { "@smithy/service-error-classification": "^3.0.7", "@smithy/types": "^3.5.0", @@ -9112,6 +9304,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz", "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", "optional": true, + "peer": true, "requires": { "@smithy/fetch-http-handler": "^3.2.9", "@smithy/node-http-handler": "^3.2.4", @@ -9128,6 +9321,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "optional": true, + "peer": true, "requires": { "tslib": "^2.6.2" } @@ -9137,6 +9331,7 @@ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "optional": true, + "peer": true, "requires": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -9168,16 +9363,15 @@ } }, "@types/webidl-conversions": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz", - "integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" }, "@types/whatwg-url": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", - "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", "requires": { - "@types/node": "*", "@types/webidl-conversions": "*" } }, @@ -9570,7 +9764,8 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "optional": true + "optional": true, + "peer": true }, "brace-expansion": { "version": "1.1.11", @@ -9607,17 +9802,15 @@ "dev": true }, "bson": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", - "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", - "requires": { - "buffer": "^5.6.0" - } + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.3.tgz", + "integrity": "sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==" }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -10331,6 +10524,7 @@ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "optional": true, + "peer": true, "requires": { "strnum": "^1.0.5" } @@ -11069,6 +11263,8 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "optional": true, + "peer": true, "requires": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -11077,7 +11273,9 @@ "jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "optional": true, + "peer": true } } }, @@ -11603,8 +11801,7 @@ "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "merge-descriptors": { "version": "1.0.3", @@ -11792,48 +11989,22 @@ } }, "mongodb": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", - "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", - "requires": { - "@aws-sdk/credential-providers": "^3.186.0", - "@mongodb-js/saslprep": "^1.1.0", - "bson": "^4.7.2", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.16.0.tgz", + "integrity": "sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==", + "requires": { + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.3", + "mongodb-connection-string-url": "^3.0.0" } }, "mongodb-connection-string-url": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", - "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", "requires": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" - }, - "dependencies": { - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" } }, "mqtt-packet": { @@ -12812,12 +12983,16 @@ "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "optional": true, + "peer": true }, "socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "optional": true, + "peer": true, "requires": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -12833,7 +13008,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "optional": true, "requires": { "memory-pager": "^1.0.2" } @@ -12841,7 +13015,8 @@ "sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "devOptional": true }, "sshpk": { "version": "1.18.0", @@ -12954,7 +13129,8 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "optional": true + "optional": true, + "peer": true }, "supports-color": { "version": "7.2.0", @@ -13021,11 +13197,20 @@ } } }, + "tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "requires": { + "punycode": "^2.3.1" + } + }, "tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "optional": true + "optional": true, + "peer": true }, "tweetnacl": { "version": "0.14.5", @@ -13185,6 +13370,20 @@ "extsprintf": "^1.2.0" } }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "requires": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index d0ca503..32d9460 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "prepare": "husky" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.0.0" }, "author": "Marc Stirner ", "license": "ISC", @@ -38,7 +38,7 @@ "express": "^4.21.2", "joi": "^17.13.3", "jsonwebtoken": "^9.0.2", - "mongodb": "^4.11.0", + "mongodb": "^6.16.0", "mqtt-packet": "^9.0.2", "semver": "^7.7.2", "tar-stream": "^3.1.7", diff --git a/system/component/class.base.js b/system/component/class.base.js index bb4c64b..8938272 100644 --- a/system/component/class.base.js +++ b/system/component/class.base.js @@ -43,23 +43,29 @@ module.exports = class BASE { * @param {Function} cb Worker callback */ init(cb) { - cb(this, (err) => { - if (err) { + try { + cb(this, (err) => { + if (err) { - // see issue #53, this should not throw - this.events.emit("error", err); - //process.exit(1000); ?! + // see issue #53, this should not throw + this.events.emit("error", err); + //process.exit(1000); ?! - } else { + } else { - this.ready = true; + this.ready = true; - process.nextTick(() => { - this.events.emit("ready"); - }); + process.nextTick(() => { + this.events.emit("ready"); + }); - } - }); + } + }); + } catch (err) { + + this.events.emit("error", err); + + } } }; \ No newline at end of file diff --git a/system/component/class.component.js b/system/component/class.component.js index 435461f..1400920 100644 --- a/system/component/class.component.js +++ b/system/component/class.component.js @@ -256,7 +256,7 @@ module.exports = class COMPONENT extends COMMON { // event now contain dot notation partial update // to make things simpler, just fetch the doc and merge it - this.collection.find(documentKey).toArray((err, [doc]) => { + this.collection.find(documentKey).toArray().then(([doc]) => { // merge docs _merge(target, doc); @@ -268,6 +268,10 @@ module.exports = class COMPONENT extends COMMON { // TODO trigger update event, so changes can be detect via websockets /events API? this.events.emit("update", target); + }).catch((err) => { + + this.logger.warn(err, "Could not find document"); + }); } else if (["insert", "delete", "drop", "rename"].includes(event.operationType)) { @@ -345,83 +349,79 @@ module.exports = class COMPONENT extends COMMON { // add id to pending change events PENDING_CHANGE_EVENTS.add(result.value._id); - this.collection.insertOne(result.value, (err, ops) => { - if (err) { - if (err.code === 11000 && options.returnDuplicate) { + this.collection.insertOne(result.value).then((ops) => { - // 11000 = duplicate key - // search for object in .items and return it + if (ops.acknowledged) { + this.collection.find({ + _id: ops.insertedId + }).toArray().then(([doc]) => { - let item = this.items.find((item) => { + // feedback + this.logger.info(`Item "${doc.name || doc.description}" added`); - // NOTE: rename value to key - return Object.keys(err.keyValue).every((value) => { + // resolve takes a array + // these are arguments passed to the callback function + // when resolve is called, the cb function gets as first argument, null + // and every entry from the array as parameter + resolve([doc]); - // fixing "Duplicate unique key/index in database, but no matching item" - // see #367 - if (err.keyValue[value] instanceof mongodb.ObjectId) { - return item[value] === err.keyValue[value].toString(); - } + }).catch((err) => { - return item[value] === err.keyValue[value]; + this.logger.warn("Could not fetch added doc", err); + reject(err); - }); + }); + } else { - /* - for (let key in err.keyValue) { - console.log("Search in add data for", key) - // change to or statement? - return (item[key] && item[key] == (err.keyValue[key] || null)); - } - */ - }); + reject("Could not fetch added doc"); + this.logger.warn("Could not fetch added doc", ops); - duplicate = !!item; + } - // remove id when error occurs - PENDING_CHANGE_EVENTS.delete(result.value._id); + }).catch((err) => { + if (err.code === 11000 && options.returnDuplicate) { - if (item) { - resolve([item]); - } else { - reject(new Error(`Duplicate unique key/index in database, but no matching item`)); - } + // 11000 = duplicate key + // search for object in .items and return it - } else { + let item = this.items.find((item) => { - reject(err); + // NOTE: rename value to key + return Object.keys(err.keyValue).every((value) => { - } - } else { + // fixing "Duplicate unique key/index in database, but no matching item" + // see #367 + if (err.keyValue[value] instanceof mongodb.ObjectId) { + return item[value] === err.keyValue[value].toString(); + } - if (ops.acknowledged) { - this.collection.find({ - _id: ops.insertedId - }).toArray((err, [doc]) => { - if (err) { + return item[value] === err.keyValue[value]; - this.logger.warn("Could not fetch added doc", err); - reject(err); + }); - } else { + /* + for (let key in err.keyValue) { + console.log("Search in add data for", key) + // change to or statement? + return (item[key] && item[key] == (err.keyValue[key] || null)); + } + */ + }); - // feedback - this.logger.info(`Item "${doc.name || doc.description}" added`); + duplicate = !!item; - // resolve takes a array - // these are arguments passed to the callback function - // when resolve is called, the cb function gets as first argument, null - // and every entry from the array as parameter - resolve([doc]); + // remove id when error occurs + PENDING_CHANGE_EVENTS.delete(result.value._id); - } - }); + if (item) { + resolve([item]); } else { + reject(new Error(`Duplicate unique key/index in database, but no matching item`)); + } - reject("Could not fetch added doc"); - this.logger.warn("Could not fetch added doc", ops); + } else { - } + reject(err); } }); @@ -487,27 +487,25 @@ module.exports = class COMPONENT extends COMMON { this.collection.deleteOne({ _id: new mongodb.ObjectId(_id) - }, (err, result) => { - if (err) { + }).then((result) => { - // remove id when error occurs - PENDING_CHANGE_EVENTS.delete(result.value._id); + //if (result.n === 1 && result.ok === 1 && target) { + if (result.acknowledged && result.deletedCount > 0) { - reject(err); + this.logger.info(`Item "${target.name || target.description}" removed`); + resolve([target, result, _id]); } else { + reject(new Error("Invalid result returnd")); + } - //if (result.n === 1 && result.ok === 1 && target) { - if (result.acknowledged && result.deletedCount > 0) { + }).catch((err) => { - this.logger.info(`Item "${target.name || target.description}" removed`); - resolve([target, result, _id]); + // remove id when error occurs + PENDING_CHANGE_EVENTS.delete(result.value._id); - } else { - reject(new Error("Invalid result returnd")); - } + reject(err); - } }); }); @@ -573,39 +571,38 @@ module.exports = class COMPONENT extends COMMON { //returnOriginal: false //returnDocument: "after", //upsert: true - }, (err) => { - if (err) { + }).then(() => { - // remove id when error occurs - PENDING_CHANGE_EVENTS.delete(target._id); + // TODO HANDLE UPDATE DATA PROPERLY!!!: + // - schema valdation fucks on "adapter"/"interface" istance + // -> these are class/object instance and not "string" or what ever + // - Convert them on "shallow" object back to string or whatever?! + // - What happens after the update?! + // -> Convert them again to interface/adapter instance?! - //console.log("4tpoiwrejtkwienrut", err) - reject(err); + // VIEL GRÖ?ERES PROBLEM!!!!! + // Wir arbeiten auf generischier eben hier! + // Umwandlung von object/string zu/von object/string + // muss in middlware erflogen!!!!!!!!!!!!!! - } else { + // feedback + this.logger.info(`Item "${target.name || target.description}" updated`); - // TODO HANDLE UPDATE DATA PROPERLY!!!: - // - schema valdation fucks on "adapter"/"interface" istance - // -> these are class/object instance and not "string" or what ever - // - Convert them on "shallow" object back to string or whatever?! - // - What happens after the update?! - // -> Convert them again to interface/adapter instance?! + // TODO CHECK RESUTL! + // extend exisiting object in items array + //_extend(target, validation.value); + _merge(target, validation.value); + resolve([target]); - // VIEL GRÖ?ERES PROBLEM!!!!! - // Wir arbeiten auf generischier eben hier! - // Umwandlung von object/string zu/von object/string - // muss in middlware erflogen!!!!!!!!!!!!!! + }).catch((err) => { - // feedback - this.logger.info(`Item "${target.name || target.description}" updated`); - // TODO CHECK RESUTL! - // extend exisiting object in items array - //_extend(target, validation.value); - _merge(target, validation.value); - resolve([target]); + // remove id when error occurs + PENDING_CHANGE_EVENTS.delete(target._id); + + //console.log("4tpoiwrejtkwienrut", err) + reject(err); - } }); diff --git a/system/init/init.database.js b/system/init/init.database.js index 2f392d7..799c52e 100644 --- a/system/init/init.database.js +++ b/system/init/init.database.js @@ -30,16 +30,11 @@ module.exports = (logger) => { mongodb.MongoClient.connect(url.toString(), { - useUnifiedTopology: true, - useNewUrlParser: true, + //useUnifiedTopology: true, removed in mongodb@v4 + //useNewUrlParser: true, removed in mongodb@v4 //connectTimeoutMS: Number(process.env.DATABASE_TIMEOUT) * 1000, // #9 //socketTimeoutMS: Number(process.env.DATABASE_TIMEOUT) * 1000 // #9 - }, async (err, client) => { - - if (err) { - logger.error(err, "Could not connect to database"); - return reject(err); - } + }).then((client) => { // monky patch db instance // use this instance in other files @@ -55,35 +50,33 @@ module.exports = (logger) => { process.exit(1000); }); + }).then(() => { - try { + // check credentials + // test command + return mongodb.client.stats(); - // test authenticiation - // throws a error is auth is noc successfull - await mongodb.client.stats(); + }).then(() => { - // feedback - logger.info(`Connected to "mongodb://${url.hostname}:${url.port}${url.pathname}"`); + // feedback + logger.info(`Connected to "mongodb://${url.hostname}:${url.port}${url.pathname}"`); - process.once("SIGINT", () => { - mongodb.connection.close(() => { - logger.info(`Connection closed from "mongodb://${url.hostname}:${url.port}${url.pathname}"`); - }); + process.once("SIGINT", () => { + mongodb.connection.close(() => { + logger.info(`Connection closed from "mongodb://${url.hostname}:${url.port}${url.pathname}"`); }); + }); - resolve(); - - } catch (err) { - - if (err?.code == 13) { - logger.error("Invalid database credentials!"); - } + resolve(); - client.emit("error", err); - reject(err); + }).catch((err) => { + if (err?.code == 13) { + logger.error("Invalid database credentials!"); } + mongodb.client.emit("error", err); + reject(err); }); From d3ba8ed745563e70ab20ff4cbddbd0a143a29025 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:39:37 +0200 Subject: [PATCH 092/112] expose broadcast channel, see/fix #550 --- system/component/class.events.js | 1 + 1 file changed, 1 insertion(+) diff --git a/system/component/class.events.js b/system/component/class.events.js index bd72911..3a6b5d4 100644 --- a/system/component/class.events.js +++ b/system/component/class.events.js @@ -5,6 +5,7 @@ const channel = new BroadcastChannel("events"); module.exports = class Events extends EventEmitter { + static channel = channel; static emitted = Symbol("emitted"); static registered = Symbol("registerd"); static emitter = new EventEmitter(); From 86fedc11cf7597a1a728cf73b94dfcca5850cc85 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:40:17 +0200 Subject: [PATCH 093/112] line break removed/prettiefied --- components/webhooks/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/components/webhooks/index.js b/components/webhooks/index.js index 8e0c2ca..b02d260 100644 --- a/components/webhooks/index.js +++ b/components/webhooks/index.js @@ -51,5 +51,4 @@ instance.init((scope, ready) => { ready(err); }); - }); \ No newline at end of file From 51e9a0fbee467f4f7f6c6eca99f33810d9129e34 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:40:30 +0200 Subject: [PATCH 094/112] `.limit` property added --- tests/system/component/test.component.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/component/test.component.js b/tests/system/component/test.component.js index 1978f56..28392b5 100644 --- a/tests/system/component/test.component.js +++ b/tests/system/component/test.component.js @@ -67,7 +67,7 @@ describe("component", function () { "_defineMethod", "_mapMethod", "_ready", // common methods "items", "collection", "schema", // common properties "get", "add", "update", "remove", "find", // component methods - "found", "_labels", "labels" + "found", "_labels", "labels", "limit" ]; for (let item of getItmes(instance)) { From 5e0088a22094f88f0fca12616c53008fac26123f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:41:03 +0200 Subject: [PATCH 095/112] minor bug fix: `instanceof` used --- tests/system/component/test.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/component/test.common.js b/tests/system/component/test.common.js index 74b8be6..efdaea8 100644 --- a/tests/system/component/test.common.js +++ b/tests/system/component/test.common.js @@ -142,7 +142,7 @@ describe("common", () => { describe("- should have following properties", () => { it("should have property .logger", () => { - assert(instance.logger === logger); + assert(instance.logger instanceof Logger); }); }); From a27517529f636dbecd52c4b832b1ecf83853b19d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:41:27 +0200 Subject: [PATCH 096/112] path to files fixed --- tests/system/component/test.base.js | 2 +- tests/system/test.hooks.js | 2 +- tests/system/test.middleware.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/system/component/test.base.js b/tests/system/component/test.base.js index d9ca1bc..83c8095 100644 --- a/tests/system/component/test.base.js +++ b/tests/system/component/test.base.js @@ -4,7 +4,7 @@ const assert = require("assert"); const { BASE } = require("../../../system/component"); const event = require("events").EventEmitter; -const Hooks = require("../../../system/hooks.js"); +const Hooks = require("../../../system/class.hooks.js"); describe("base", function () { diff --git a/tests/system/test.hooks.js b/tests/system/test.hooks.js index f85291c..8e5d127 100644 --- a/tests/system/test.hooks.js +++ b/tests/system/test.hooks.js @@ -1,5 +1,5 @@ const { describe, it } = require("mocha"); -const Hooks = require("../../system/hooks"); +const Hooks = require("../../system/class.hooks.js"); describe("system/hooks", function () { diff --git a/tests/system/test.middleware.js b/tests/system/test.middleware.js index 65de999..d94932a 100644 --- a/tests/system/test.middleware.js +++ b/tests/system/test.middleware.js @@ -1,5 +1,5 @@ const { describe, it } = require("mocha"); -const Middleware = require("../../system/middleware"); +const Middleware = require("../../system/class.middleware.js"); const assert = require("assert").strict; describe("system/middleware", () => { From 7ca706e9c9247c0cb595cc6397239a3c6fc5814d Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:41:52 +0200 Subject: [PATCH 097/112] cleanup before each test fixed/improved --- tests/components/index.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/components/index.js b/tests/components/index.js index 3207e31..11f6ff8 100644 --- a/tests/components/index.js +++ b/tests/components/index.js @@ -1,4 +1,6 @@ const { describe, it } = require("mocha"); +const fs = require("fs"); +const path = require("path"); describe("Components", () => { @@ -12,10 +14,26 @@ describe("Components", () => { ].forEach((name) => { describe(name, () => { + // clear require cach before each test + // otherwise the `.scope` property cant be set in component classes + // because its not configurerable/writable + beforeEach((done) => { + + let base = path.join(process.cwd(), `components/${name}/`); + + fs.readdirSync(base).map((file) => { + return path.join(base, file); + }).forEach((file) => { + delete require.cache[file]; + }); + + done(); + + }); + it(`should emit the "ready" event when init is done`, (done) => { - delete require.cache[require.resolve(`../../components/${name}`)]; let C_COMPONENT = require(`../../components/${name}`); C_COMPONENT.events.once("ready", () => { @@ -27,7 +45,6 @@ describe("Components", () => { it(`should call the ._ready callback when init is done`, (done) => { - delete require.cache[require.resolve(`../../components/${name}`)]; let C_COMPONENT = require(`../../components/${name}`); C_COMPONENT._ready(() => { From 27c82628eb401422a1668731e4a1d2388714962c Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:42:49 +0200 Subject: [PATCH 098/112] switche to async/await, fix #550 --- tests/index.js | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/tests/index.js b/tests/index.js index 672eb9e..3e8a9ef 100644 --- a/tests/index.js +++ b/tests/index.js @@ -1,6 +1,7 @@ const mongodb = require("mongodb"); const path = require("path"); const { describe, it, after } = require("mocha"); +const { channel } = require("../system/component/class.events.js"); const env = require("dotenv").config({ path: path.resolve(process.cwd(), ".env") @@ -48,36 +49,45 @@ if (!process.env.DATABASE_URL) { describe("Database", () => { it(`- Should connect to ${process.env.DATABASE_URL}`, (done) => { - mongodb.MongoClient.connect(process.env.DATABASE_URL, { - useUnifiedTopology: true, - useNewUrlParser: true - }, (err, client) => { - if (err) { - return done(err); - } + mongodb.MongoClient.connect(process.env.DATABASE_URL, { + //useUnifiedTopology: true, + //useNewUrlParser: true + }).then((client) => { - //assert(err, null); + /* + // mocha should handle this with specific error code + client.on("serverClosed", () => { + process.exit(); + }); + */ mongodb.connection = client; mongodb.client = client.db(); - done(err); + done(); - require("./helper/index.js"); + //require("./helper/index.js"); require("./system/index.js"); require("./components/index.js"); //require("./http-api/index.js"); + }).catch((err) => { + + console.error(err); + + done(err); + process.exit(1); + }); }); }); -after((done) => { - mongodb.client.dropDatabase(() => { - mongodb.connection.close(() => { - done(); - }); - }); +after(async () => { + + channel.close(); // close brodcast channel, see #6 + await mongodb.client.dropDatabase(); + await mongodb.connection.close(); + }); \ No newline at end of file From 8019f7976939f0080175d27eed0cad66f35cd6bb Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:43:37 +0200 Subject: [PATCH 099/112] fix #549 --- components/users/class.user.js | 17 ++++++++++++----- components/users/index.js | 8 +++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/components/users/class.user.js b/components/users/class.user.js index e6d5c5c..17149dc 100644 --- a/components/users/class.user.js +++ b/components/users/class.user.js @@ -24,7 +24,7 @@ const Item = require("../../system/component/class.item.js"); */ module.exports = class User extends Item { - constructor(scope, obj) { + constructor(obj) { super(obj); @@ -32,12 +32,15 @@ module.exports = class User extends Item { //Object.assign(this, obj); //this._id = String(obj._id); + /* + // removed, see #594 Object.defineProperty(this, "_scope", { value: scope, writable: false, enumerable: false, configurable: false }); + */ } @@ -89,12 +92,14 @@ module.exports = class User extends Item { this.tokens.push(token); - this._scope.update(this._id, this, (err, data) => { + let { logger, update } = User.scope; + + update(this._id, this, (err, data) => { if (err) { done(err); } else { - this._scope.logger.verbose(`Token for user "${this.name}" (${this._id}) added.`); + logger.verbose(`Token for user "${this.name}" (${this._id}) added.`); done(null, token, data); @@ -129,12 +134,14 @@ module.exports = class User extends Item { this.tokens.splice(index, 1); - this._scope.update(this._id, this, (err, result) => { + let { logger, update } = User.scope; + + update(this._id, this, (err, result) => { if (err) { done(err); } else { - this._scope.logger.verbose(`Token from user "${this.name}" (${this._id}) removed.`); + logger.verbose(`Token from user "${this.name}" (${this._id}) removed.`); done(null, result); diff --git a/components/users/index.js b/components/users/index.js index 48a6e4c..062f712 100644 --- a/components/users/index.js +++ b/components/users/index.js @@ -23,10 +23,12 @@ class C_USERS extends COMPONENT { constructor() { // inject logger, collection and schema object - super("users", User.schema()); + super("users", User.schema(), [ + User + ]); this.hooks.post("add", (data, next) => { - next(null, new User(this, data)); + next(null, new User(data)); }); // patch password if item exists & is set @@ -236,7 +238,7 @@ instance.init((scope, ready) => { data.forEach((obj) => { - let item = new User(scope, obj); + let item = new User(obj); scope.items.push(item); }); From 07cdbd87e8193e9915ddcbc6e56d635ce8256429 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Thu, 29 May 2025 16:49:09 +0200 Subject: [PATCH 100/112] removed node v20 --- .github/workflows/node-js.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/node-js.yml b/.github/workflows/node-js.yml index c68d84b..a220edd 100644 --- a/.github/workflows/node-js.yml +++ b/.github/workflows/node-js.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [18.x, 20.x, 22.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + node-version: [20.x, 22.x, 24.x] # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ mongodb-version: ["4.2", "4.4", "5.0", "6.0", "7.0", "8.0"] steps: From a894e71b759aa85d37dee456898ec06a97ced8a5 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 09:50:51 +0200 Subject: [PATCH 101/112] fixed asnyc/cb issue, see mongodb update #548 --- routes/router.system.info.js | 38 +++++++++++++++--------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/routes/router.system.info.js b/routes/router.system.info.js index 14d03a6..6074a73 100644 --- a/routes/router.system.info.js +++ b/routes/router.system.info.js @@ -1,7 +1,7 @@ const process = require("process"); const { exec } = require("child_process"); const os = require("os"); -//const mongodb = require("mongodb"); +const mongodb = require("mongodb"); module.exports = (router) => { @@ -45,23 +45,20 @@ module.exports = (router) => { // get mongodb version // TODO: before enable this, check if this works with authentication - /* new Promise((resolve, reject) => { let db = mongodb.client.admin(); - db.serverStatus((err, info) => { - if (err) { - reject(err); - } else { - resolve(info.version); - } + db.serverStatus().then(({ version }) => { + resolve(version); + }).catch((err) => { + reject(err); }); }), - */ // calculate cpu usage + /* new Promise((resolve, reject) => { try { @@ -95,28 +92,25 @@ module.exports = (router) => { reject(err); } }) + */ ]).then((results) => { // remove whitespaces & convert to string - let [npm, tar, /*mongodb,*/ cpu, ram] = results.map((result) => { + let [npm, tar, mongodb, /*cpu, ram*/] = results.map((result) => { return String(result).trim(); }); - res.json({ - versions: { - node: process.versions.node, - npm, - tar, - //mongodb - }, - // ore move this into a /usage route? - usage: { - cpu, - ram - } + let versions = Object.create(null); + + Object.assign(versions, process.versions, { + npm, + tar, + mongodb }); + res.json(versions); + }).catch((err) => { res.status(500).json({ From e7741f5c5ba5b149d6f5793f41318918cece213f Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 09:51:35 +0200 Subject: [PATCH 102/112] fixed issued, randomized credentials --- tests/http-api/index.js | 14 ++++++++++---- tests/index.js | 17 +++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index a1a5927..78e44aa 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -21,7 +21,7 @@ describe("HTTP API", function () { silent: true, env: Object.assign({}, process.env, { UUID: crypto.randomUUID(), - DATABASE_NAME: "test", + DATABASE_NAME: crypto.randomBytes(8).toString("hex"), VAULT_MASTER_PASSWORD: crypto.randomBytes(24).toString("hex"), USERS_JWT_SECRET: crypto.randomBytes(24).toString("hex") }) @@ -46,7 +46,13 @@ describe("HTTP API", function () { let emitter = newman.run({ collection, //reporters: "json", - timeoutRequest: 3000 + //timeoutRequest: 30000 + delayRequest: 200 + }); + + emitter.on("beforeItem", (err, { item }) => { + let { request } = item; + console.log(`\t[${request.method}] ${item.name} (${request.url})`); }); emitter.once("exception", (err, { error }) => { @@ -62,8 +68,8 @@ describe("HTTP API", function () { } else { - summary.run.failures.forEach(({ source: { request }, error }) => { - console.error(`[${request.method}] ${request.url.toString()}`, error.message); + summary.run.failures.forEach(({ source: { name, request }, error }) => { + console.error(`[${request.method}] ${request.url.toString()} (${name})`, error.message); }); assert.equal(summary.run.failures.length, 0); diff --git a/tests/index.js b/tests/index.js index 3e8a9ef..e7b68ba 100644 --- a/tests/index.js +++ b/tests/index.js @@ -2,6 +2,7 @@ const mongodb = require("mongodb"); const path = require("path"); const { describe, it, after } = require("mocha"); const { channel } = require("../system/component/class.events.js"); +const crypto = require("crypto"); const env = require("dotenv").config({ path: path.resolve(process.cwd(), ".env") @@ -15,27 +16,27 @@ if (env.error) { console.clear(); process.env = Object.assign({ - UUID: "", + UUID: crypto.randomUUID(), DATABASE_HOST: "127.0.0.1", DATABASE_PORT: "27017", - DATABASE_NAME: "OpenHaus-unit-tests", + DATABASE_NAME: crypto.randomBytes(8).toString("hex"), DATABASE_URL: "", DATABASE_WATCH_CHANGES: "false", LOG_PATH: path.resolve(process.cwd(), "logs"), LOG_LEVEL: "verbose", - LOG_DATEFORMAT: "yyyy.mm.dd - HH:MM.ss.l", + LOG_DATEFORMAT: "yyyy.mm.dd - HH:MM:ss.l", LOG_SUPPRESS: "true", LOG_TARGET: "", NODE_ENV: "test", DEBUG: "", - VAULT_MASTER_PASSWORD: "Pa$$w0rd", + VAULT_MASTER_PASSWORD: crypto.randomBytes(24).toString("hex"), VAULT_BLOCK_CIPHER: "aes-256-cbc", VAULT_AUTH_TAG_BYTE_LEN: "16", VAULT_IV_BYTE_LEN: "16", VAULT_KEY_BYTE_LEN: "32", VAULT_SALT_BYTE_LEN: "16", USERS_BCRYPT_SALT_ROUNDS: "12", - USERS_JWT_SECRET: "Pa$$w0rd", + USERS_JWT_SECRET: crypto.randomBytes(24).toString("hex"), USERS_JWT_ALGORITHM: "HS384", MQTT_BROKER_VERSION: "3" }, env.parsed, process.env); @@ -67,10 +68,10 @@ describe("Database", () => { done(); - //require("./helper/index.js"); + require("./helper/index.js"); require("./system/index.js"); require("./components/index.js"); - //require("./http-api/index.js"); + require("./http-api/index.js"); }).catch((err) => { @@ -86,7 +87,7 @@ describe("Database", () => { after(async () => { - channel.close(); // close brodcast channel, see #6 + channel.close(); // close brodcast channel, see #6 & #550 await mongodb.client.dropDatabase(); await mongodb.connection.close(); From 644fbda25ffb8b6770f4a23dfbc908c3a7c68762 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 09:51:42 +0200 Subject: [PATCH 103/112] updated --- postman.json | 211 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 136 insertions(+), 75 deletions(-) diff --git a/postman.json b/postman.json index 73ca0b8..80fdb67 100644 --- a/postman.json +++ b/postman.json @@ -276,7 +276,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } }, { @@ -285,7 +286,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } } ], @@ -294,7 +296,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"_id\": \"658187db41c59ef57eb25df8\",\n \"name\": \"Evening\",\n \"makros\": [{\n \"type\": \"command\",\n \"endpoint\": \"63a0ce5b33d59ec69d8ffe18\",\n \"command\": \"63a0ce5b33d59ec69d8ffe19\"\n }, {\n \"type\": \"command\",\n \"endpoint\": \"63a1753f44427ef1a83426bf\",\n \"command\": \"63a1753f44427ef1a83426c0\"\n }, {\n \"type\": \"command\",\n \"endpoint\": \"63a1753f44427ef1a83426af\",\n \"command\": \"63a1753f44427ef1a83426b0\"\n }]\n}", + "raw": "{\n \"_id\": \"658187db41c59ef57eb25df8\",\n \"name\": \"Gruppeninput Farbe\",\n \"inputs\": [{\n \"name\": \"R\",\n \"key\": \"r\",\n \"type\": \"number\"\n }, {\n \"name\": \"G\",\n \"key\": \"g\",\n \"type\": \"number\"\n },\n {\n \"name\": \"B\",\n \"key\": \"b\",\n \"type\": \"number\"\n }],\n \"makros\": [\n {\n \"type\": \"command\",\n \"endpoint\": \"67e918e6fde2819cb4218bd0\",\n \"command\": \"67e918e6fde2819cb4218bd3\"\n }\n ]\n}", "options": { "raw": { "language": "json" @@ -441,7 +443,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } } ], @@ -450,7 +453,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"name\": \"Evening\",\n \"makros\": [{\n \"type\": \"command\",\n \"endpoint\": \"63a0ce5b33d59ec69d8ffe18\",\n \"command\": \"63a0ce5b33d59ec69d8ffe19\"\n }, {\n \"type\": \"command\",\n \"endpoint\": \"63a1753f44427ef1a83426bf\",\n \"command\": \"63a1753f44427ef1a83426c0\"\n }, {\n \"type\": \"timer\",\n \"value\": \"3000\"\n }, {\n \"type\": \"command\",\n \"endpoint\": \"63a1753f44427ef1a83426af\",\n \"command\": \"63a1753f44427ef1a83426b0\"\n }]\n}", + "raw": "{\n \"inputs\": [\n {\n \"name\": \"R\",\n \"key\": \"r\",\n \"type\": \"number\",\n \"value\": 49,\n \"min\": 0,\n \"max\": 255\n },\n {\n \"name\": \"G\",\n \"key\": \"g\",\n \"type\": \"number\",\n \"value\": 24,\n \"min\": 0,\n \"max\": 255\n },\n {\n \"name\": \"B\",\n \"key\": \"b\",\n \"type\": \"number\",\n \"value\": 6,\n \"min\": 0,\n \"max\": 255\n }\n ]\n}", "options": { "raw": { "language": "json" @@ -474,10 +477,19 @@ "response": [] }, { - "name": "Trigger scene", + "name": "Trigger scene execution", "request": { "method": "POST", "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"inputs\": [\n {\n \"value\": 152,\n \"key\": \"r\"\n },\n {\n \"value\": 100,\n \"key\": \"g\"\n },\n {\n \"value\": 25,\n \"key\": \"b\"\n }\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, "url": { "raw": "http://{{HOST}}:{{PORT}}/api/scenes/658187db41c59ef57eb25df8/trigger", "protocol": "http", @@ -496,7 +508,29 @@ "response": [] }, { - "name": "Abort scene", + "name": "Get scene state", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://{{HOST}}:{{PORT}}/api/scenes/658187db41c59ef57eb25df8/state", + "protocol": "http", + "host": [ + "{{HOST}}" + ], + "port": "{{PORT}}", + "path": [ + "api", + "scenes", + "658187db41c59ef57eb25df8", + "state" + ] + } + }, + "response": [] + }, + { + "name": "Abort scene execution", "request": { "method": "POST", "header": [], @@ -1324,7 +1358,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } }, { @@ -1333,7 +1368,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } } ], @@ -1342,7 +1378,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"_id\": \"658188a7aadfcc026a0e0131\",\n \"name\": \"Hans Hubert #3\",\n \"email\": \"hans.hubert3@example.com\",\n \"password\": \"Pa$$w0rd\",\n \"labels\": [\n \"expires=29991231\"\n ]\n}", + "raw": "{\n \"_id\": \"658188a7aadfcc026a0e0131\",\n \"name\": \"Hans Hubert\",\n \"email\": \"hans.hubert@example.com\",\n \"password\": \"Pa$$w0rd\",\n \"enabled\": true,\n \"labels\": [\n \"expires=29991231\"\n ]\n}", "options": { "raw": { "language": "json" @@ -1499,7 +1535,7 @@ "response": [] }, { - "name": "Delete exisiting room", + "name": "Delete exisiting user", "event": [ { "listen": "prerequest", @@ -1695,11 +1731,11 @@ "body": { "mode": "file", "file": { - "src": "/home/marc/projects/OpenHaus/plugins/plugin-boilerplate/dist/oh-plg-plugin-boilerplate.tgz" + "src": "/home/marc/Downloads/oh-plg-dummy-v1.0.0.tgz" } }, "url": { - "raw": "http://{{HOST}}:{{PORT}}/api/plugins/658188e93cde9987c3228806/files?install=true", + "raw": "http://{{HOST}}:{{PORT}}/api/plugins/658188e93cde9987c3228806/files", "protocol": "http", "host": [ "{{HOST}}" @@ -1715,7 +1751,8 @@ { "key": "install", "value": "true", - "description": "Install npm dependenys" + "description": "Install npm dependenys", + "disabled": true } ] } @@ -1744,6 +1781,28 @@ }, "response": [] }, + { + "name": "Stop plugin", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "http://{{HOST}}:{{PORT}}/api/plugins/658188e93cde9987c3228806/stop", + "protocol": "http", + "host": [ + "{{HOST}}" + ], + "port": "{{PORT}}", + "path": [ + "api", + "plugins", + "658188e93cde9987c3228806", + "stop" + ] + } + }, + "response": [] + }, { "name": "Delete plugin *.tgz content", "request": { @@ -2369,7 +2428,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } }, { @@ -2378,7 +2438,8 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {} } } ], @@ -2387,7 +2448,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\n \"_id\": \"65818986ca5133d8de2bb4a1\",\n \"name\": \"Store name\",\n \"config\": [{\n \"_id\": \"6581a14f1c6d01f32129dabc\",\n \"name\": \"Device Pairing\",\n \"key\": \"pairing\",\n \"type\": \"boolean\",\n \"value\": false,\n \"description\": \"Is the Gateway ready for pairing?\"\n }, {\n \"_id\": \"6581a1520bcb15659d48b207\",\n \"name\": \"Polling interval\",\n \"key\": \"interval\",\n \"type\": \"number\",\n \"value\": 3000,\n \"description\": \"Sync intervall for Endpoints\"\n }]\n}", + "raw": "{\n \"_id\": \"65818986ca5133d8de2bb4a1\",\n \"name\": \"Store name\",\n \"config\": [{\n \"_id\": \"6581a14f1c6d01f32129dabc\",\n \"name\": \"Device Pairing\",\n \"key\": \"pairing\",\n \"type\": \"boolean\",\n \"value\": false,\n \"description\": \"Is the Gateway ready for pairing?\"\n }, {\n \"_id\": \"6581a1520bcb15659d48b207\",\n \"name\": \"Polling interval\",\n \"key\": \"interval\",\n \"type\": \"number\",\n \"value\": 3000,\n \"description\": \"Sync intervall for Endpoints\"\n }, {\n \"_id\": \"67717f67c3afe115ea2ee30f\",\n \"name\": \"json example\",\n \"key\": \"string\",\n \"type\": \"string\",\n \"value\": \"{\\\"key\\\": \\\"value\\\"}\",\n \"description\": \"JSON string example\"\n }]\n}", "options": { "raw": { "language": "json" @@ -2769,7 +2830,7 @@ "response": [] }, { - "name": "Update existing webhook", + "name": "Trigger webhook", "event": [ { "listen": "prerequest", @@ -2812,7 +2873,7 @@ "response": [] }, { - "name": "Delete exisiting room", + "name": "Delete exisiting webhook", "event": [ { "listen": "prerequest", @@ -2908,13 +2969,7 @@ "name": "Login", "request": { "method": "POST", - "header": [ - { - "key": "x-auth-token", - "value": "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImhhbnMuaHViZXJ0QGV4YW1wbGUuY29tIiwidXVpZCI6ImM3N2E3NjJkLWM4ODYtNGQ2My1iNGM1LWU0MDJhZGNmYTdiZSIsImlhdCI6MTY1MzUyMDM1Mn0.10H4v6IhiI2mlaiSAcbTp2m4QUSueA1l4c2CPGV8L7WltZfXia8pLCnbYC243LPz", - "type": "text" - } - ], + "header": [], "body": { "mode": "raw", "raw": "{\n \"email\": \"hans.hubert@example.com\",\n \"password\": \"Pa$$w0rd\"\n}", @@ -2980,14 +3035,15 @@ "method": "GET", "header": [], "url": { - "raw": "http://{{HOST}}:{{PORT}}/auth", + "raw": "http://{{HOST}}:{{PORT}}/auth/check", "protocol": "http", "host": [ "{{HOST}}" ], "port": "{{PORT}}", "path": [ - "auth" + "auth", + "check" ] } }, @@ -3218,7 +3274,7 @@ } }, "url": { - "raw": "http://{{HOST}}:{{PORT}}/api/system/logs?delete=false", + "raw": "http://{{HOST}}:{{PORT}}/api/system/logs", "protocol": "http", "host": [ "{{HOST}}" @@ -3233,7 +3289,8 @@ { "key": "delete", "value": "false", - "description": "Delete files or just truncate them?" + "description": "Delete files or just truncate them?", + "disabled": true } ] } @@ -3310,6 +3367,28 @@ } }, "response": [] + }, + { + "name": "Environment variables", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://{{HOST}}:{{PORT}}/api/system/info/environment", + "protocol": "http", + "host": [ + "{{HOST}}" + ], + "port": "{{PORT}}", + "path": [ + "api", + "system", + "info", + "environment" + ] + } + }, + "response": [] } ] }, @@ -3377,21 +3456,23 @@ "header": [ { "key": "X-ENCRYPTION-KEY", - "value": "1e3665f8a687da2d0869ff524c10e64ee1cb600df8228c6dfcc37fbec3359846", + "value": "", "description": "Header value from export (If backup is encrpyted)", - "type": "text" + "type": "text", + "disabled": true }, { "key": "X-ENCRYPTION-IV", - "value": "186cfe92205c578a7f7199d3c973b8bd", + "value": "", "description": "Header value from export (If backup is encrpyted)", - "type": "text" + "type": "text", + "disabled": true } ], "body": { "mode": "file", "file": { - "src": "/home/marc/projects/OpenHaus/tmp/backup-staging.tgz" + "src": "" } }, "url": { @@ -3469,12 +3550,7 @@ "script": { "type": "text/javascript", "exec": [ - "console.log(\"Check if /system route\", pm.request.url.toString().includes(\"/system\"), pm.request.url.toString().includes(\"/auth\"))", - "", - "if(pm.request.url.toString().includes(\"/system\") || pm.request.url.toString().includes(\"/auth\")){", - " postman.setNextRequest(null);", - " return;", - "}" + "" ] } }, @@ -3483,46 +3559,31 @@ "script": { "type": "text/javascript", "exec": [ - "let IGNORE = {", - " \"PUT\": [", - " \"/api/plugins/658188e93cde9987c3228806/files\"", - " ],", - " \"POST\": [", - " \"/api/plugins/658188e93cde9987c3228806/start\",", - " \"/api/endpoints/658189336fa19198939caa21/commands/6581fc8ac20cb522e02868ff\"", - " ],", - " \"GET\": [", - " \"/auth\"", - " ]", - "};", - "", - "let URLS = [", - " \"auth\",", - " \"system\"", - "]", - "", - "console.log(\"Check ignore object\", pm.request.method, pm.request.url.toString());", + "// skip test for specified urls", + "// the request is performed, but no test executed", + "// otherwise the test run fails", + "// ", + "// due to limitations of postman collections", + "// no binary/plugin/*.tgz can be used", + "// thats the reaseon why why skip all test with such attachments", "", + "let url = pm.request.url.toString();", "", - "if(Object.prototype.hasOwnProperty.call(IGNORE, pm.request.method)){", + "let ignore = [", + " \"/auth\",", + " \"/system\",", + " \"/api/plugins/658188e93cde9987c3228806/files\",", + " \"/api/plugins/658188e93cde9987c3228806/start\",", + " \"/api/endpoints/658189336fa19198939caa21/commands/6581fc8ac20cb522e02868ff\", ", + "].some(path => url.includes(path));", "", - " let skip1 = IGNORE[pm.request.method].some((url) => {", - " return pm.request.url.toString().includes(url);", - " });", - "", - " let skip2 = URLS.some((url) => {", - " return pm.request.url.toString().includes(url);", - " });", - "", - "", - " console.log(\"Ignore\", pm.request.url.toString(), skip1 || skip2);", - "", - " if(skip1 || skip2){", - " return;", - " }", + "console.log(\"URL ignore\", ignore, url);", "", + "if(ignore){", + " return;", "}", "", + "console.log(`${pm.request.method} - ${pm.info.requestName}`);", "", "pm.test(\"Status code 200 || 202\", () => {", " pm.expect(pm.response.code).to.be.oneOf([", From df5e5fc7d05e1881219615bbcfda292bd4f9f73a Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:02:01 +0200 Subject: [PATCH 104/112] timeout increase & error handling improved --- tests/http-api/index.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index 78e44aa..b25b1cc 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -10,7 +10,7 @@ const collection = require("../../postman.json"); describe("HTTP API", function () { - this.timeout(30000); + this.timeout(60000); //let HTTP_PORT = crypto.randomInt(2048, 1024); let child = null; @@ -27,6 +27,11 @@ describe("HTTP API", function () { }) }); + child.on("exit", (code) => { + console.error(`child exited, code=${code}`); + child = null; + }); + child.on("spawn", () => { setTimeout(done, 1500); }); @@ -51,8 +56,14 @@ describe("HTTP API", function () { }); emitter.on("beforeItem", (err, { item }) => { + + if (!child) { + emitter.abort(); + } + let { request } = item; console.log(`\t[${request.method}] ${item.name} (${request.url})`); + }); emitter.once("exception", (err, { error }) => { From 76c0db7b485e5076d9661c51901160a4fbbd641c Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:05:17 +0200 Subject: [PATCH 105/112] timeout increased --- tests/http-api/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index b25b1cc..893fa40 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -10,7 +10,7 @@ const collection = require("../../postman.json"); describe("HTTP API", function () { - this.timeout(60000); + this.timeout(100000); //let HTTP_PORT = crypto.randomInt(2048, 1024); let child = null; From e42007904aabb7bd71c4e789b8e60bd537dbd085 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:09:15 +0200 Subject: [PATCH 106/112] minor bug fix --- tests/http-api/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index 893fa40..d344a67 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -101,7 +101,7 @@ describe("HTTP API", function () { // ensure to kill the backend // so that github actions complete this.afterAll(() => { - child.kill(); + child?.kill(); }); }); \ No newline at end of file From c342f1caf7802146a977b156908c2fbcd82c01cd Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:12:33 +0200 Subject: [PATCH 107/112] test --- tests/http-api/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index d344a67..45b645e 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -58,7 +58,7 @@ describe("HTTP API", function () { emitter.on("beforeItem", (err, { item }) => { if (!child) { - emitter.abort(); + emitter?.abort(); } let { request } = item; From 305d36783c70b70b2edd442ea1ec8470a59ea2d0 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:15:59 +0200 Subject: [PATCH 108/112] `.abort()` removed --- tests/http-api/index.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index 45b645e..796e39b 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -57,10 +57,6 @@ describe("HTTP API", function () { emitter.on("beforeItem", (err, { item }) => { - if (!child) { - emitter?.abort(); - } - let { request } = item; console.log(`\t[${request.method}] ${item.name} (${request.url})`); From 1b4483ddf786d86705daf2a56f1203eea9a0e875 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:31:08 +0200 Subject: [PATCH 109/112] `silet=false` for debugging --- tests/http-api/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index 796e39b..b741777 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -18,7 +18,7 @@ describe("HTTP API", function () { it("- Should start OpenHaus", (done) => { child = fork(path.resolve(process.cwd(), "index.js"), { - silent: true, + silent: false, env: Object.assign({}, process.env, { UUID: crypto.randomUUID(), DATABASE_NAME: crypto.randomBytes(8).toString("hex"), From 23861c937d0ebf6bdb4e8515f9ce10c79354add7 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:33:33 +0200 Subject: [PATCH 110/112] http test removed --- tests/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/index.js b/tests/index.js index e7b68ba..d17fab2 100644 --- a/tests/index.js +++ b/tests/index.js @@ -71,7 +71,7 @@ describe("Database", () => { require("./helper/index.js"); require("./system/index.js"); require("./components/index.js"); - require("./http-api/index.js"); + //require("./http-api/index.js"); }).catch((err) => { From 10e6903dd116a6e467fd0d9f25670e3680c73b29 Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:53:31 +0200 Subject: [PATCH 111/112] fix #551 --- routes/router.system.backup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/router.system.backup.js b/routes/router.system.backup.js index 9970215..182d95a 100644 --- a/routes/router.system.backup.js +++ b/routes/router.system.backup.js @@ -76,7 +76,7 @@ module.exports = (router) => { } - if ((req.query?.includes?.includes("env") || (!req.query?.includes && true))) { + if ((req.query?.includes?.includes("env") || (!req.query?.includes && true)) && fs.existsSync(path.join(process.cwd(), ".env"))) { // encode .env value as base64, so the are not human readable let content = fs.readFileSync(path.join(process.cwd(), ".env"), "utf8").split(EOL).map((line) => { From e2ecaced14c59abe7295648c8fb6cd1df24a20cc Mon Sep 17 00:00:00 2001 From: Marc Stirner Date: Fri, 30 May 2025 10:53:48 +0200 Subject: [PATCH 112/112] http test enabled again --- tests/http-api/index.js | 2 +- tests/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/http-api/index.js b/tests/http-api/index.js index b741777..796e39b 100644 --- a/tests/http-api/index.js +++ b/tests/http-api/index.js @@ -18,7 +18,7 @@ describe("HTTP API", function () { it("- Should start OpenHaus", (done) => { child = fork(path.resolve(process.cwd(), "index.js"), { - silent: false, + silent: true, env: Object.assign({}, process.env, { UUID: crypto.randomUUID(), DATABASE_NAME: crypto.randomBytes(8).toString("hex"), diff --git a/tests/index.js b/tests/index.js index d17fab2..e7b68ba 100644 --- a/tests/index.js +++ b/tests/index.js @@ -71,7 +71,7 @@ describe("Database", () => { require("./helper/index.js"); require("./system/index.js"); require("./components/index.js"); - //require("./http-api/index.js"); + require("./http-api/index.js"); }).catch((err) => {