From c3570ac2fbe27db8e16b9690b0a4107159bdb20d Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 22 Jul 2023 20:22:34 +0600 Subject: [PATCH 001/149] feat(aepp): extract class to connect to wallet from AeSdkAepp --- examples/browser/aepp/src/Connect.vue | 37 ++++-- examples/browser/aepp/src/store.js | 14 +-- package-lock.json | 6 + package.json | 1 + src/AeSdkAepp.ts | 1 + .../WalletConnectorFrame.ts | 41 ++++++ .../WalletConnectorFrameBase.ts | 119 ++++++++++++++++++ .../WalletConnectorFrameWithNode.ts | 45 +++++++ src/index-browser.ts | 2 + 9 files changed, 245 insertions(+), 21 deletions(-) create mode 100644 src/aepp-wallet-communication/WalletConnectorFrame.ts create mode 100644 src/aepp-wallet-communication/WalletConnectorFrameBase.ts create mode 100644 src/aepp-wallet-communication/WalletConnectorFrameWithNode.ts diff --git a/examples/browser/aepp/src/Connect.vue b/examples/browser/aepp/src/Connect.vue index 3d335e6292..4ca9b09dfb 100644 --- a/examples/browser/aepp/src/Connect.vue +++ b/examples/browser/aepp/src/Connect.vue @@ -58,6 +58,7 @@ diff --git a/examples/browser/aepp/src/store.js b/examples/browser/aepp/src/store.js index 50da2587ae..5fb596d47b 100644 --- a/examples/browser/aepp/src/store.js +++ b/examples/browser/aepp/src/store.js @@ -12,7 +12,6 @@ const store = createStore({ nodes: [ { name: 'testnet', instance: new Node('https://testnet.aeternity.io') }, { name: 'mainnet', instance: new Node('https://mainnet.aeternity.io') }, - { name: 'next', instance: new Node('https://next.aeternity.io') }, ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), async onNetworkChange({ networkId }) { diff --git a/examples/browser/wallet-iframe/src/App.vue b/examples/browser/wallet-iframe/src/App.vue index 7cb0e23257..b27883d150 100644 --- a/examples/browser/wallet-iframe/src/App.vue +++ b/examples/browser/wallet-iframe/src/App.vue @@ -256,7 +256,6 @@ export default { nodes: [ { name: 'ae_uat', instance: new Node('https://testnet.aeternity.io') }, { name: 'ae_mainnet', instance: new Node('https://mainnet.aeternity.io') }, - { name: 'ae_next', instance: new Node('https://next.aeternity.io') }, ], accounts: [ new AccountMemoryProtected('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), diff --git a/test/environment/browser-aepp.html b/test/environment/browser-aepp.html index 75e8eb79ab..496aed1d83 100644 --- a/test/environment/browser-aepp.html +++ b/test/environment/browser-aepp.html @@ -21,7 +21,6 @@ nodes: [ { name: 'testnet', instance: new Node('https://testnet.aeternity.io') }, { name: 'mainnet', instance: new Node('https://mainnet.aeternity.io') }, - { name: 'next', instance: new Node('https://next.aeternity.io') }, ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), async onNetworkChange({ networkId }) { From c4d62b05825444f8cf90595010ca5d4c38c99777 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 20:15:15 +1000 Subject: [PATCH 034/149] refactor(wallet,aepp)!: remove `delegationToContract.sign` method BREAKING CHANGE: delegations used in Iris removed from aepp-wallet connection Use `signDelegation` api instead. --- src/AeSdkWallet.ts | 21 --------------- src/account/Rpc.ts | 30 ++++------------------ src/aepp-wallet-communication/rpc/types.ts | 12 --------- src/aepp-wallet-communication/schema.ts | 1 - 4 files changed, 5 insertions(+), 59 deletions(-) diff --git a/src/AeSdkWallet.ts b/src/AeSdkWallet.ts index b51c95e00d..a5ca5808fa 100644 --- a/src/AeSdkWallet.ts +++ b/src/AeSdkWallet.ts @@ -303,27 +303,6 @@ export default class AeSdkWallet extends AeSdk { signature: await this.signTypedData(data, aci, parameters), }; }, - [METHODS.signDelegationToContract]: async ({ - contractAddress, name, oracleQueryId, allNames, onAccount = this.address, isOracle, - }, origin) => { - if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError(); - if (!this.addresses().includes(onAccount)) { - throw new RpcPermissionDenyError(onAccount); - } - - isOracle ??= false; - const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id }; - const signature = await ( - (name == null ? null : this - .signNameDelegationToContract(contractAddress, name, parameters)) - ?? (oracleQueryId == null ? null : this - .signOracleQueryDelegationToContract(contractAddress, oracleQueryId, parameters)) - ?? (allNames !== true ? null : this - .signAllNamesDelegationToContract(contractAddress, parameters)) - ?? this.signDelegationToContract(contractAddress, { ...parameters, isOracle }) - ); - return { signature }; - }, [METHODS.unsafeSign]: async ({ data, onAccount = this.address }, origin) => { if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError(); if (!this.addresses().includes(onAccount)) throw new RpcPermissionDenyError(onAccount); diff --git a/src/account/Rpc.ts b/src/account/Rpc.ts index 117a7f3475..6cf362e6ca 100644 --- a/src/account/Rpc.ts +++ b/src/account/Rpc.ts @@ -1,6 +1,6 @@ import AccountBase from './Base'; import { METHODS } from '../aepp-wallet-communication/schema'; -import { ArgumentError, UnsupportedProtocolError } from '../utils/errors'; +import { ArgumentError, NotImplementedError, UnsupportedProtocolError } from '../utils/errors'; import { Encoded, Encoding, decode, encode, } from '../utils/encoder'; @@ -96,12 +96,7 @@ export default class AccountRpc extends AccountBase { }); return this.signDelegation(delegation); } - const { signature } = await this._rpcClient.request(METHODS.signDelegationToContract, { - onAccount: this.address, - contractAddress, - isOracle, - }); - return signature; + throw new NotImplementedError(''); } override async signNameDelegationToContract( @@ -115,12 +110,7 @@ export default class AccountRpc extends AccountBase { }); return this.signDelegation(delegation); } - const { signature } = await this._rpcClient.request(METHODS.signDelegationToContract, { - onAccount: this.address, - contractAddress, - name, - }); - return signature; + throw new NotImplementedError(''); } override async signAllNamesDelegationToContract( @@ -133,12 +123,7 @@ export default class AccountRpc extends AccountBase { }); return this.signDelegation(delegation); } - const { signature } = await this._rpcClient.request(METHODS.signDelegationToContract, { - onAccount: this.address, - contractAddress, - allNames: true, - }); - return signature; + throw new NotImplementedError(''); } override async signOracleQueryDelegationToContract( @@ -152,12 +137,7 @@ export default class AccountRpc extends AccountBase { }); return this.signDelegation(delegation); } - const { signature } = await this._rpcClient.request(METHODS.signDelegationToContract, { - onAccount: this.address, - contractAddress, - oracleQueryId, - }); - return signature; + throw new NotImplementedError(''); } override async signDelegation(delegation: Encoded.Bytearray): Promise { diff --git a/src/aepp-wallet-communication/rpc/types.ts b/src/aepp-wallet-communication/rpc/types.ts index 856c5345d4..3af439e377 100644 --- a/src/aepp-wallet-communication/rpc/types.ts +++ b/src/aepp-wallet-communication/rpc/types.ts @@ -3,7 +3,6 @@ import { Domain, AciValue } from '../../utils/typed-data'; import { METHODS, SUBSCRIPTION_TYPES, WALLET_TYPE } from '../schema'; import { TransformNodeType } from '../../Node'; import { SignedTx } from '../../apis/node'; -import { AensName } from '../../tx/builder/constants'; export interface WalletInfo { id: string; @@ -88,17 +87,6 @@ export interface WalletApi { }, ) => Promise<{ signature: Encoded.Signature }>; - [METHODS.signDelegationToContract]: ( - p: { - contractAddress: Encoded.ContractAddress; - name?: AensName; - oracleQueryId?: Encoded.OracleQueryId; - allNames?: boolean; - isOracle?: boolean; - onAccount: Encoded.AccountAddress; - }, - ) => Promise<{ signature: Encoded.Signature }>; - [METHODS.signDelegation]: ( p: { delegation: Encoded.Bytearray; diff --git a/src/aepp-wallet-communication/schema.ts b/src/aepp-wallet-communication/schema.ts index 7514c6cd95..c1c90d5eb8 100644 --- a/src/aepp-wallet-communication/schema.ts +++ b/src/aepp-wallet-communication/schema.ts @@ -38,7 +38,6 @@ export const enum METHODS { sign = 'transaction.sign', signMessage = 'message.sign', signTypedData = 'typedData.sign', - signDelegationToContract = 'delegationToContract.sign', signDelegation = 'delegation.sign', subscribeAddress = 'address.subscribe', updateNetwork = 'networkId.update', From f94849264541b4dde85011ff696e6e6dc5b6a9d4 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 20:30:26 +1000 Subject: [PATCH 035/149] refactor!: remove `signOracleQueryDelegationToContract` BREAKING CHANGE: `signOracleQueryDelegationToContract` removed Use `signDelegation` instead. --- examples/browser/wallet-iframe/src/App.vue | 12 ------- .../wallet-web-extension/src/background.js | 12 ------- src/AeSdkBase.ts | 20 ------------ src/account/Base.ts | 32 ------------------- src/account/Generalized.ts | 5 --- src/account/Ledger.ts | 5 --- src/account/Memory.ts | 30 ----------------- src/account/Rpc.ts | 14 -------- src/tx/builder/delegation/schema.ts | 21 +++++++++--- 9 files changed, 16 insertions(+), 135 deletions(-) diff --git a/examples/browser/wallet-iframe/src/App.vue b/examples/browser/wallet-iframe/src/App.vue index b27883d150..cad7970731 100644 --- a/examples/browser/wallet-iframe/src/App.vue +++ b/examples/browser/wallet-iframe/src/App.vue @@ -217,18 +217,6 @@ export default { return super.signAllNamesDelegationToContract(contractAddress, options); } - async signOracleQueryDelegationToContract( - contractAddress, - oracleQueryId, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress, oracleQueryId }; - genConfirmCallback('sign delegation of oracle query to contract')(id, opt, aeppOrigin); - } - return super.signOracleQueryDelegationToContract(contractAddress, oracleQueryId, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/examples/browser/wallet-web-extension/src/background.js b/examples/browser/wallet-web-extension/src/background.js index b9b407592b..5dad8d8477 100644 --- a/examples/browser/wallet-web-extension/src/background.js +++ b/examples/browser/wallet-web-extension/src/background.js @@ -112,18 +112,6 @@ class AccountMemoryProtected extends MemoryAccount { return super.signAllNamesDelegationToContract(contractAddress, options); } - async signOracleQueryDelegationToContract( - contractAddress, - oracleQueryId, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress, oracleQueryId }; - await genConfirmCallback('sign delegation of oracle query to contract')(id, opt, aeppOrigin); - } - return super.signOracleQueryDelegationToContract(contractAddress, oracleQueryId, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { await genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/src/AeSdkBase.ts b/src/AeSdkBase.ts index 17daa34a5d..ae9e88b56b 100644 --- a/src/AeSdkBase.ts +++ b/src/AeSdkBase.ts @@ -263,26 +263,6 @@ export default class AeSdkBase extends AeSdkMethods { .signAllNamesDelegationToContract(contractAddress, options); } - /** - * @deprecated use AeSdkBase:signDelegation in Ceres - * @param contractAddress - Contract address - * @param oracleQueryId - Oracle query id - * @param options - Options - */ - async signOracleQueryDelegationToContract( - contractAddress: Encoded.ContractAddress, - oracleQueryId: Encoded.OracleQueryId, - { onAccount, ...options }: { onAccount?: OnAccount } - & Parameters[2] = {}, - ): Promise { - options.networkId ??= this.selectedNodeName !== null - ? await this.api.getNetworkId() : undefined; - options.consensusProtocolVersion ??= this.selectedNodeName !== null - ? (await this.api.getNodeInfo()).consensusProtocolVersion : undefined; - return this._resolveAccount(onAccount) - .signOracleQueryDelegationToContract(contractAddress, oracleQueryId, options); - } - /** * Sign delegation, works only in Ceres * @param delegation - Delegation to sign diff --git a/src/account/Base.ts b/src/account/Base.ts index d3e02d4a93..29ff5180cf 100644 --- a/src/account/Base.ts +++ b/src/account/Base.ts @@ -150,38 +150,6 @@ export default abstract class AccountBase { throw new NotImplementedError('signAllNamesDelegationToContract method'); } - /** - * Sign delegation of oracle query to a contract - * - * Warning! Implementations needs to ensure that decoded oracle query id is not equal to decoded - * current account address unless https://github.com/aeternity/aesophia/issues/475 is fixed. - * - * Warning! Implementations needs to ensure that oracle query and contract exists unless - * https://github.com/aeternity/aesophia/issues/474 is fixed. - * - * @param contractAddress - Address of a contract to delegate permissions to - * @param oracleQueryId - Oracle query ID to reply by a contract - * @param options - Options - * @returns Signature - * @deprecated use AccountBase:signDelegation in Ceres - */ - // TODO: make abstract in the next major release - // eslint-disable-next-line class-methods-use-this - async signOracleQueryDelegationToContract( - /* eslint-disable @typescript-eslint/no-unused-vars */ - contractAddress: Encoded.ContractAddress, - oracleQueryId: Encoded.OracleQueryId, - options?: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - aeppOrigin?: string; - aeppRpcClientId?: string; - }, - /* eslint-enable @typescript-eslint/no-unused-vars */ - ): Promise { - throw new NotImplementedError('signOracleQueryDelegationToContract method'); - } - /** * Sign data blob * @param data - Data blob to sign diff --git a/src/account/Generalized.ts b/src/account/Generalized.ts index ff068d8cf1..26f490366c 100644 --- a/src/account/Generalized.ts +++ b/src/account/Generalized.ts @@ -58,11 +58,6 @@ export default class AccountGeneralized extends AccountBase { throw new NotImplementedError('signing delegation to contract using generalized account'); } - // eslint-disable-next-line class-methods-use-this - override async signOracleQueryDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using generalized account'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using generalized account'); diff --git a/src/account/Ledger.ts b/src/account/Ledger.ts index 4175b8dd9e..7e4be4775c 100644 --- a/src/account/Ledger.ts +++ b/src/account/Ledger.ts @@ -60,11 +60,6 @@ export default class AccountLedger extends AccountBase { throw new NotImplementedError('signing delegation to contract using Ledger HW'); } - // eslint-disable-next-line class-methods-use-this - override async signOracleQueryDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using Ledger HW'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using Ledger HW'); diff --git a/src/account/Memory.ts b/src/account/Memory.ts index 142dc82234..6ec1f910ac 100644 --- a/src/account/Memory.ts +++ b/src/account/Memory.ts @@ -174,36 +174,6 @@ export default class AccountMemory extends AccountBase { return encode(signature, Encoding.Signature); } - override async signOracleQueryDelegationToContract( - contractAddress: Encoded.ContractAddress, - oracleQueryId: Encoded.OracleQueryId, - { networkId, consensusProtocolVersion }: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - } = {}, - ): Promise { - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: DelegationTag.OracleResponse, queryId: oracleQueryId, contractAddress, - }); - return this.signDelegation(delegation, { networkId }); - } - const oracleQueryIdDecoded = decode(oracleQueryId); - const addressDecoded = decode(this.address); - // TODO: remove after fixing https://github.com/aeternity/aesophia/issues/475 - if (oracleQueryIdDecoded.compare(addressDecoded) === 0) { - throw new ArgumentError('oracleQueryId', 'not equal to account address', oracleQueryId); - } - if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId); - const payload = concatBuffers([ - Buffer.from(networkId), - oracleQueryIdDecoded, - decode(contractAddress), - ]); - const signature = await this.sign(payload); - return encode(signature, Encoding.Signature); - } - override async signDelegation( delegation: Encoded.Bytearray, { networkId }: { networkId?: string } = {}, diff --git a/src/account/Rpc.ts b/src/account/Rpc.ts index 6cf362e6ca..53712c90c1 100644 --- a/src/account/Rpc.ts +++ b/src/account/Rpc.ts @@ -126,20 +126,6 @@ export default class AccountRpc extends AccountBase { throw new NotImplementedError(''); } - override async signOracleQueryDelegationToContract( - contractAddress: Encoded.ContractAddress, - oracleQueryId: Encoded.OracleQueryId, - { consensusProtocolVersion }: { consensusProtocolVersion?: ConsensusProtocolVersion } = {}, - ): Promise { - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: DelegationTag.OracleResponse, queryId: oracleQueryId, contractAddress, - }); - return this.signDelegation(delegation); - } - throw new NotImplementedError(''); - } - override async signDelegation(delegation: Encoded.Bytearray): Promise { const { signature } = await this._rpcClient.request( METHODS.signDelegation, diff --git a/src/tx/builder/delegation/schema.ts b/src/tx/builder/delegation/schema.ts index 738cb1a76b..24d01f1352 100644 --- a/src/tx/builder/delegation/schema.ts +++ b/src/tx/builder/delegation/schema.ts @@ -14,10 +14,16 @@ export enum DelegationTag { AensName = 2, AensPreclaim = 3, Oracle = 4, + /** + * Delegation of oracle query to a contract + */ OracleResponse = 5, } const oracleAddressField = address(Encoding.OracleAddress); +/** + * Oracle query ID to reply by a contract + */ const queryIdField = { serialize(value: Encoded.OracleQueryId): Buffer { return oracleAddressField.serialize(encode(decode(value), Encoding.OracleAddress)); @@ -27,6 +33,11 @@ const queryIdField = { }, } as const; +/** + * Address of a contract to delegate permissions to + */ +const contractAddress = address(Encoding.ContractAddress); + /** * @see {@link https://github.com/aeternity/protocol/blob/8a9d1d1206174627f6aaef86159dc9c643080653/contracts/fate.md#from-ceres-serialized-signature-data} */ @@ -34,28 +45,28 @@ export const schemas = [{ tag: shortUIntConst(DelegationTag.AensWildcard), version: shortUIntConst(1, true), accountAddress: address(Encoding.AccountAddress), - contractAddress: address(Encoding.ContractAddress), + contractAddress, }, { tag: shortUIntConst(DelegationTag.AensName), version: shortUIntConst(1, true), accountAddress: address(Encoding.AccountAddress), nameId, - contractAddress: address(Encoding.ContractAddress), + contractAddress, }, { tag: shortUIntConst(DelegationTag.AensPreclaim), version: shortUIntConst(1, true), accountAddress: address(Encoding.AccountAddress), - contractAddress: address(Encoding.ContractAddress), + contractAddress, }, { tag: shortUIntConst(DelegationTag.Oracle), version: shortUIntConst(1, true), accountAddress: address(Encoding.AccountAddress), - contractAddress: address(Encoding.ContractAddress), + contractAddress, }, { tag: shortUIntConst(DelegationTag.OracleResponse), version: shortUIntConst(1, true), queryId: queryIdField, - contractAddress: address(Encoding.ContractAddress), + contractAddress, }] as const; type Schemas = SchemaTypes; From c09ac29c27f45b2194ca2341c84fedd3b282859f Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 20:39:53 +1000 Subject: [PATCH 036/149] docs(aens): use `signDelegation` instead deprecated methods --- docs/guides/aens.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/guides/aens.md b/docs/guides/aens.md index 86a0e665d2..5c5c5730f5 100644 --- a/docs/guides/aens.md +++ b/docs/guides/aens.md @@ -310,15 +310,22 @@ This functionality could for example be used to build an AENS marketplace. ```js const contractAddress = 'ct_asd2ks...' // AENS name -const name = 'example.chain' +const nameId = 'example.chain' +const commonParams = { + contractAddress, + accountAddress: aeSdk.address, +} +let delegation // this signature will allow the contract to perform a pre-claim on your behalf -const preClaimSig = await aeSdk.signDelegationToContract(contractAddress, { isOracle: false }) +delegation = packDelegation({ tag: DelegationTag.AensPreclaim, ...commonParams }) // this signature will allow the contract to perform // any name related transaction for a specific name that you own -const nameDelegationSig = await aeSdk.signNameDelegationToContract(contractAddress, name) +delegation = packDelegation({ tag: DelegationTag.AensName, nameId, ...commonParams }) // alternatively, you can generate a delegation signature suitable for every name you own -const allNamesDelegationSig = await aeSdk.signAllNamesDelegationToContract(contractAddress) +delegation = packDelegation({ tag: DelegationTag.AensWildcard, ...commonParams }) + +const delegationSignature = await aeSdk.signDelegation(delegation) ``` From 60a729d98be3262aed7dd4dcca457f85cd886f36 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 20:47:47 +1000 Subject: [PATCH 037/149] refactor!: remove `signAllNamesDelegationToContract` BREAKING CHANGE: `signAllNamesDelegationToContract` removed Use `signDelegation` instead. --- examples/browser/wallet-iframe/src/App.vue | 11 --------- .../wallet-web-extension/src/background.js | 11 --------- src/AeSdkBase.ts | 18 -------------- src/account/Base.ts | 23 ------------------ src/account/Generalized.ts | 5 ---- src/account/Ledger.ts | 5 ---- src/account/Memory.ts | 24 ------------------- src/account/Rpc.ts | 13 ---------- src/tx/builder/delegation/schema.ts | 3 +++ test/integration/delegation.ts | 6 ++++- 10 files changed, 8 insertions(+), 111 deletions(-) diff --git a/examples/browser/wallet-iframe/src/App.vue b/examples/browser/wallet-iframe/src/App.vue index cad7970731..55015d5928 100644 --- a/examples/browser/wallet-iframe/src/App.vue +++ b/examples/browser/wallet-iframe/src/App.vue @@ -206,17 +206,6 @@ export default { return super.signNameDelegationToContract(contractAddress, name, options); } - async signAllNamesDelegationToContract( - contractAddress, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress }; - genConfirmCallback('sign delegation of all names to contract')(id, opt, aeppOrigin); - } - return super.signAllNamesDelegationToContract(contractAddress, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/examples/browser/wallet-web-extension/src/background.js b/examples/browser/wallet-web-extension/src/background.js index 5dad8d8477..03c8511ee9 100644 --- a/examples/browser/wallet-web-extension/src/background.js +++ b/examples/browser/wallet-web-extension/src/background.js @@ -101,17 +101,6 @@ class AccountMemoryProtected extends MemoryAccount { return super.signNameDelegationToContract(contractAddress, name, options); } - async signAllNamesDelegationToContract( - contractAddress, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress }; - await genConfirmCallback('sign delegation of all names to contract')(id, opt, aeppOrigin); - } - return super.signAllNamesDelegationToContract(contractAddress, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { await genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/src/AeSdkBase.ts b/src/AeSdkBase.ts index ae9e88b56b..244e588ca8 100644 --- a/src/AeSdkBase.ts +++ b/src/AeSdkBase.ts @@ -245,24 +245,6 @@ export default class AeSdkBase extends AeSdkMethods { .signNameDelegationToContract(contractAddress, name, options); } - /** - * @deprecated use AeSdkBase:signDelegation in Ceres - * @param contractAddress - Contract address - * @param options - Options - */ - async signAllNamesDelegationToContract( - contractAddress: Encoded.ContractAddress, - { onAccount, ...options }: { onAccount?: OnAccount } - & Parameters[1] = {}, - ): Promise { - options.networkId ??= this.selectedNodeName !== null - ? await this.api.getNetworkId() : undefined; - options.consensusProtocolVersion ??= this.selectedNodeName !== null - ? (await this.api.getNodeInfo()).consensusProtocolVersion : undefined; - return this._resolveAccount(onAccount) - .signAllNamesDelegationToContract(contractAddress, options); - } - /** * Sign delegation, works only in Ceres * @param delegation - Delegation to sign diff --git a/src/account/Base.ts b/src/account/Base.ts index 29ff5180cf..4cc423222f 100644 --- a/src/account/Base.ts +++ b/src/account/Base.ts @@ -127,29 +127,6 @@ export default abstract class AccountBase { throw new NotImplementedError('signNameDelegationToContract method'); } - /** - * Sign delegation of all AENS names to a contract (not available in Iris) - * @param contractAddress - Address of a contract to delegate permissions to - * @param options - Options - * @returns Signature - * @deprecated use AccountBase:signDelegation in Ceres - */ - // TODO: make abstract in the next major release - // eslint-disable-next-line class-methods-use-this - async signAllNamesDelegationToContract( - /* eslint-disable @typescript-eslint/no-unused-vars */ - contractAddress: Encoded.ContractAddress, - options?: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - aeppOrigin?: string; - aeppRpcClientId?: string; - }, - /* eslint-enable @typescript-eslint/no-unused-vars */ - ): Promise { - throw new NotImplementedError('signAllNamesDelegationToContract method'); - } - /** * Sign data blob * @param data - Data blob to sign diff --git a/src/account/Generalized.ts b/src/account/Generalized.ts index 26f490366c..1a8f088fa9 100644 --- a/src/account/Generalized.ts +++ b/src/account/Generalized.ts @@ -53,11 +53,6 @@ export default class AccountGeneralized extends AccountBase { throw new NotImplementedError('signing delegation to contract using generalized account'); } - // eslint-disable-next-line class-methods-use-this - override async signAllNamesDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using generalized account'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using generalized account'); diff --git a/src/account/Ledger.ts b/src/account/Ledger.ts index 7e4be4775c..2a759e68b4 100644 --- a/src/account/Ledger.ts +++ b/src/account/Ledger.ts @@ -55,11 +55,6 @@ export default class AccountLedger extends AccountBase { throw new NotImplementedError('signing delegation to contract using Ledger HW'); } - // eslint-disable-next-line class-methods-use-this - override async signAllNamesDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using Ledger HW'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using Ledger HW'); diff --git a/src/account/Memory.ts b/src/account/Memory.ts index 6ec1f910ac..cddf69864e 100644 --- a/src/account/Memory.ts +++ b/src/account/Memory.ts @@ -150,30 +150,6 @@ export default class AccountMemory extends AccountBase { return encode(signature, Encoding.Signature); } - override async signAllNamesDelegationToContract( - contractAddress: Encoded.ContractAddress, - { networkId, consensusProtocolVersion }: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - } = {}, - ): Promise { - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: DelegationTag.AensWildcard, accountAddress: this.address, contractAddress, - }); - return this.signDelegation(delegation, { networkId }); - } - if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId); - const payload = concatBuffers([ - Buffer.from(networkId), - decode(this.address), - Buffer.from('AENS'), - decode(contractAddress), - ]); - const signature = await this.sign(payload); - return encode(signature, Encoding.Signature); - } - override async signDelegation( delegation: Encoded.Bytearray, { networkId }: { networkId?: string } = {}, diff --git a/src/account/Rpc.ts b/src/account/Rpc.ts index 53712c90c1..c17c7fa363 100644 --- a/src/account/Rpc.ts +++ b/src/account/Rpc.ts @@ -113,19 +113,6 @@ export default class AccountRpc extends AccountBase { throw new NotImplementedError(''); } - override async signAllNamesDelegationToContract( - contractAddress: Encoded.ContractAddress, - { consensusProtocolVersion }: { consensusProtocolVersion?: ConsensusProtocolVersion } = {}, - ): Promise { - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: DelegationTag.AensWildcard, accountAddress: this.address, contractAddress, - }); - return this.signDelegation(delegation); - } - throw new NotImplementedError(''); - } - override async signDelegation(delegation: Encoded.Bytearray): Promise { const { signature } = await this._rpcClient.request( METHODS.signDelegation, diff --git a/src/tx/builder/delegation/schema.ts b/src/tx/builder/delegation/schema.ts index 24d01f1352..b2bd1fe44a 100644 --- a/src/tx/builder/delegation/schema.ts +++ b/src/tx/builder/delegation/schema.ts @@ -10,6 +10,9 @@ import { * @category delegation signature */ export enum DelegationTag { + /** + * Delegation of all AENS names to a contract + */ AensWildcard = 1, AensName = 2, AensPreclaim = 3, diff --git a/test/integration/delegation.ts b/test/integration/delegation.ts index ad9e74bbfb..02654693b8 100644 --- a/test/integration/delegation.ts +++ b/test/integration/delegation.ts @@ -193,7 +193,11 @@ contract DelegateTest = it('works using wildcard delegation signature', async () => { if (isIris) return; - const allNamesDelSig = decode(await aeSdk.signAllNamesDelegationToContract(contractAddress)); + const allNamesDelSig = decode(await aeSdk.signDelegation( + packDelegation( + { tag: DelegationTag.AensWildcard, accountAddress: aeSdk.address, contractAddress }, + ), + )); const n = randomName(30); const commitmentId = decode(commitmentHash(n, salt)); From 9ab8f410226fca846dbfb5450a4da99940de7115 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 20:55:09 +1000 Subject: [PATCH 038/149] refactor!: remove `signNameDelegationToContract` BREAKING CHANGE: `signNameDelegationToContract` removed Use `signDelegation` instead. --- examples/browser/wallet-iframe/src/App.vue | 12 -------- .../wallet-web-extension/src/background.js | 12 -------- src/AeSdkBase.ts | 21 -------------- src/account/Base.ts | 27 +----------------- src/account/Generalized.ts | 5 ---- src/account/Ledger.ts | 5 ---- src/account/Memory.ts | 28 +------------------ src/account/Rpc.ts | 16 +---------- src/tx/builder/delegation/schema.ts | 6 ++++ 9 files changed, 9 insertions(+), 123 deletions(-) diff --git a/examples/browser/wallet-iframe/src/App.vue b/examples/browser/wallet-iframe/src/App.vue index 55015d5928..af26cccf03 100644 --- a/examples/browser/wallet-iframe/src/App.vue +++ b/examples/browser/wallet-iframe/src/App.vue @@ -194,18 +194,6 @@ export default { return super.signDelegationToContract(contractAddress, options); } - async signNameDelegationToContract( - contractAddress, - name, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress, name }; - genConfirmCallback('sign delegation of name to contract')(id, opt, aeppOrigin); - } - return super.signNameDelegationToContract(contractAddress, name, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/examples/browser/wallet-web-extension/src/background.js b/examples/browser/wallet-web-extension/src/background.js index 03c8511ee9..b4c36f587d 100644 --- a/examples/browser/wallet-web-extension/src/background.js +++ b/examples/browser/wallet-web-extension/src/background.js @@ -89,18 +89,6 @@ class AccountMemoryProtected extends MemoryAccount { return super.signDelegationToContract(contractAddress, options); } - async signNameDelegationToContract( - contractAddress, - name, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress, name }; - await genConfirmCallback('sign delegation of name to contract')(id, opt, aeppOrigin); - } - return super.signNameDelegationToContract(contractAddress, name, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { await genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/src/AeSdkBase.ts b/src/AeSdkBase.ts index 244e588ca8..b957768cba 100644 --- a/src/AeSdkBase.ts +++ b/src/AeSdkBase.ts @@ -7,7 +7,6 @@ import { Encoded } from './utils/encoder'; import { wrapWithProxy } from './utils/wrap-proxy'; import CompilerBase from './contract/compiler/Base'; import AeSdkMethods, { OnAccount, AeSdkMethodsOptions, WrappedOptions } from './AeSdkMethods'; -import { AensName } from './tx/builder/constants'; type NodeInfo = Awaited> & { name: string }; @@ -225,26 +224,6 @@ export default class AeSdkBase extends AeSdkMethods { .signDelegationToContract(contractAddress, options); } - /** - * @deprecated use AeSdkBase:signDelegation in Ceres - * @param contractAddress - Contract address - * @param name - AENS name - * @param options - Options - */ - async signNameDelegationToContract( - contractAddress: Encoded.ContractAddress, - name: AensName, - { onAccount, ...options }: { onAccount?: OnAccount } - & Parameters[2] = {}, - ): Promise { - options.networkId ??= this.selectedNodeName !== null - ? await this.api.getNetworkId() : undefined; - options.consensusProtocolVersion ??= this.selectedNodeName !== null - ? (await this.api.getNodeInfo()).consensusProtocolVersion : undefined; - return this._resolveAccount(onAccount) - .signNameDelegationToContract(contractAddress, name, options); - } - /** * Sign delegation, works only in Ceres * @param delegation - Delegation to sign diff --git a/src/account/Base.ts b/src/account/Base.ts index 4cc423222f..a6afd7ba75 100644 --- a/src/account/Base.ts +++ b/src/account/Base.ts @@ -1,7 +1,7 @@ import { Encoded } from '../utils/encoder'; import Node from '../Node'; import CompilerBase from '../contract/compiler/Base'; -import { AensName, ConsensusProtocolVersion, Int } from '../tx/builder/constants'; +import { ConsensusProtocolVersion, Int } from '../tx/builder/constants'; import { AciValue, Domain } from '../utils/typed-data'; import { NotImplementedError } from '../utils/errors'; @@ -102,31 +102,6 @@ export default abstract class AccountBase { throw new NotImplementedError('signDelegationToContract method'); } - /** - * Sign delegation of an AENS name to a contract - * @param contractAddress - Address of a contract to delegate permissions to - * @param name - AENS name to manage by a contract - * @param options - Options - * @returns Signature - * @deprecated use AccountBase:signDelegation in Ceres - */ - // TODO: make abstract in the next major release - // eslint-disable-next-line class-methods-use-this - async signNameDelegationToContract( - /* eslint-disable @typescript-eslint/no-unused-vars */ - contractAddress: Encoded.ContractAddress, - name: AensName, - options?: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - aeppOrigin?: string; - aeppRpcClientId?: string; - }, - /* eslint-enable @typescript-eslint/no-unused-vars */ - ): Promise { - throw new NotImplementedError('signNameDelegationToContract method'); - } - /** * Sign data blob * @param data - Data blob to sign diff --git a/src/account/Generalized.ts b/src/account/Generalized.ts index 1a8f088fa9..fa48d89fc9 100644 --- a/src/account/Generalized.ts +++ b/src/account/Generalized.ts @@ -48,11 +48,6 @@ export default class AccountGeneralized extends AccountBase { throw new NotImplementedError('signing delegation to contract using generalized account'); } - // eslint-disable-next-line class-methods-use-this - override async signNameDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using generalized account'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using generalized account'); diff --git a/src/account/Ledger.ts b/src/account/Ledger.ts index 2a759e68b4..65ceb0ea45 100644 --- a/src/account/Ledger.ts +++ b/src/account/Ledger.ts @@ -50,11 +50,6 @@ export default class AccountLedger extends AccountBase { throw new NotImplementedError('signing delegation to contract using Ledger HW'); } - // eslint-disable-next-line class-methods-use-this - override async signNameDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using Ledger HW'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using Ledger HW'); diff --git a/src/account/Memory.ts b/src/account/Memory.ts index cddf69864e..57861188e0 100644 --- a/src/account/Memory.ts +++ b/src/account/Memory.ts @@ -9,8 +9,7 @@ import { import { concatBuffers } from '../utils/other'; import { hashTypedData, AciValue } from '../utils/typed-data'; import { buildTx } from '../tx/builder'; -import { Tag, AensName, ConsensusProtocolVersion } from '../tx/builder/constants'; -import { produceNameId } from '../tx/builder/helpers'; +import { Tag, ConsensusProtocolVersion } from '../tx/builder/constants'; import { DelegationTag } from '../tx/builder/delegation/schema'; import { packDelegation } from '../tx/builder/delegation'; @@ -125,31 +124,6 @@ export default class AccountMemory extends AccountBase { return encode(signature, Encoding.Signature); } - override async signNameDelegationToContract( - contractAddress: Encoded.ContractAddress, - name: AensName, - { networkId, consensusProtocolVersion }: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - } = {}, - ): Promise { - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: DelegationTag.AensName, accountAddress: this.address, contractAddress, nameId: name, - }); - return this.signDelegation(delegation, { networkId }); - } - if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId); - const payload = concatBuffers([ - Buffer.from(networkId), - decode(this.address), - decode(produceNameId(name)), - decode(contractAddress), - ]); - const signature = await this.sign(payload); - return encode(signature, Encoding.Signature); - } - override async signDelegation( delegation: Encoded.Bytearray, { networkId }: { networkId?: string } = {}, diff --git a/src/account/Rpc.ts b/src/account/Rpc.ts index c17c7fa363..f02c858825 100644 --- a/src/account/Rpc.ts +++ b/src/account/Rpc.ts @@ -6,7 +6,7 @@ import { } from '../utils/encoder'; import RpcClient from '../aepp-wallet-communication/rpc/RpcClient'; import { AeppApi, WalletApi } from '../aepp-wallet-communication/rpc/types'; -import { AensName, ConsensusProtocolVersion } from '../tx/builder/constants'; +import { ConsensusProtocolVersion } from '../tx/builder/constants'; import { packDelegation } from '../tx/builder/delegation'; import { DelegationTag } from '../tx/builder/delegation/schema'; @@ -99,20 +99,6 @@ export default class AccountRpc extends AccountBase { throw new NotImplementedError(''); } - override async signNameDelegationToContract( - contractAddress: Encoded.ContractAddress, - name: AensName, - { consensusProtocolVersion }: { consensusProtocolVersion?: ConsensusProtocolVersion } = {}, - ): Promise { - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: DelegationTag.AensName, accountAddress: this.address, contractAddress, nameId: name, - }); - return this.signDelegation(delegation); - } - throw new NotImplementedError(''); - } - override async signDelegation(delegation: Encoded.Bytearray): Promise { const { signature } = await this._rpcClient.request( METHODS.signDelegation, diff --git a/src/tx/builder/delegation/schema.ts b/src/tx/builder/delegation/schema.ts index b2bd1fe44a..cf2036b847 100644 --- a/src/tx/builder/delegation/schema.ts +++ b/src/tx/builder/delegation/schema.ts @@ -14,6 +14,9 @@ export enum DelegationTag { * Delegation of all AENS names to a contract */ AensWildcard = 1, + /** + * Delegation of an AENS name to a contract + */ AensName = 2, AensPreclaim = 3, Oracle = 4, @@ -53,6 +56,9 @@ export const schemas = [{ tag: shortUIntConst(DelegationTag.AensName), version: shortUIntConst(1, true), accountAddress: address(Encoding.AccountAddress), + /** + * AENS name to manage by a contract + */ nameId, contractAddress, }, { From cd495a6409bfa3fa2012046da8e83dbf759f6fc0 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 21:03:49 +1000 Subject: [PATCH 039/149] refactor!: remove `signDelegationToContract` BREAKING CHANGE: `signDelegationToContract` removed Use `signDelegation` instead. --- examples/browser/wallet-iframe/src/App.vue | 11 ------ .../wallet-web-extension/src/background.js | 11 ------ src/AeSdkBase.ts | 18 ---------- src/account/Base.ts | 28 +-------------- src/account/Generalized.ts | 5 --- src/account/Ledger.ts | 5 --- src/account/Memory.ts | 34 +------------------ src/account/Rpc.ts | 27 +-------------- src/tx/builder/delegation/schema.ts | 6 ++++ test/integration/rpc.ts | 28 +++++++-------- 10 files changed, 23 insertions(+), 150 deletions(-) diff --git a/examples/browser/wallet-iframe/src/App.vue b/examples/browser/wallet-iframe/src/App.vue index af26cccf03..5f33c97cd3 100644 --- a/examples/browser/wallet-iframe/src/App.vue +++ b/examples/browser/wallet-iframe/src/App.vue @@ -183,17 +183,6 @@ export default { return super.signTypedData(data, aci, options); } - async signDelegationToContract( - contractAddress, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress }; - genConfirmCallback('sign delegation to contract')(id, opt, aeppOrigin); - } - return super.signDelegationToContract(contractAddress, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/examples/browser/wallet-web-extension/src/background.js b/examples/browser/wallet-web-extension/src/background.js index b4c36f587d..a7a07c9e4d 100644 --- a/examples/browser/wallet-web-extension/src/background.js +++ b/examples/browser/wallet-web-extension/src/background.js @@ -78,17 +78,6 @@ class AccountMemoryProtected extends MemoryAccount { return super.signTypedData(data, aci, options); } - async signDelegationToContract( - contractAddress, - { aeppRpcClientId: id, aeppOrigin, ...options }, - ) { - if (id != null) { - const opt = { ...options, contractAddress }; - await genConfirmCallback('sign delegation to contract')(id, opt, aeppOrigin); - } - return super.signDelegationToContract(contractAddress, options); - } - async sign(data, { aeppRpcClientId: id, aeppOrigin, ...options } = {}) { if (id != null) { await genConfirmCallback(`sign raw data ${data}`)(id, options, aeppOrigin); diff --git a/src/AeSdkBase.ts b/src/AeSdkBase.ts index b957768cba..e8d598e236 100644 --- a/src/AeSdkBase.ts +++ b/src/AeSdkBase.ts @@ -206,24 +206,6 @@ export default class AeSdkBase extends AeSdkMethods { return this._resolveAccount(onAccount).signTypedData(data, aci, options); } - /** - * @deprecated use AeSdkBase:signDelegation in Ceres - * @param contractAddress - Contract address - * @param options - Options - */ - async signDelegationToContract( - contractAddress: Encoded.ContractAddress, - { onAccount, ...options }: { onAccount?: OnAccount } - & Parameters[1] = {}, - ): Promise { - options.networkId ??= this.selectedNodeName !== null - ? await this.api.getNetworkId() : undefined; - options.consensusProtocolVersion ??= this.selectedNodeName !== null - ? (await this.api.getNodeInfo()).consensusProtocolVersion : undefined; - return this._resolveAccount(onAccount) - .signDelegationToContract(contractAddress, options); - } - /** * Sign delegation, works only in Ceres * @param delegation - Delegation to sign diff --git a/src/account/Base.ts b/src/account/Base.ts index a6afd7ba75..e4e18ac3fe 100644 --- a/src/account/Base.ts +++ b/src/account/Base.ts @@ -1,7 +1,7 @@ import { Encoded } from '../utils/encoder'; import Node from '../Node'; import CompilerBase from '../contract/compiler/Base'; -import { ConsensusProtocolVersion, Int } from '../tx/builder/constants'; +import { Int } from '../tx/builder/constants'; import { AciValue, Domain } from '../utils/typed-data'; import { NotImplementedError } from '../utils/errors'; @@ -76,32 +76,6 @@ export default abstract class AccountBase { throw new NotImplementedError('signTypedData method'); } - /** - * Sign delegation of AENS, oracle operations to a contract - * @param contractAddress - Address of a contract to delegate permissions to - * @param options - Options - * @param options.isOracle - Use to generate an oracle delegation signature in Ceres, otherwise an - * AENS preclaim delegation signature would be generated - * @returns Signature - * @deprecated use AccountBase:signDelegation in Ceres - */ - // TODO: make abstract in the next major release - // eslint-disable-next-line class-methods-use-this - async signDelegationToContract( - /* eslint-disable @typescript-eslint/no-unused-vars */ - contractAddress: Encoded.ContractAddress, - options?: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - isOracle?: boolean; - aeppOrigin?: string; - aeppRpcClientId?: string; - }, - /* eslint-enable @typescript-eslint/no-unused-vars */ - ): Promise { - throw new NotImplementedError('signDelegationToContract method'); - } - /** * Sign data blob * @param data - Data blob to sign diff --git a/src/account/Generalized.ts b/src/account/Generalized.ts index fa48d89fc9..ba8888fac3 100644 --- a/src/account/Generalized.ts +++ b/src/account/Generalized.ts @@ -43,11 +43,6 @@ export default class AccountGeneralized extends AccountBase { throw new NotImplementedError('Can\'t sign using generalized account'); } - // eslint-disable-next-line class-methods-use-this - override async signDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using generalized account'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using generalized account'); diff --git a/src/account/Ledger.ts b/src/account/Ledger.ts index 65ceb0ea45..fcf5d6dc00 100644 --- a/src/account/Ledger.ts +++ b/src/account/Ledger.ts @@ -45,11 +45,6 @@ export default class AccountLedger extends AccountBase { throw new NotImplementedError('Typed data signing using Ledger HW'); } - // eslint-disable-next-line class-methods-use-this - override async signDelegationToContract(): Promise { - throw new NotImplementedError('signing delegation to contract using Ledger HW'); - } - // eslint-disable-next-line class-methods-use-this override async signDelegation(): Promise { throw new NotImplementedError('signing delegation using Ledger HW'); diff --git a/src/account/Memory.ts b/src/account/Memory.ts index 57861188e0..bfa45b46dc 100644 --- a/src/account/Memory.ts +++ b/src/account/Memory.ts @@ -9,9 +9,7 @@ import { import { concatBuffers } from '../utils/other'; import { hashTypedData, AciValue } from '../utils/typed-data'; import { buildTx } from '../tx/builder'; -import { Tag, ConsensusProtocolVersion } from '../tx/builder/constants'; -import { DelegationTag } from '../tx/builder/delegation/schema'; -import { packDelegation } from '../tx/builder/delegation'; +import { Tag } from '../tx/builder/constants'; const secretKeys = new WeakMap(); @@ -94,36 +92,6 @@ export default class AccountMemory extends AccountBase { return encode(signature, Encoding.Signature); } - override async signDelegationToContract( - contractAddress: Encoded.ContractAddress, - { networkId, consensusProtocolVersion, isOracle }: { - networkId?: string; - consensusProtocolVersion?: ConsensusProtocolVersion; - isOracle?: boolean; - } = {}, - ): Promise { - if (isOracle == null) { - const protocol = (consensusProtocolVersion != null) ? ConsensusProtocolVersion[consensusProtocolVersion] : 'unknown'; - console.warn(`AccountMemory:signDelegationToContract: isOracle is not set. By default, sdk would generate an AENS preclaim delegation signature, but it won't be the same as the oracle delegation signature in Ceres (current protocol is ${protocol}).`); - } - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: isOracle === true ? DelegationTag.Oracle : DelegationTag.AensPreclaim, - accountAddress: this.address, - contractAddress, - }); - return this.signDelegation(delegation, { networkId }); - } - if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId); - const payload = concatBuffers([ - Buffer.from(networkId), - decode(this.address), - decode(contractAddress), - ]); - const signature = await this.sign(payload); - return encode(signature, Encoding.Signature); - } - override async signDelegation( delegation: Encoded.Bytearray, { networkId }: { networkId?: string } = {}, diff --git a/src/account/Rpc.ts b/src/account/Rpc.ts index f02c858825..508f3698c0 100644 --- a/src/account/Rpc.ts +++ b/src/account/Rpc.ts @@ -1,14 +1,11 @@ import AccountBase from './Base'; import { METHODS } from '../aepp-wallet-communication/schema'; -import { ArgumentError, NotImplementedError, UnsupportedProtocolError } from '../utils/errors'; +import { ArgumentError, UnsupportedProtocolError } from '../utils/errors'; import { Encoded, Encoding, decode, encode, } from '../utils/encoder'; import RpcClient from '../aepp-wallet-communication/rpc/RpcClient'; import { AeppApi, WalletApi } from '../aepp-wallet-communication/rpc/types'; -import { ConsensusProtocolVersion } from '../tx/builder/constants'; -import { packDelegation } from '../tx/builder/delegation'; -import { DelegationTag } from '../tx/builder/delegation/schema'; /** * Account provided by wallet @@ -77,28 +74,6 @@ export default class AccountRpc extends AccountBase { return signature; } - override async signDelegationToContract( - contractAddress: Encoded.ContractAddress, - { consensusProtocolVersion, isOracle }: { - consensusProtocolVersion?: ConsensusProtocolVersion; - isOracle?: boolean; - } = {}, - ): Promise { - if (isOracle == null) { - const protocol = (consensusProtocolVersion != null) ? ConsensusProtocolVersion[consensusProtocolVersion] : 'unknown'; - console.warn(`AccountRpc:signDelegationToContract: isOracle is not set. By default, sdk would generate an AENS preclaim delegation signature, but it won't be the same as the oracle delegation signature in Ceres (current protocol is ${protocol}).`); - } - if (consensusProtocolVersion === ConsensusProtocolVersion.Ceres) { - const delegation = packDelegation({ - tag: isOracle === true ? DelegationTag.Oracle : DelegationTag.AensPreclaim, - accountAddress: this.address, - contractAddress, - }); - return this.signDelegation(delegation); - } - throw new NotImplementedError(''); - } - override async signDelegation(delegation: Encoded.Bytearray): Promise { const { signature } = await this._rpcClient.request( METHODS.signDelegation, diff --git a/src/tx/builder/delegation/schema.ts b/src/tx/builder/delegation/schema.ts index cf2036b847..bb8862ba76 100644 --- a/src/tx/builder/delegation/schema.ts +++ b/src/tx/builder/delegation/schema.ts @@ -18,7 +18,13 @@ export enum DelegationTag { * Delegation of an AENS name to a contract */ AensName = 2, + /** + * Delegation of AENS preclaim to a contract + */ AensPreclaim = 3, + /** + * Delegation of oracle operations to a contract + */ Oracle = 4, /** * Delegation of oracle query to a contract diff --git a/test/integration/rpc.ts b/test/integration/rpc.ts index 81643c9afb..b4b6d505df 100644 --- a/test/integration/rpc.ts +++ b/test/integration/rpc.ts @@ -33,6 +33,8 @@ import { buildTx, hashTypedData, Contract, + packDelegation, + DelegationTag, } from '../../src'; import { getBufferToSign } from '../../src/account/Memory'; import { ImplPostMessage } from '../../src/aepp-wallet-communication/connection/BrowserWindowMessage'; @@ -479,8 +481,14 @@ describe('Aepp<->Wallet', () => { }); }); - describe('Sign delegation to contract', () => { - const contractAddress = 'ct_6y3N9KqQb74QsvR9NrESyhWeLNiA9aJgJ7ua8CvsTuGot6uzh'; + describe('Sign delegation', () => { + const getDelegation = (accountAddress?: Encoded.AccountAddress): Encoded.Bytearray => ( + packDelegation({ + tag: DelegationTag.AensPreclaim, + contractAddress: 'ct_6y3N9KqQb74QsvR9NrESyhWeLNiA9aJgJ7ua8CvsTuGot6uzh', + accountAddress: accountAddress ?? aeSdk.address, + }) + ); it('rejected by wallet', async () => { let origin; @@ -490,19 +498,14 @@ describe('Aepp<->Wallet', () => { origin = aeppOrigin; throw new RpcRejectedByUserError(); }); - sandbox.stub(wallet._resolveAccount(), 'signDelegationToContract') - .callsFake((delegation, { aeppOrigin } = {}) => { - origin = aeppOrigin; - throw new RpcRejectedByUserError(); - }); - await expect(aepp.signDelegationToContract(contractAddress, { isOracle: false })) + await expect(aepp.signDelegation(getDelegation())) .to.be.eventually.rejectedWith('Operation rejected by user').with.property('code', 4); expect(origin).to.be.equal('http://origin.test'); sandbox.restore(); }); it('works', async () => { - const signature = await aepp.signDelegationToContract(contractAddress, { isOracle: false }); + const signature = await aepp.signDelegation(getDelegation()); expect(signature).to.satisfy((s: string) => s.startsWith('sg_')); }); @@ -510,17 +513,14 @@ describe('Aepp<->Wallet', () => { const sandbox = createSandbox(); sandbox.stub(wallet._resolveAccount(), 'signDelegation') .callsFake(() => { throw new Error('test'); }); - sandbox.stub(wallet._resolveAccount(), 'signDelegationToContract') - .callsFake(() => { throw new Error('test'); }); - await expect(aepp.signDelegationToContract(contractAddress, { isOracle: false })) + await expect(aepp.signDelegation(getDelegation())) .to.be.rejectedWith('The peer failed to execute your request due to unknown error'); sandbox.restore(); }); it('signs using specific account', async () => { const onAccount = wallet.addresses()[1]; - const signature = await aepp - .signDelegationToContract(contractAddress, { onAccount, isOracle: false }); + const signature = await aepp.signDelegation(getDelegation(onAccount), { onAccount }); expect(signature).to.satisfy((s: string) => s.startsWith('sg_')); }); }); From f2c6d1d0894406234f728081d69a23620ea88e74 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 21:38:32 +1000 Subject: [PATCH 040/149] refactor(account)!: make `signTypedData`, `signDelegation` abstract BREAKING CHANGE: AccountBase inheritors required to implement `signTypedData`, `signDelegation` You can throw an exception if account operation is not doable. --- src/account/Base.ts | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/account/Base.ts b/src/account/Base.ts index e4e18ac3fe..838a81b7a3 100644 --- a/src/account/Base.ts +++ b/src/account/Base.ts @@ -3,7 +3,6 @@ import Node from '../Node'; import CompilerBase from '../contract/compiler/Base'; import { Int } from '../tx/builder/constants'; import { AciValue, Domain } from '../utils/typed-data'; -import { NotImplementedError } from '../utils/errors'; interface AuthData { fee?: Int; @@ -61,20 +60,14 @@ export default abstract class AccountBase { * @param options - Options * @returns Signature */ - // TODO: make abstract in the next major release - // eslint-disable-next-line class-methods-use-this - async signTypedData( - /* eslint-disable @typescript-eslint/no-unused-vars */ + abstract signTypedData( data: Encoded.ContractBytearray, aci: AciValue, options?: Domain & { aeppOrigin?: string; aeppRpcClientId?: string; }, - /* eslint-enable @typescript-eslint/no-unused-vars */ - ): Promise { - throw new NotImplementedError('signTypedData method'); - } + ): Promise; /** * Sign data blob @@ -101,18 +94,12 @@ export default abstract class AccountBase { * @param options - Options * @returns Signature */ - // TODO: make abstract in the next major release - // eslint-disable-next-line class-methods-use-this - async signDelegation( - /* eslint-disable @typescript-eslint/no-unused-vars */ + abstract signDelegation( delegation: Encoded.Bytearray, options?: { networkId?: string; aeppOrigin?: string; aeppRpcClientId?: string; }, - /* eslint-enable @typescript-eslint/no-unused-vars */ - ): Promise { - throw new NotImplementedError('signDelegation method'); - } + ): Promise; } From 0dd3b49ed0d603c3abab5d151b2a829beb69adad Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 23:10:03 +1000 Subject: [PATCH 041/149] chore(node)!: require 7.1.0 BREAKING CHANGE: sdk requires aeternity node 7.1.0 and above --- docker-compose.yml | 2 +- src/Node.ts | 2 +- src/tx/builder/field-types/gas-price.ts | 5 ----- test/integration/aens.ts | 9 +++++++-- test/integration/delegation.ts | 2 ++ tooling/autorest/node.yaml | 2 +- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 68cfd39c42..2d6d0e35d9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: node: # TODO: switch to master after merging https://github.com/aeternity/aeternity/pull/4303 - image: aeternity/aeternity:v7.0.0-rc1-bundle + image: aeternity/aeternity:v7.1.0-bundle # TODO: remove 3313 port after merging https://github.com/aeternity/aeternity/pull/4303 ports: [3013:3013, 3113:3113, 3014:3014, 3313:3313] # TODO: remove after releasing https://github.com/aeternity/aeternity/pull/4292 diff --git a/src/Node.ts b/src/Node.ts index a88de39ffb..50aa400c60 100644 --- a/src/Node.ts +++ b/src/Node.ts @@ -137,7 +137,7 @@ export default class Node extends (NodeTransformed as unknown as NodeTransformed super(url, { allowInsecureConnection: true, additionalPolicies: [ - ...ignoreVersion ? [] : [genVersionCheckPolicy('node', getVersion, '6.2.0', '8.0.0')], + ...ignoreVersion ? [] : [genVersionCheckPolicy('node', getVersion, '7.1.0', '8.0.0')], genRequestQueuesPolicy(), genCombineGetRequestsPolicy(), genRetryOnFailurePolicy(retryCount, retryOverallDelay), diff --git a/src/tx/builder/field-types/gas-price.ts b/src/tx/builder/field-types/gas-price.ts index 1623260d05..8e45f75577 100644 --- a/src/tx/builder/field-types/gas-price.ts +++ b/src/tx/builder/field-types/gas-price.ts @@ -4,7 +4,6 @@ import { ArgumentError, IllegalArgumentError } from '../../../utils/errors'; import { Int, MIN_GAS_PRICE } from '../constants'; import Node from '../../../Node'; import { AE_AMOUNT_FORMATS, formatAmount } from '../../../utils/amount-formatter'; -import semverSatisfies from '../../../utils/semver-satisfies'; const gasPriceCache: WeakMap = new WeakMap(); @@ -14,10 +13,6 @@ export async function getCachedIncreasedGasPrice(node: Node): Promise { return cache.gasPrice; } - // TODO: remove after requiring node@6.13.0 - const { nodeVersion } = await node._getCachedStatus(); - if (!semverSatisfies(nodeVersion, '6.13.0')) return 0n; - const { minGasPrice, utilization } = (await node.getRecentGasPrices())[0]; let gasPrice = utilization < 70 ? 0n : BigInt( new BigNumber(minGasPrice.toString()).times(1.01).integerValue().toFixed(), diff --git a/test/integration/aens.ts b/test/integration/aens.ts index e7db23ff05..52d5699ec7 100644 --- a/test/integration/aens.ts +++ b/test/integration/aens.ts @@ -238,7 +238,8 @@ describe('Aens', () => { channel: encode(decode(address), Encoding.Channel), contract_pubkey: buildContractId(address, 13), }; - pointersNode = Object.entries(pointers).map(([key, id]) => ({ key, id })); + pointersNode = Object.entries(pointers) + .map(([key, id]) => ({ key, id, encodedKey: encode(Buffer.from(key), Encoding.Bytearray) })); }); it('updates', async () => { @@ -294,7 +295,11 @@ describe('Aens', () => { assertNotNull(updateRes.tx); expect(updateRes.tx.pointers).to.be.eql([ ...pointersNode.filter((pointer) => pointer.key !== 'contract_pubkey'), - { key: 'contract_pubkey', id: anotherContract }, + { + key: 'contract_pubkey', + id: anotherContract, + encodedKey: 'ba_Y29udHJhY3RfcHVia2V5OCcARA==', + }, ]); }); diff --git a/test/integration/delegation.ts b/test/integration/delegation.ts index 02654693b8..4fa01e7a61 100644 --- a/test/integration/delegation.ts +++ b/test/integration/delegation.ts @@ -139,6 +139,7 @@ contract DelegateTest = expect((await aeSdk.api.getNameEntryByName(name)).pointers).to.be.eql([{ key: 'oracle', id: newOwner.replace('ak', 'ok'), + encodedKey: 'ba_b3JhY2xlzgFUsQ==', }]); }); @@ -151,6 +152,7 @@ contract DelegateTest = expect((await aeSdk.api.getNameEntryByName(name)).pointers[0]).to.be.eql({ key: 'test key', id: encode(dataPt, Encoding.Bytearray), + encodedKey: 'ba_dGVzdCBrZXk//Xo5', }); }); diff --git a/tooling/autorest/node.yaml b/tooling/autorest/node.yaml index 023b08dbb5..3130eba92d 100644 --- a/tooling/autorest/node.yaml +++ b/tooling/autorest/node.yaml @@ -159,7 +159,7 @@ version: ^3.7.1 use-extension: '@autorest/typescript': ^6.0.15 '@autorest/modelerfour': ^4.27.0 -input-file: https://raw.githubusercontent.com/aeternity/aeternity/v6.13.0/apps/aehttp/priv/oas3.yaml +input-file: https://raw.githubusercontent.com/aeternity/aeternity/v7.1.0/apps/aehttp/priv/oas3.yaml output-folder: ../../src/apis/node source-code-folder-path: . generator: typescript From 08783fd935cb204f807afef3e9fa3fbb1db77b9c Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Thu, 6 Jun 2024 23:11:15 +1000 Subject: [PATCH 042/149] chore(middleware)!: require 1.77.5 BREAKING CHANGE: sdk requires middleware@1.77.5 and above --- src/Middleware.ts | 2 +- tooling/autorest/middleware-prepare.mjs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Middleware.ts b/src/Middleware.ts index 4d94f2db6c..83dd6c208c 100644 --- a/src/Middleware.ts +++ b/src/Middleware.ts @@ -132,7 +132,7 @@ export default class Middleware allowInsecureConnection: true, additionalPolicies: [ ...ignoreVersion ? [] : [ - genVersionCheckPolicy('middleware', getVersion, '1.47.0', '2.0.0'), + genVersionCheckPolicy('middleware', getVersion, '1.77.5', '2.0.0'), ], genRequestQueuesPolicy(), genCombineGetRequestsPolicy(), diff --git a/tooling/autorest/middleware-prepare.mjs b/tooling/autorest/middleware-prepare.mjs index 88c79c5abc..afeaeab394 100755 --- a/tooling/autorest/middleware-prepare.mjs +++ b/tooling/autorest/middleware-prepare.mjs @@ -21,12 +21,12 @@ const run = (getOutput, command, ...args) => { }; const name = './tooling/autorest/middleware-openapi.yaml'; -const hash = 'HQS7QRRVCTUwwvxXH7ABLc1+td/pRqYsW5yAVwsp/Tp8Ruzan2dvkUeXrdquonixp+vjl6u4YiBLC11pm8XmmA=='; +const hash = 'kc8BgsSJdSmzj7y33IOBVT0wlcWy4gsG49fFMVUyZ08Alhee9LhCC98HaCYNIft95ZzFYVwNY+x++acnZMK0gw=='; await restoreFile(name, hash, () => { - const version = '1.68.1'; + const version = '1.77.5'; const id = run(true, 'docker', 'create', `aeternity/ae_mdw:${version}`); - const openapi = `/home/aeternity/node/lib/ae_mdw-${version}/priv/static/swagger/swagger_v2.yaml`; + const openapi = `/home/aeternity/node/lib/ae_mdw-${version}/priv/static/swagger/swagger_v2.json`; run(false, 'docker', 'cp', `${id}:${openapi}`, name); run(false, 'docker', 'rm', '-v', id); }); From ee2744d9ac9e676f0b4b42c8038b8911375ecb53 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Fri, 7 Jun 2024 23:28:12 +1000 Subject: [PATCH 043/149] chore(deps): update docs build deps --- docs/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index a224f69a17..b78f98ee5c 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ -mkdocs==1.5.3 +mkdocs==1.6.0 mkdocs-simple-hooks==0.1.5 -mkdocs-material==9.5.8 -mike==2.0.0 +mkdocs-material==9.5.26 +mike==2.1.1 From c66060b467038bfdb758eeb1f8e9d379d130500f Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 8 Jun 2024 12:55:41 +1000 Subject: [PATCH 044/149] chore(deps): update --- package-lock.json | 4073 +++++++++++++++--------------- package.json | 61 +- tooling/autorest/compiler.yaml | 2 +- tooling/autorest/middleware.yaml | 2 +- tooling/autorest/node.yaml | 2 +- 5 files changed, 2039 insertions(+), 2101 deletions(-) diff --git a/package-lock.json b/package-lock.json index efa58bdfca..fb99237377 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,13 +12,13 @@ "@aeternity/aepp-calldata": "^1.7.0", "@aeternity/argon2": "^0.0.1", "@aeternity/uuid": "^0.0.1", - "@azure/core-client": "^1.8.0", - "@azure/core-rest-pipeline": "^1.14.0", - "@babel/runtime-corejs3": "^7.24.0", - "@ledgerhq/hw-transport": "^6.30.4", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.16.0", + "@babel/runtime-corejs3": "^7.24.7", + "@ledgerhq/hw-transport": "^6.30.6", "@types/aes-js": "^3.1.4", "@types/json-bigint": "^1.0.4", - "@types/node": "~18.13", + "@types/node": "~18.15.3", "@types/sha.js": "^2.4.4", "@types/uuid": "^9.0.8", "@types/webextension-polyfill": "^0.10.7", @@ -40,29 +40,29 @@ "tweetnacl": "^1.0.3", "tweetnacl-auth": "^1.0.1", "varuint-bitcoin": "^1.1.2", - "websocket": "^1.0.34", - "ws": "^8.16.0" + "websocket": "^1.0.35", + "ws": "^8.17.0" }, "devDependencies": { - "@babel/cli": "^7.23.9", - "@babel/core": "^7.24.0", - "@babel/node": "^7.23.9", - "@babel/plugin-transform-runtime": "^7.24.0", - "@babel/preset-env": "^7.24.0", - "@babel/preset-typescript": "^7.23.3", - "@babel/register": "^7.23.7", - "@commitlint/cli": "^19.0.3", - "@commitlint/config-conventional": "^19.0.3", - "@ledgerhq/hw-transport-mocker": "^6.28.4", - "@ledgerhq/hw-transport-node-hid-singleton": "^6.30.4", - "@ledgerhq/hw-transport-webusb": "^6.28.4", - "@types/chai": "^4.3.12", + "@babel/cli": "^7.24.7", + "@babel/core": "^7.24.7", + "@babel/node": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-env": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@babel/register": "^7.24.6", + "@commitlint/cli": "^19.3.0", + "@commitlint/config-conventional": "^19.2.2", + "@ledgerhq/hw-transport-mocker": "^6.28.6", + "@ledgerhq/hw-transport-node-hid-singleton": "^6.30.6", + "@ledgerhq/hw-transport-webusb": "^6.28.6", + "@types/chai": "^4.3.16", "@types/chai-as-promised": "^7.1.8", "@types/mocha": "^10.0.6", "@types/node-hid": "^1.3.4", "@types/sinon": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", + "@typescript-eslint/eslint-plugin": "^7.12.0", + "@typescript-eslint/parser": "^7.12.0", "autorest": "^3.7.1", "babel-loader": "^9.1.3", "babel-plugin-add-import-extension": "^1.6.0", @@ -70,40 +70,32 @@ "babel-plugin-transform-default-named-imports": "^1.2.2", "babel-plugin-transform-import-meta": "^2.2.1", "chai": "^4.4.1", - "chai-as-promised": "^7.1.1", + "chai-as-promised": "^7.1.2", "downlevel-dts": "github:aeternity/downlevel-dts", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-typescript": "^18.0.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-rulesdir": "^0.2.2", - "eslint-plugin-tsdoc": "^0.2.17", + "eslint-plugin-tsdoc": "^0.3.0", "html-webpack-plugin": "^5.6.0", - "mocha": "^10.3.0", + "mocha": "^10.4.0", "nyc": "^15.1.0", - "sinon": "^17.0.1", + "sinon": "^18.0.0", "source-map": "^0.7.4", "standard-version": "^9.5.0", "ts-node": "^10.9.2", - "typedoc": "^0.25.11", + "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.2.0", - "typescript": "^5.3.3", - "webpack": "^5.90.3", - "webpack-bundle-analyzer": "^4.10.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4" }, "engines": { "node": ">=14.19.0" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@aeternity/aepp-calldata": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@aeternity/aepp-calldata/-/aepp-calldata-1.7.0.tgz", @@ -139,119 +131,119 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@azure/abort-controller": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.0.0.tgz", - "integrity": "sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-auth": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.6.0.tgz", - "integrity": "sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.1.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-client": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.8.0.tgz", - "integrity": "sha512-+gHS3gEzPlhyQBMoqVPOTeNH031R5DM/xpCvz72y38C09rg4Hui/1sJS/ujoisDZbbSHyuRLVWdFlwL0pIFwbg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-rest-pipeline": "^1.9.1", "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", + "@azure/core-util": "^1.6.1", "@azure/logger": "^1.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.14.0.tgz", - "integrity": "sha512-Tp4M6NsjCmn9L5p7HsW98eSOS7A0ibl3e5ntZglozT0XuD/0y6i36iW829ZbBq0qihlGgfaeFpkLjZ418KDm1Q==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz", + "integrity": "sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", "@azure/core-tracing": "^1.0.1", - "@azure/core-util": "^1.3.0", + "@azure/core-util": "^1.9.0", "@azure/logger": "^1.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "tslib": "^2.2.0" + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/core-tracing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", - "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/core-util": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.7.0.tgz", - "integrity": "sha512-Zq2i3QO6k9DA8vnm29mYM4G8IE9u1mhF1GUabVEqPNX8Lj833gdxQ2NAFxt2BZsfAL+e9cT8SyVN7dFVJ/Hf0g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dependencies": { "@azure/abort-controller": "^2.0.0", - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@azure/logger": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", - "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz", + "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==", "dependencies": { - "tslib": "^2.2.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "node_modules/@babel/cli": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.9.tgz", - "integrity": "sha512-vB1UXmGDNEhcf1jNAHKT9IlYk1R+hehVTLFlCLHBi8gfuHQGP6uRjgXVYU0EVlI/qwAWpstqkBdf2aez3/z/5Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.24.7.tgz", + "integrity": "sha512-8dfPprJgV4O14WTx+AQyEA+opgUKPrsIXX/MdL50J1n06EQJ6m1T+CdsJe0qEC0B/Xl85i+Un5KVAxd/PACX9A==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "commander": "^4.0.1", + "@jridgewell/trace-mapping": "^0.3.25", + "commander": "^6.2.0", "convert-source-map": "^2.0.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.2.0", @@ -274,43 +266,43 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -326,14 +318,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -341,37 +333,38 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -381,19 +374,19 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz", + "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "semver": "^6.3.1" }, "engines": { @@ -404,12 +397,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz", + "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -421,9 +414,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -437,74 +430,79 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz", + "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==", "dev": true, "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -514,35 +512,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz", + "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-wrap-function": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -552,14 +550,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", + "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.7", + "@babel/helper-optimise-call-expression": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -569,118 +567,121 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz", + "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/helper-function-name": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", "dev": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/node": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.23.9.tgz", - "integrity": "sha512-/d4ju/POwlGIJlZ+NqWH1qu61wt6ZlTZZZutrK2MOSdaH1JCh726nLw/GSvAjG+LTY6CO9SsB8uWcttnFKm6yg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.24.7.tgz", + "integrity": "sha512-BCYNLxUQjGTgy8bAq12jy+Lt8soGWa/5u3s7U3aTVXxviIp0YVS+/Wm0b4eaitLVvetYrEoAiRF0QOk4WKsHAQ==", "dev": true, "dependencies": { - "@babel/register": "^7.23.7", - "commander": "^4.0.1", + "@babel/register": "^7.24.6", + "commander": "^6.2.0", "core-js": "^3.30.2", "node-environment-flags": "^1.0.5", "regenerator-runtime": "^0.14.0", @@ -697,9 +698,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -708,13 +709,29 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz", + "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz", + "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -724,14 +741,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -741,13 +758,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz", + "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -832,12 +849,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -847,12 +864,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -886,12 +903,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1003,12 +1020,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1034,12 +1051,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1049,14 +1066,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz", + "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -1067,14 +1084,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1084,12 +1101,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1099,12 +1116,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz", + "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1114,13 +1131,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1130,13 +1147,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1147,18 +1164,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", + "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" }, "engines": { @@ -1169,13 +1186,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1185,12 +1202,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", + "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1200,13 +1217,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1216,12 +1233,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1231,12 +1248,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1247,13 +1264,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1263,12 +1280,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1279,13 +1296,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1295,14 +1312,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz", + "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1312,12 +1329,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1328,12 +1345,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz", + "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1343,12 +1360,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1359,12 +1376,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1374,13 +1391,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1390,14 +1407,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", + "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1407,15 +1424,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz", + "integrity": "sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1425,13 +1442,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1441,13 +1458,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1457,12 +1474,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1472,12 +1489,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1488,12 +1505,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1504,16 +1521,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", - "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1523,13 +1539,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1539,12 +1555,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1555,13 +1571,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", + "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1572,12 +1588,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1587,13 +1603,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1603,14 +1619,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1621,12 +1637,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1636,12 +1652,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1652,12 +1668,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1667,16 +1683,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -1687,12 +1703,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1702,13 +1718,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1718,12 +1734,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1733,12 +1749,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1748,12 +1764,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", + "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1763,15 +1779,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz", + "integrity": "sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1781,12 +1797,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1796,13 +1812,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1812,13 +1828,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1828,13 +1844,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1844,26 +1860,27 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", + "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1875,58 +1892,58 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.24.7", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.24.7", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.24.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-systemjs": "^7.24.7", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -1952,16 +1969,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1971,9 +1988,9 @@ } }, "node_modules/@babel/register": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", - "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", + "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -1996,9 +2013,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2008,9 +2025,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.0.tgz", - "integrity": "sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.7.tgz", + "integrity": "sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -2020,33 +2037,33 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2055,13 +2072,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2069,15 +2086,15 @@ } }, "node_modules/@commitlint/cli": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.0.3.tgz", - "integrity": "sha512-mGhh/aYPib4Vy4h+AGRloMY+CqkmtdeKPV9poMcZeImF5e3knQ5VYaSeAM0mEzps1dbKsHvABwaDpafLUuM96g==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.3.0.tgz", + "integrity": "sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==", "dev": true, "dependencies": { - "@commitlint/format": "^19.0.3", - "@commitlint/lint": "^19.0.3", - "@commitlint/load": "^19.0.3", - "@commitlint/read": "^19.0.3", + "@commitlint/format": "^19.3.0", + "@commitlint/lint": "^19.2.2", + "@commitlint/load": "^19.2.0", + "@commitlint/read": "^19.2.1", "@commitlint/types": "^19.0.3", "execa": "^8.0.1", "yargs": "^17.0.0" @@ -2090,9 +2107,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.0.3.tgz", - "integrity": "sha512-vh0L8XeLaEzTe8VCxSd0gAFvfTK0RFolrzw4o431bIuWJfi/yRCHJlsDwus7wW2eJaFFDR0VFXJyjGyDQhi4vA==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", + "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", "dev": true, "dependencies": { "@commitlint/types": "^19.0.3", @@ -2142,9 +2159,9 @@ } }, "node_modules/@commitlint/format": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.0.3.tgz", - "integrity": "sha512-QjjyGyoiVWzx1f5xOteKHNLFyhyweVifMgopozSgx1fGNrGV8+wp7k6n1t6StHdJ6maQJ+UUtO2TcEiBFRyR6Q==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.3.0.tgz", + "integrity": "sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==", "dev": true, "dependencies": { "@commitlint/types": "^19.0.3", @@ -2167,9 +2184,9 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.0.3.tgz", - "integrity": "sha512-MqDrxJaRSVSzCbPsV6iOKG/Lt52Y+PVwFVexqImmYYFhe51iVJjK2hRhOG2jUAGiUHk4jpdFr0cZPzcBkSzXDQ==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.2.2.tgz", + "integrity": "sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==", "dev": true, "dependencies": { "@commitlint/types": "^19.0.3", @@ -2179,26 +2196,11 @@ "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -2206,19 +2208,13 @@ "node": ">=10" } }, - "node_modules/@commitlint/is-ignored/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@commitlint/lint": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.0.3.tgz", - "integrity": "sha512-uHPyRqIn57iIplYa5xBr6oNu5aPXKGC4WLeuHfqQHclwIqbJ33g3yA5fIA+/NYnp5ZM2EFiujqHFaVUYj6HlKA==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", + "integrity": "sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^19.0.3", + "@commitlint/is-ignored": "^19.2.2", "@commitlint/parse": "^19.0.3", "@commitlint/rules": "^19.0.3", "@commitlint/types": "^19.0.3" @@ -2228,17 +2224,17 @@ } }, "node_modules/@commitlint/load": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.0.3.tgz", - "integrity": "sha512-18Tk/ZcDFRKIoKfEcl7kC+bYkEQ055iyKmGsYDoYWpKf6FUvBrP9bIWapuy/MB+kYiltmP9ITiUx6UXtqC9IRw==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.2.0.tgz", + "integrity": "sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==", "dev": true, "dependencies": { "@commitlint/config-validator": "^19.0.3", "@commitlint/execute-rule": "^19.0.0", - "@commitlint/resolve-extends": "^19.0.3", + "@commitlint/resolve-extends": "^19.1.0", "@commitlint/types": "^19.0.3", "chalk": "^5.3.0", - "cosmiconfig": "^8.3.6", + "cosmiconfig": "^9.0.0", "cosmiconfig-typescript-loader": "^5.0.0", "lodash.isplainobject": "^4.0.6", "lodash.merge": "^4.6.2", @@ -2284,13 +2280,14 @@ } }, "node_modules/@commitlint/read": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.0.3.tgz", - "integrity": "sha512-b5AflTyAXkUx5qKw4TkjjcOccXZHql3JqMi522knTQktq2AubKXFz60Sws+K4FsefwPws6fGz9mqiI/NvsvxFA==", + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.2.1.tgz", + "integrity": "sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==", "dev": true, "dependencies": { "@commitlint/top-level": "^19.0.0", "@commitlint/types": "^19.0.3", + "execa": "^8.0.1", "git-raw-commits": "^4.0.0", "minimist": "^1.2.8" }, @@ -2298,39 +2295,10 @@ "node": ">=v18" } }, - "node_modules/@commitlint/read/node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/read/node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dev": true, - "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@commitlint/resolve-extends": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.0.3.tgz", - "integrity": "sha512-18BKmta8OC8+Ub+Q3QGM9l27VjQaXobloVXOrMvu8CpEwJYv62vC/t7Ka5kJnsW0tU9q1eMqJFZ/nN9T/cOaIA==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.1.0.tgz", + "integrity": "sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==", "dev": true, "dependencies": { "@commitlint/config-validator": "^19.0.3", @@ -2381,89 +2349,6 @@ "node": ">=v18" } }, - "node_modules/@commitlint/top-level/node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dev": true, - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@commitlint/top-level/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@commitlint/top-level/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@commitlint/types": { "version": "19.0.3", "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.0.3.tgz", @@ -2536,9 +2421,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2697,9 +2582,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@hutson/parse-repository-url": { @@ -2801,6 +2686,15 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2811,45 +2705,45 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { @@ -2859,9 +2753,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2869,34 +2763,20 @@ } }, "node_modules/@ledgerhq/devices": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.2.1.tgz", - "integrity": "sha512-l/2I/Xzt7Z32OmGzoc/mUvaZivdn7Id/SO7hBTGpk7PtJTpBRxVAabP4GWEKCayGyOAcvTwoVxM0HMkNVfIzOQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.3.0.tgz", + "integrity": "sha512-h5Scr+yIae8yjPOViCHLdMjpqn4oC2Whrsq8LinRxe48LEGMdPqSV1yY7+3Ch827wtzNpMv+/ilKnd8rY+rTlg==", "dependencies": { - "@ledgerhq/errors": "^6.16.2", + "@ledgerhq/errors": "^6.16.4", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1", "semver": "^7.3.5" } }, - "node_modules/@ledgerhq/devices/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@ledgerhq/devices/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -2904,75 +2784,70 @@ "node": ">=10" } }, - "node_modules/@ledgerhq/devices/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@ledgerhq/errors": { - "version": "6.16.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.16.2.tgz", - "integrity": "sha512-jFpohaSW+p1Obp3NDT9QSByEtT3gtBZIjVNu8m25gnrH5zdtfPVlPwH6UiuS50s+2dHQyehV8hF+IfreKDWAZA==" + "version": "6.16.4", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.16.4.tgz", + "integrity": "sha512-M57yFaLYSN+fZCX0E0zUqOmrV6eipK+s5RhijHoUNlHUqrsvUz7iRQgpd5gRgHB5VkIjav7KdaZjKiWGcHovaQ==" }, "node_modules/@ledgerhq/hw-transport": { - "version": "6.30.4", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.30.4.tgz", - "integrity": "sha512-VBcVd7UG8HDrjWMoZI5rqBDz+PBxLHTIPZOGY/fdMoEUwaBbss0Z3MxuJanMyerlfaLqnBSVuL0blz7rOyagkw==", + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.30.6.tgz", + "integrity": "sha512-fT0Z4IywiuJuZrZE/+W0blkV5UCotDPFTYKLkKCLzYzuE6javva7D/ajRaIeR+hZ4kTmKF4EqnsmDCXwElez+w==", "dependencies": { - "@ledgerhq/devices": "^8.2.1", - "@ledgerhq/errors": "^6.16.2", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", "@ledgerhq/logs": "^6.12.0", "events": "^3.3.0" } }, "node_modules/@ledgerhq/hw-transport-mocker": { - "version": "6.28.4", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.28.4.tgz", - "integrity": "sha512-s4GyN8AdjenO+Y6XsxQyW1bQlbsBwNZJyax4Jz2tf+AbiDC3geblaK3wAg6FTUX0tz5K0mAarEVvM03Qxdxblw==", + "version": "6.28.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-mocker/-/hw-transport-mocker-6.28.6.tgz", + "integrity": "sha512-JDO2kqMOTRCQWNZr1KVlyX1AqE6WBzHjJDS3FnSI8Z/Bj2KSc2/1H/4lW6+Ap64yLtlmOW3GchdafFmLgYAgqw==", "dev": true, "dependencies": { - "@ledgerhq/hw-transport": "^6.30.4", + "@ledgerhq/hw-transport": "^6.30.6", "@ledgerhq/logs": "^6.12.0", "rxjs": "^7.8.1" } }, "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.29.4", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.4.tgz", - "integrity": "sha512-g19nEwES/SIG9z0Zah6Y2zf883JCT57HSlHgR5DRHPrNXIJbJRZV/UbHQo3az/wZ642WmzGqkPUdmYGDjQu4rg==", + "version": "6.29.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.6.tgz", + "integrity": "sha512-H1cGC4TLwSCxve3rbV7qfPJBZfy7VD7k9Czc9HOMDwQ9zHFtaoeiIotIMGjzHjfPtAGauMpAYvrpmEdBBX5sHg==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.2.1", - "@ledgerhq/errors": "^6.16.2", - "@ledgerhq/hw-transport": "^6.30.4", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/hw-transport": "^6.30.6", "@ledgerhq/logs": "^6.12.0", "node-hid": "^2.1.2" } }, "node_modules/@ledgerhq/hw-transport-node-hid-singleton": { - "version": "6.30.4", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-singleton/-/hw-transport-node-hid-singleton-6.30.4.tgz", - "integrity": "sha512-YQH0tlk82GdmyHjIusRjJfRTGHnW2C23eik7Qk8w3ADLoR/Y9S2Q7uhS3t3494Raw2fbQ9ebd9c7S5mkAUt/8Q==", + "version": "6.30.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-singleton/-/hw-transport-node-hid-singleton-6.30.6.tgz", + "integrity": "sha512-1ptKA/rJ2dWXpY68xaRe/kyvb4J6gfgS+KUeG0lDvfVQfTk98O2CMCmwHp1uBX/ppt9Z47h/Bkd/j1/mMlolXg==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.2.1", - "@ledgerhq/errors": "^6.16.2", - "@ledgerhq/hw-transport": "^6.30.4", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.29.4", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/hw-transport": "^6.30.6", + "@ledgerhq/hw-transport-node-hid-noevents": "^6.29.6", "@ledgerhq/logs": "^6.12.0", "node-hid": "^2.1.2", "usb": "2.9.0" } }, "node_modules/@ledgerhq/hw-transport-webusb": { - "version": "6.28.4", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.28.4.tgz", - "integrity": "sha512-qJcQXEhVHecOwmFcgqBy/aK4twDTrk1WzjTBmHHHJG1cdcn7zB2d7RwL93cP8dZ+r1OXyLSZPThH7erac9hFQQ==", + "version": "6.28.6", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.28.6.tgz", + "integrity": "sha512-rzICsvhcFcL4wSAvRPe+b9EEWB8cxj6yWy3FZdfs7ufi/0muNpFXWckWv1TC34em55sGXu2cMcwMKXg/O/Lc0Q==", "dev": true, "dependencies": { - "@ledgerhq/devices": "^8.2.1", - "@ledgerhq/errors": "^6.16.2", - "@ledgerhq/hw-transport": "^6.30.4", + "@ledgerhq/devices": "^8.3.0", + "@ledgerhq/errors": "^6.16.4", + "@ledgerhq/hw-transport": "^6.30.6", "@ledgerhq/logs": "^6.12.0" } }, @@ -3000,15 +2875,27 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@mapbox/node-pre-gyp/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": { - "yallist": "^4.0.0" + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6.0.0" + } + }, + "node_modules/@mapbox/node-pre-gyp/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/@mapbox/node-pre-gyp/node_modules/make-dir": { @@ -3034,12 +2921,9 @@ } }, "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -3047,38 +2931,33 @@ "node": ">=10" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@microsoft/tsdoc": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", - "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", + "integrity": "sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==", "dev": true }, "node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", - "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.0.tgz", + "integrity": "sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==", "dev": true, "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", + "@microsoft/tsdoc": "0.15.0", + "ajv": "~8.12.0", "jju": "~1.4.0", - "resolve": "~1.19.0" + "resolve": "~1.22.2" } }, "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -3086,25 +2965,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -3156,9 +3016,9 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, "node_modules/@sinonjs/commons": { @@ -3205,18 +3065,10 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true }, "node_modules/@tsconfig/node12": { @@ -3243,9 +3095,9 @@ "integrity": "sha512-v3D66IptpUqh+pHKVNRxY8yvp2ESSZXe0rTzsGdzUhEwag7ljVfgCllkWv2YgiYXDhWFBrEywll4A5JToyTNFA==" }, "node_modules/@types/chai": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.12.tgz", - "integrity": "sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", "dev": true }, "node_modules/@types/chai-as-promised": { @@ -3267,9 +3119,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { "@types/estree": "*", @@ -3313,8 +3165,7 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.5", @@ -3329,9 +3180,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", - "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==" + "version": "18.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", + "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==" }, "node_modules/@types/node-hid": { "version": "1.3.4", @@ -3348,12 +3199,6 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, "node_modules/@types/sha.js": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/sha.js/-/sha.js-2.4.4.tgz", @@ -3410,25 +3255,23 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", - "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.12.0.tgz", + "integrity": "sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/type-utils": "7.1.1", - "@typescript-eslint/utils": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/type-utils": "7.12.0", + "@typescript-eslint/utils": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3444,53 +3287,20 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", - "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.12.0.tgz", + "integrity": "sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/typescript-estree": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3506,16 +3316,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.12.0.tgz", + "integrity": "sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3523,18 +3333,18 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", - "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.12.0.tgz", + "integrity": "sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/typescript-estree": "7.12.0", + "@typescript-eslint/utils": "7.12.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3550,12 +3360,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.12.0.tgz", + "integrity": "sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3563,22 +3373,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.12.0.tgz", + "integrity": "sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/visitor-keys": "7.12.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3590,26 +3400,11 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -3617,28 +3412,19 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.12.0.tgz", + "integrity": "sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "7.12.0", + "@typescript-eslint/types": "7.12.0", + "@typescript-eslint/typescript-estree": "7.12.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3648,50 +3434,17 @@ "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.12.0.tgz", + "integrity": "sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "7.12.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -3705,9 +3458,9 @@ "dev": true }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", @@ -3727,9 +3480,9 @@ "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { @@ -3750,15 +3503,15 @@ "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { @@ -3786,28 +3539,28 @@ "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", @@ -3815,24 +3568,24 @@ } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", @@ -3841,12 +3594,12 @@ } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -3962,14 +3715,14 @@ "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==" }, "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==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { @@ -3986,15 +3739,15 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", + "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "uri-js": "^4.4.1" }, "funding": { "type": "github", @@ -4105,6 +3858,7 @@ "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==", + "deprecated": "This package is no longer supported.", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4162,16 +3916,16 @@ "dev": true }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -4190,37 +3944,17 @@ "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -4235,7 +3969,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4254,7 +3987,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4269,15 +4001,17 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", - "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "is-string": "^1.0.7" }, "engines": { @@ -4341,10 +4075,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -4401,60 +4138,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-loader/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/babel-loader/node_modules/pkg-dir": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", @@ -4470,18 +4153,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-loader/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/babel-plugin-add-import-extension": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-add-import-extension/-/babel-plugin-add-import-extension-1.6.0.tgz", @@ -4504,13 +4175,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", + "@babel/helper-define-polyfill-provider": "^0.6.2", "semver": "^6.3.1" }, "peerDependencies": { @@ -4518,25 +4189,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4607,12 +4278,15 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bindings": { @@ -4685,12 +4359,12 @@ } }, "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, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4703,9 +4377,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -4722,8 +4396,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -4814,15 +4488,16 @@ } }, "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -4877,9 +4552,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001585", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001585.tgz", - "integrity": "sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==", + "version": "1.0.30001629", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001629.tgz", + "integrity": "sha512-c3dl911slnQhmxUIT4HhYzT7wnBK/XYpGnYLOj4nJBaRiw52Ibe7YxlDaAeRECvA786zCuExhxIUJ2K7nHMrBw==", "dev": true, "funding": [ { @@ -4920,15 +4595,15 @@ } }, "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", "dev": true, "dependencies": { "check-error": "^1.0.2" }, "peerDependencies": { - "chai": ">= 2.1.2 < 5" + "chai": ">= 2.1.2 < 6" } }, "node_modules/chalk": { @@ -4991,9 +4666,9 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "engines": { "node": ">=6.0" @@ -5087,9 +4762,9 @@ "dev": true }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true, "engines": { "node": ">= 6" @@ -5269,7 +4944,16 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-core/node_modules/find-up": { + "node_modules/conventional-changelog-core/node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/conventional-changelog-core/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", @@ -5282,6 +4966,25 @@ "node": ">=8" } }, + "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -5438,6 +5141,15 @@ "node": ">=8" } }, + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/conventional-changelog-core/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -5653,6 +5365,15 @@ "node": ">=8" } }, + "node_modules/conventional-changelog-writer/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/conventional-changelog-writer/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -5815,6 +5536,15 @@ "node": ">=10" } }, + "node_modules/conventional-recommended-bump/node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/conventional-recommended-bump/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5828,6 +5558,25 @@ "node": ">=8" } }, + "node_modules/conventional-recommended-bump/node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -5922,6 +5671,15 @@ "node": ">=8" } }, + "node_modules/conventional-recommended-bump/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/conventional-recommended-bump/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -6009,9 +5767,9 @@ "dev": true }, "node_modules/core-js": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", - "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", "dev": true, "hasInstallScript": true, "funding": { @@ -6020,12 +5778,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.23.0" }, "funding": { "type": "opencollective", @@ -6033,9 +5791,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz", - "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -6049,15 +5807,15 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -6140,21 +5898,78 @@ } }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/dateformat": { @@ -6173,9 +5988,9 @@ "dev": true }, "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.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -6238,9 +6053,9 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "dependencies": { "type-detect": "^4.0.0" @@ -6280,18 +6095,20 @@ } }, "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "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==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -6326,9 +6143,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } @@ -6561,7 +6378,6 @@ "version": "0.11.0", "resolved": "git+ssh://git@github.com/aeternity/downlevel-dts.git#e3548b74c4573e5edc18d53e111704eea32ddd19", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.3.2", "shelljs": "^0.8.3", @@ -6571,26 +6387,11 @@ "downlevel-dts": "index.js" } }, - "node_modules/downlevel-dts/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/downlevel-dts/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -6598,12 +6399,6 @@ "node": ">=10" } }, - "node_modules/downlevel-dts/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -6611,9 +6406,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.661", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.661.tgz", - "integrity": "sha512-AFg4wDHSOk5F+zA8aR+SVIOabu7m0e7BiJnigCvPXzIGy731XENw/lmNxTySpVFtkFEy+eyt4oHhh5FF3NjQNw==", + "version": "1.4.794", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.794.tgz", + "integrity": "sha512-6FApLtsYhDCY0Vglq3AptsdxQ+PJLc6AxlAM0HjEihUAiOPPbkASEsq9gtxUeZY9o0sJIEa3WnF0vVH4VT4iug==", "dev": true }, "node_modules/emoji-regex": { @@ -6631,9 +6426,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -6652,10 +6447,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz", - "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -6674,50 +6478,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -6732,6 +6543,18 @@ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", "dev": true }, + "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==", + "dev": true, + "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", @@ -6742,20 +6565,32 @@ } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -6766,7 +6601,6 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "peer": true, "dependencies": { "hasown": "^2.0.0" } @@ -6820,12 +6654,15 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/escalade": { @@ -6939,7 +6776,6 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "peer": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -6951,17 +6787,15 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, - "peer": true, "dependencies": { "debug": "^3.2.7" }, @@ -6979,7 +6813,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -6989,7 +6822,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, - "peer": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -7021,7 +6853,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7032,7 +6863,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -7042,7 +6872,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "peer": true, "dependencies": { "esutils": "^2.0.2" }, @@ -7055,7 +6884,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7073,13 +6901,13 @@ } }, "node_modules/eslint-plugin-tsdoc": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", - "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.3.0.tgz", + "integrity": "sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==", "dev": true, "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "0.16.2" + "@microsoft/tsdoc": "0.15.0", + "@microsoft/tsdoc-config": "0.17.0" } }, "node_modules/eslint-scope": { @@ -7197,6 +7025,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -7239,6 +7083,21 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7251,23 +7110,14 @@ "node": "*" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "yocto-queue": "^0.1.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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" }, @@ -7275,10 +7125,70 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -7289,11 +7199,6 @@ "node": ">=0.10" } }, - "node_modules/esniff/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -7406,30 +7311,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -7447,11 +7328,6 @@ "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -7538,9 +7414,9 @@ "dev": true }, "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, "dependencies": { "to-regex-range": "^5.0.1" @@ -7564,16 +7440,17 @@ } }, "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7603,9 +7480,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -7630,6 +7507,12 @@ "node": ">=8.0.0" } }, + "node_modules/foreground-child/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==", + "dev": true + }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -7748,6 +7631,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -7763,6 +7647,11 @@ "node": ">=10" } }, + "node_modules/gauge/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==" + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -7941,188 +7830,20 @@ } }, "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "dargs": "^8.0.0", + "meow": "^12.0.1", + "split2": "^4.0.0" }, "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/git-raw-commits/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "git-raw-commits": "cli.mjs" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-raw-commits/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" + "node": ">=16" } }, "node_modules/git-remote-origin-url": { @@ -8258,6 +7979,15 @@ "node": ">=8" } }, + "node_modules/git-semver-tags/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/git-semver-tags/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -8329,6 +8059,12 @@ "ini": "^1.3.2" } }, + "node_modules/gitconfiglocal/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -8339,6 +8075,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8407,15 +8144,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-directory/node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -8426,12 +8154,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -8566,21 +8295,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -8637,10 +8366,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -8788,28 +8529,27 @@ } }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "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==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -8945,6 +8685,15 @@ "node": ">=8" } }, + "node_modules/import-local/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/import-local/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8958,9 +8707,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", - "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, "funding": { "type": "github", @@ -8989,6 +8738,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -9000,10 +8750,13 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/internal-slot": { "version": "1.0.7", @@ -9114,6 +8867,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -9159,9 +8927,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -9250,24 +9018,27 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9473,18 +9244,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -9501,13 +9260,10 @@ } }, "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -9527,12 +9283,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -9557,9 +9307,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -9608,9 +9358,9 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.3.tgz", + "integrity": "sha512-uy2bNX5zQ+tESe+TiC7ilGRz8AtRGmnJH55NC5S0nSUjvvvM2hJHmefHErugGXN4pNv4Qx7vLsnNw9qJ9mtIsw==", "dev": true, "bin": { "jiti": "bin/jiti.js" @@ -9838,15 +9588,15 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10135,12 +9885,12 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -10202,9 +9952,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -10302,9 +10052,9 @@ "dev": true }, "node_modules/mocha": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", - "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -10374,6 +10124,29 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -10386,10 +10159,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -10414,6 +10204,21 @@ "node": ">=8" } }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -10432,6 +10237,45 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -10465,6 +10309,18 @@ "node": ">=10" } }, + "node_modules/mocha/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -10512,9 +10368,9 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "node_modules/nise": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", - "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.0.0.tgz", + "integrity": "sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", @@ -10535,9 +10391,9 @@ } }, "node_modules/node-abi": { - "version": "3.56.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", - "integrity": "sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==", + "version": "3.63.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.63.0.tgz", + "integrity": "sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -10546,26 +10402,11 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-abi/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10573,12 +10414,6 @@ "node": ">=10" } }, - "node_modules/node-abi/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/node-addon-api": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", @@ -10623,9 +10458,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -10703,26 +10538,11 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10730,12 +10550,6 @@ "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10776,6 +10590,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -10970,6 +10785,15 @@ "node": ">=8" } }, + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/nyc/node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -10982,6 +10806,12 @@ "node": ">=8" } }, + "node_modules/nyc/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==", + "dev": true + }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -11082,29 +10912,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11114,16 +10944,18 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", - "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", "dev": true, "dependencies": { "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "safe-array-concat": "^1.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" }, "engines": { "node": ">= 0.8" @@ -11133,29 +10965,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "peer": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11197,47 +11028,47 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11339,12 +11170,12 @@ } }, "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/path-is-absolute": { @@ -11371,9 +11202,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", + "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", "dev": true }, "node_modules/path-type": { @@ -11395,9 +11226,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -11503,6 +11334,15 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prebuild-install": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", @@ -11656,6 +11496,12 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -11890,14 +11736,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -12054,6 +11901,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -12104,13 +11952,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -12200,31 +12048,32 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "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==", "dev": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12305,12 +12154,12 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "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==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -12323,9 +12172,16 @@ } }, "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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-concat": { "version": "1.0.1", @@ -12373,17 +12229,17 @@ } }, "node_modules/sinon": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", - "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz", + "integrity": "sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.0", + "@sinonjs/commons": "^3.0.1", "@sinonjs/fake-timers": "^11.2.2", "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.5", - "supports-color": "^7.2.0" + "diff": "^5.2.0", + "nise": "^6.0.0", + "supports-color": "^7" }, "funding": { "type": "opencollective", @@ -12391,9 +12247,9 @@ } }, "node_modules/sinon/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "engines": { "node": ">=0.3.1" @@ -12503,6 +12359,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/spawn-wrap/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==", + "dev": true + }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -12514,9 +12376,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -12530,9 +12392,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/split": { @@ -12615,26 +12477,81 @@ "node": ">=10" } }, - "node_modules/standard-version/node_modules/lru-cache": { + "node_modules/standard-version/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/standard-version/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/standard-version/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/standard-version/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-version/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -12642,12 +12559,6 @@ "node": ">=10" } }, - "node_modules/standard-version/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/standard-version/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -12666,6 +12577,18 @@ "node": ">=10" } }, + "node_modules/standard-version/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -12688,14 +12611,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12705,28 +12629,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12884,9 +12811,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13113,9 +13040,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { "node": ">=16" @@ -13181,7 +13108,6 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "peer": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -13194,7 +13120,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "peer": true, "dependencies": { "minimist": "^1.2.0" }, @@ -13207,15 +13132,14 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "peer": true, "engines": { "node": ">=4" } }, "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.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -13243,9 +13167,9 @@ } }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" }, "node_modules/type-check": { "version": "0.4.0", @@ -13278,12 +13202,12 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", - "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" }, @@ -13292,15 +13216,16 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -13310,16 +13235,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -13329,14 +13255,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13357,9 +13289,9 @@ } }, "node_modules/typedoc": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.11.tgz", - "integrity": "sha512-5MbI1W/FOG6oXsd8bdssQidSTeKh8Kt3xA5uKVzI+K99uzP8EGN45uPnPvQesyaWdD+89s4wCQdtWEd8QUbiRg==", + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", "dev": true, "dependencies": { "lunr": "^2.3.9", @@ -13374,7 +13306,7 @@ "node": ">= 16" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" } }, "node_modules/typedoc-plugin-missing-exports": { @@ -13387,9 +13319,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -13480,9 +13412,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { @@ -13499,8 +13431,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -13620,9 +13552,9 @@ "dev": true }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -13638,26 +13570,26 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.16.0", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -13665,7 +13597,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -13685,9 +13617,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", @@ -13698,7 +13630,6 @@ "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", @@ -13732,15 +13663,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-bundle-analyzer/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -13941,13 +13863,13 @@ } }, "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", - "es5-ext": "^0.10.50", + "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" @@ -14016,16 +13938,16 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -14048,6 +13970,15 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -14127,10 +14058,16 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/write-file-atomic/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==", + "dev": true + }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", "engines": { "node": ">=10.0.0" }, @@ -14264,12 +14201,12 @@ } }, "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" diff --git a/package.json b/package.json index 0eaacce309..c4ed9e837e 100644 --- a/package.json +++ b/package.json @@ -78,13 +78,13 @@ "@aeternity/aepp-calldata": "^1.7.0", "@aeternity/argon2": "^0.0.1", "@aeternity/uuid": "^0.0.1", - "@azure/core-client": "^1.8.0", - "@azure/core-rest-pipeline": "^1.14.0", - "@babel/runtime-corejs3": "^7.24.0", - "@ledgerhq/hw-transport": "^6.30.4", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.16.0", + "@babel/runtime-corejs3": "^7.24.7", + "@ledgerhq/hw-transport": "^6.30.6", "@types/aes-js": "^3.1.4", "@types/json-bigint": "^1.0.4", - "@types/node": "~18.13", + "@types/node": "~18.15.3", "@types/sha.js": "^2.4.4", "@types/uuid": "^9.0.8", "@types/webextension-polyfill": "^0.10.7", @@ -106,33 +106,33 @@ "tweetnacl": "^1.0.3", "tweetnacl-auth": "^1.0.1", "varuint-bitcoin": "^1.1.2", - "websocket": "^1.0.34", - "ws": "^8.16.0" + "websocket": "^1.0.35", + "ws": "^8.17.0" }, "repository": { "type": "git", "url": "git+https://github.com/aeternity/aepp-sdk-js.git" }, "devDependencies": { - "@babel/cli": "^7.23.9", - "@babel/core": "^7.24.0", - "@babel/node": "^7.23.9", - "@babel/plugin-transform-runtime": "^7.24.0", - "@babel/preset-env": "^7.24.0", - "@babel/preset-typescript": "^7.23.3", - "@babel/register": "^7.23.7", - "@commitlint/cli": "^19.0.3", - "@commitlint/config-conventional": "^19.0.3", - "@ledgerhq/hw-transport-mocker": "^6.28.4", - "@ledgerhq/hw-transport-node-hid-singleton": "^6.30.4", - "@ledgerhq/hw-transport-webusb": "^6.28.4", - "@types/chai": "^4.3.12", + "@babel/cli": "^7.24.7", + "@babel/core": "^7.24.7", + "@babel/node": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/preset-env": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@babel/register": "^7.24.6", + "@commitlint/cli": "^19.3.0", + "@commitlint/config-conventional": "^19.2.2", + "@ledgerhq/hw-transport-mocker": "^6.28.6", + "@ledgerhq/hw-transport-node-hid-singleton": "^6.30.6", + "@ledgerhq/hw-transport-webusb": "^6.28.6", + "@types/chai": "^4.3.16", "@types/chai-as-promised": "^7.1.8", "@types/mocha": "^10.0.6", "@types/node-hid": "^1.3.4", "@types/sinon": "^17.0.3", - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", + "@typescript-eslint/eslint-plugin": "^7.12.0", + "@typescript-eslint/parser": "^7.12.0", "autorest": "^3.7.1", "babel-loader": "^9.1.3", "babel-plugin-add-import-extension": "^1.6.0", @@ -140,25 +140,26 @@ "babel-plugin-transform-default-named-imports": "^1.2.2", "babel-plugin-transform-import-meta": "^2.2.1", "chai": "^4.4.1", - "chai-as-promised": "^7.1.1", + "chai-as-promised": "^7.1.2", "downlevel-dts": "github:aeternity/downlevel-dts", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-typescript": "^18.0.0", + "eslint-plugin-import": "^2.29.1", "eslint-plugin-rulesdir": "^0.2.2", - "eslint-plugin-tsdoc": "^0.2.17", + "eslint-plugin-tsdoc": "^0.3.0", "html-webpack-plugin": "^5.6.0", - "mocha": "^10.3.0", + "mocha": "^10.4.0", "nyc": "^15.1.0", - "sinon": "^17.0.1", + "sinon": "^18.0.0", "source-map": "^0.7.4", "standard-version": "^9.5.0", "ts-node": "^10.9.2", - "typedoc": "^0.25.11", + "typedoc": "^0.25.13", "typedoc-plugin-missing-exports": "^2.2.0", - "typescript": "^5.3.3", - "webpack": "^5.90.3", - "webpack-bundle-analyzer": "^4.10.1", + "typescript": "^5.4.5", + "webpack": "^5.91.0", + "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^5.1.4" }, "files": [ diff --git a/tooling/autorest/compiler.yaml b/tooling/autorest/compiler.yaml index 285a607110..783c86e293 100644 --- a/tooling/autorest/compiler.yaml +++ b/tooling/autorest/compiler.yaml @@ -17,7 +17,7 @@ directive: version: ^3.7.1 use-extension: - '@autorest/typescript': ^6.0.15 + '@autorest/typescript': ^6.0.23 '@autorest/modelerfour': ^4.27.0 # replace with a link to https://github.com/aeternity/aesophia_http/blob/master/config/swagger.yaml # at specific version after fixing https://github.com/aeternity/aesophia_http/issues/87 diff --git a/tooling/autorest/middleware.yaml b/tooling/autorest/middleware.yaml index 339f2f5d42..9f5e53cc6f 100644 --- a/tooling/autorest/middleware.yaml +++ b/tooling/autorest/middleware.yaml @@ -81,7 +81,7 @@ directive: version: ^3.7.1 use-extension: - '@autorest/typescript': ^6.0.15 + '@autorest/typescript': ^6.0.23 '@autorest/modelerfour': ^4.27.0 input-file: middleware-openapi.yaml output-folder: ../../src/apis/middleware diff --git a/tooling/autorest/node.yaml b/tooling/autorest/node.yaml index 3130eba92d..1417c53a4c 100644 --- a/tooling/autorest/node.yaml +++ b/tooling/autorest/node.yaml @@ -157,7 +157,7 @@ directive: version: ^3.7.1 use-extension: - '@autorest/typescript': ^6.0.15 + '@autorest/typescript': ^6.0.23 '@autorest/modelerfour': ^4.27.0 input-file: https://raw.githubusercontent.com/aeternity/aeternity/v7.1.0/apps/aehttp/priv/oas3.yaml output-folder: ../../src/apis/node From 905d6ae67b7c00d93528ae2b5f7c45c925dd2d7f Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 8 Jun 2024 14:26:28 +1000 Subject: [PATCH 045/149] test: only Ceres, drop Iris --- test/integration/aens.ts | 15 +++-------- test/integration/contract-aci.ts | 16 +++--------- test/integration/delegation.ts | 42 ++++++++++++------------------ test/integration/node.ts | 10 +++---- test/integration/transaction.ts | 10 ++----- test/integration/txVerification.ts | 7 ++--- test/integration/typed-data.ts | 7 ++--- 7 files changed, 33 insertions(+), 74 deletions(-) diff --git a/test/integration/aens.ts b/test/integration/aens.ts index 52d5699ec7..07838a3163 100644 --- a/test/integration/aens.ts +++ b/test/integration/aens.ts @@ -7,7 +7,7 @@ import { } from '../utils'; import { AeSdk, Name, generateKeyPair, buildContractId, computeBidFee, ensureName, produceNameId, Contract, - AensPointerContextError, encode, decode, Encoding, ContractMethodsBase, ConsensusProtocolVersion, + AensPointerContextError, encode, decode, Encoding, ContractMethodsBase, IllegalArgumentError, Tag, unpackTx, buildTxHash, } from '../../src'; @@ -82,9 +82,6 @@ describe('Aens', () => { }); it('claims a long name without preclaim', async () => { - const isIris = (await aeSdk.api.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; - if (isIris) return; const nameString = randomName(30); const n = new Name(nameString, aeSdk.getContext()); const claimed = await n.claim(); @@ -225,14 +222,11 @@ describe('Aens', () => { const address = generateKeyPair().publicKey; let pointers: Parameters[0]; let pointersNode: Array<{ key: string; id: typeof pointers[string] }>; - let isIris: boolean; before(async () => { - isIris = (await aeSdk.api.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; pointers = { myKey: address, - ...!isIris && { 'my raw key': encode(Buffer.from('my raw value'), Encoding.Bytearray) }, + 'my raw key': encode(Buffer.from('my raw value'), Encoding.Bytearray), account_pubkey: address, oracle_pubkey: encode(decode(address), Encoding.OracleAddress), channel: encode(decode(address), Encoding.Channel), @@ -313,9 +307,8 @@ describe('Aens', () => { it('throws error on setting too long raw pointer', async () => { const pointersRaw = { raw: encode(Buffer.from('t'.repeat(1025)), Encoding.Bytearray) }; - await expect(name.update(pointersRaw)).to.be.rejectedWith(isIris - ? 'Raw pointers are available only in Ceres, the current protocol is Iris' - : 'Raw pointer should be shorter than 1025 bytes, got 1025 bytes instead'); + await expect(name.update(pointersRaw)) + .to.be.rejectedWith('Raw pointer should be shorter than 1025 bytes, got 1025 bytes instead'); }); it('extends name ttl', async () => { diff --git a/test/integration/contract-aci.ts b/test/integration/contract-aci.ts index b60cfaf7c0..d0d37bc326 100644 --- a/test/integration/contract-aci.ts +++ b/test/integration/contract-aci.ts @@ -17,7 +17,6 @@ import { AE_AMOUNT_FORMATS, Tag, NoSuchContractFunctionError, - ConsensusProtocolVersion, InvalidTxError, ContractError, } from '../../src'; @@ -39,7 +38,7 @@ namespace TestLib = function sum(x: int, y: int) = x + y `; -const getTestContractSourceCode = (isIris: boolean): string => ` +const testContractSourceCode = ` namespace Test = function double(x: int) = x * 2 @@ -89,7 +88,7 @@ contract StateContract = entrypoint hashFn(s: hash) = s entrypoint signatureFn(s: signature) = s entrypoint bytesFn(s: bytes(32)) = s - ${isIris ? '' : 'entrypoint bytesAnySizeFn(s: bytes) = s'} + entrypoint bytesAnySizeFn(s: bytes) = s entrypoint bitsFn(s: bits) = s @@ -104,7 +103,7 @@ contract StateContract = entrypoint chainTtlFn(t: Chain.ttl) = t - ${isIris ? '' : 'entrypoint aensV2Name(name: AENSv2.name) = name'} + entrypoint aensV2Name(name: AENSv2.name) = name stateful entrypoint recursion(t: string) = put(state{value = t}) @@ -188,8 +187,6 @@ interface TestContractApi extends ContractMethodsBase { describe('Contract instance', () => { let aeSdk: AeSdk; - let isIris: boolean; - let testContractSourceCode: string; let testContract: Contract; let testContractAddress: Encoded.ContractAddress; let testContractAci: Aci; @@ -197,9 +194,6 @@ describe('Contract instance', () => { before(async () => { aeSdk = await getSdk(2); - isIris = (await aeSdk.api.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; - testContractSourceCode = getTestContractSourceCode(isIris); const res = await aeSdk.compilerApi.compileBySourceCode(testContractSourceCode, fileSystem); testContractAci = res.aci; testContractBytecode = res.bytecode; @@ -1134,13 +1128,11 @@ describe('Contract instance', () => { describe('Bytes any size', () => { it('Invalid type', async () => { - if (isIris) return; await expect(testContract.bytesAnySizeFn({} as any)) .to.be.rejectedWith('Should be one of: Array, ArrayBuffer, hex string, Number, BigInt; got [object Object] instead'); }); it('Valid', async () => { - if (isIris) return; const decoded = Buffer.from('0xdeadbeef', 'hex'); const { decodedResult: hashAsBuffer } = await testContract.bytesAnySizeFn(decoded); const { decodedResult: hashAsHex } = await testContract.bytesAnySizeFn(decoded.toString('hex')); @@ -1176,13 +1168,11 @@ describe('Contract instance', () => { describe('AENSv2.name', () => { it('Invalid', async () => { - if (isIris) return; await expect(testContract.aensV2Name({ 'AENSv2.Name': ['test'] } as any)) .to.be.rejectedWith('"AENSv2.Name" variant constructor expects 3 argument(s) but got 1 instead'); }); it('Valid', async () => { - if (isIris) return; const value: AENSv2Name = { 'AENSv2.Name': [ 'ak_nRqnePWC6yGWBmR4wfN3AvQnqbv2TizxKJdvGXj8p7YZrUZ5J', diff --git a/test/integration/delegation.ts b/test/integration/delegation.ts index 4fa01e7a61..89f3298a12 100644 --- a/test/integration/delegation.ts +++ b/test/integration/delegation.ts @@ -6,18 +6,15 @@ import { import { getSdk } from '.'; import { commitmentHash, decode, encode, Encoded, Encoding, - genSalt, AeSdk, Contract, ConsensusProtocolVersion, Oracle, OracleClient, Name, + genSalt, AeSdk, Contract, Oracle, OracleClient, Name, packDelegation, DelegationTag, } from '../../src'; describe('Operation delegation', () => { let aeSdk: AeSdk; - let isIris: boolean; before(async () => { aeSdk = await getSdk(2); - isIris = (await aeSdk.api.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; }); describe('AENS', () => { @@ -63,35 +60,33 @@ describe('Operation delegation', () => { ) => void; }>; let contractAddress: Encoded.ContractAddress; - let aens: string; before(async () => { - aens = isIris ? 'AENS' : 'AENSv2'; contract = await Contract.initialize({ ...aeSdk.getContext(), sourceCode: ` -@compiler ${isIris ? '>= 7' : '>= 8'} -@compiler ${isIris ? '< 8' : '< 9'} +@compiler >= 8 +@compiler < 9 contract DelegateTest = - entrypoint getName(name: string): option(${aens}.name) = - ${aens}.lookup(name) + entrypoint getName(name: string): option(AENSv2.name) = + AENSv2.lookup(name) stateful payable entrypoint signedPreclaim(addr: address, chash: hash, sign: signature): unit = - ${aens}.preclaim(addr, chash, signature = sign) + AENSv2.preclaim(addr, chash, signature = sign) stateful entrypoint signedClaim( addr: address, name: string, salt: int, name_fee: int, sign: signature): unit = - ${aens}.claim(addr, name, salt, name_fee, signature = sign) + AENSv2.claim(addr, name, salt, name_fee, signature = sign) stateful entrypoint signedTransfer( owner: address, new_owner: address, name: string, sign: signature): unit = - ${aens}.transfer(owner, new_owner, name, signature = sign) + AENSv2.transfer(owner, new_owner, name, signature = sign) stateful entrypoint signedRevoke(owner: address, name: string, sign: signature): unit = - ${aens}.revoke(owner, name, signature = sign) + AENSv2.revoke(owner, name, signature = sign) stateful entrypoint signedUpdate( - owner: address, name: string, key: string, pt: ${aens}.pointee, sig: signature) = - switch(${aens}.lookup(name)) + owner: address, name: string, key: string, pt: AENSv2.pointee, sig: signature) = + switch(AENSv2.lookup(name)) None => () - Some(${aens}.Name(_, _, ptrs)) => - ${aens}.update(owner, name, None, None, Some(ptrs{[key] = pt}), signature = sig)`, + Some(AENSv2.Name(_, _, ptrs)) => + AENSv2.update(owner, name, None, None, Some(ptrs{[key] = pt}), signature = sig)`, }); await contract.$deploy([]); assertNotNull(contract.$options.address); @@ -131,7 +126,7 @@ contract DelegateTest = }); it('updates', async () => { - const pointee: Pointee = { [`${aens}.OraclePt`]: [newOwner] }; + const pointee: Pointee = { 'AENSv2.OraclePt': [newOwner] }; const { result } = await contract .signedUpdate(owner, name, 'oracle', pointee, decode(delegationSignature)); assertNotNull(result); @@ -146,7 +141,6 @@ contract DelegateTest = const dataPt = new Uint8Array(Buffer.from('test value')); it('updates with raw pointer', async () => { - if (isIris) return; const pointee: Pointee = { 'AENSv2.DataPt': [dataPt] }; await contract.signedUpdate(owner, name, 'test key', pointee, decode(delegationSignature)); expect((await aeSdk.api.getNameEntryByName(name)).pointers[0]).to.be.eql({ @@ -157,15 +151,15 @@ contract DelegateTest = }); it('gets', async () => { - const nameEntry = (await contract.getName(name)).decodedResult[`${aens}.Name`]; + const nameEntry = (await contract.getName(name)).decodedResult['AENSv2.Name']; const ttl = nameEntry[1].FixedTTL[0]; expect(ttl).to.be.a('bigint'); expect(nameEntry).to.be.eql([ owner, { FixedTTL: [ttl] }, new Map([ - ['oracle', { [`${aens}.OraclePt`]: [newOwner] }], - ...isIris ? [] : [['test key', { 'AENSv2.DataPt': [dataPt] }]] as const, + ['oracle', { 'AENSv2.OraclePt': [newOwner] }], + ['test key', { 'AENSv2.DataPt': [dataPt] }], ]), ]); }); @@ -194,7 +188,6 @@ contract DelegateTest = }); it('works using wildcard delegation signature', async () => { - if (isIris) return; const allNamesDelSig = decode(await aeSdk.signDelegation( packDelegation( { tag: DelegationTag.AensWildcard, accountAddress: aeSdk.address, contractAddress }, @@ -228,7 +221,6 @@ contract DelegateTest = }); it('claims without preclaim', async () => { - if (isIris) return; const n = randomName(30); const dlgSig = await aeSdk.signDelegation( packDelegation({ diff --git a/test/integration/node.ts b/test/integration/node.ts index 0f46da476d..2364b89715 100644 --- a/test/integration/node.ts +++ b/test/integration/node.ts @@ -68,14 +68,10 @@ describe('Node client', () => { it('throws exception if unsupported protocol', async () => { const sandbox = createSandbox(); - const [name, version, message] = { - 5: ['Iris', '5', '5. Supported: >= 6 < 7'], - 6: ['Ceres', '6', '6. Supported: >= 5 < 6'], - }[(await node.getNodeInfo()).consensusProtocolVersion]; - sandbox.stub(ConsensusProtocolVersion, name as any).value(undefined); - sandbox.stub(ConsensusProtocolVersion, version as any).value(undefined); + sandbox.stub(ConsensusProtocolVersion, 'Ceres' as any).value(undefined); + sandbox.stub(ConsensusProtocolVersion, '6' as any).value(undefined); await expect(node.getNodeInfo()).to.be - .rejectedWith(`Unsupported consensus protocol version ${message}`); + .rejectedWith('Unsupported consensus protocol version 6. Supported: >= 5 < 6'); sandbox.restore(); }); diff --git a/test/integration/transaction.ts b/test/integration/transaction.ts index b971205c14..333dc725a7 100644 --- a/test/integration/transaction.ts +++ b/test/integration/transaction.ts @@ -5,7 +5,7 @@ import { getSdk } from './index'; import { AeSdk, Contract, Node, commitmentHash, oracleQueryId, decode, encode, Encoded, Encoding, - ORACLE_TTL_TYPES, Tag, AE_AMOUNT_FORMATS, buildTx, unpackTx, ConsensusProtocolVersion, + ORACLE_TTL_TYPES, Tag, AE_AMOUNT_FORMATS, buildTx, unpackTx, } from '../../src'; const nonce = 1; @@ -197,13 +197,7 @@ describe('Transaction', () => { }), ], [ 'contract create', - async () => { - const { consensusProtocolVersion } = await aeSdk.api.getNodeInfo(); - if (consensusProtocolVersion === ConsensusProtocolVersion.Iris) { - return 'tx_+LAqAaEBhAyXS5cWR3ZFS6EZ2E7cTWBYqN7JK27cV4qy0wtMQgABuGr4aEYDoKEijZbj/w2AeiWwAbldusME5pm3ZgPuomnZ3TbUbYgrwLg7nv5E1kQfADcANwAaDoI/AQM//oB4IJIANwEHBwEBAJgvAhFE1kQfEWluaXQRgHggkhlnZXRBcmeCLwCFNy40LjEAgwcAA4ZHcyzkwAAAAACDTEtAhDuaygCHKxFE1kQfP+mk9Ac='; - } - return 'tx_+LAqAaEBhAyXS5cWR3ZFS6EZ2E7cTWBYqN7JK27cV4qy0wtMQgABuGr4aEYDoKEijZbj/w2AeiWwAbldusME5pm3ZgPuomnZ3TbUbYgrwLg7nv5E1kQfADcANwAaDoI/AQM//oB4IJIANwEHBwEBAJgvAhFE1kQfEWluaXQRgHggkhlnZXRBcmeCLwCFOC4wLjAAgwgAA4ZHcyzkwAAAAACDTEtAhDuaygCHKxFE1kQfP6UPXo4='; - }, + 'tx_+LAqAaEBhAyXS5cWR3ZFS6EZ2E7cTWBYqN7JK27cV4qy0wtMQgABuGr4aEYDoKEijZbj/w2AeiWwAbldusME5pm3ZgPuomnZ3TbUbYgrwLg7nv5E1kQfADcANwAaDoI/AQM//oB4IJIANwEHBwEBAJgvAhFE1kQfEWluaXQRgHggkhlnZXRBcmeCLwCFOC4wLjAAgwgAA4ZHcyzkwAAAAACDTEtAhDuaygCHKxFE1kQfP6UPXo4=', async () => aeSdk.buildTx({ tag: Tag.ContractCreateTx, nonce, diff --git a/test/integration/txVerification.ts b/test/integration/txVerification.ts index 58c63aa000..9585ea59e4 100644 --- a/test/integration/txVerification.ts +++ b/test/integration/txVerification.ts @@ -2,8 +2,7 @@ import { before, describe, it } from 'mocha'; import { expect } from 'chai'; import { getSdk } from '.'; import { - AeSdk, Node, InvalidTxError, ArgumentError, Tag, MemoryAccount, verifyTransaction, - ConsensusProtocolVersion, buildTxAsync, + AeSdk, Node, InvalidTxError, ArgumentError, Tag, MemoryAccount, verifyTransaction, buildTxAsync, } from '../../src'; describe('Verify Transaction', () => { @@ -98,9 +97,7 @@ describe('Verify Transaction', () => { it('verifies nonce of gaAttach transaction', async () => { const gaAttach = 'tx_+QEWUAGhAUfN4Ejc4KynKrM1XI1D2AWlqBrTeCVywu9B6hV4rnriAri0+LJGA6BFoqzc6YC/ewZLk3eumqCWL/K7O2Wqy+x14Zbcx4rB0MC4hbhV/kTWRB8ANwA3ABoOgq+CAAEAPwEDP/5s8lcLADcBBxd3AoJ3AAg8AgT7A01Ob3QgaW4gQXV0aCBjb250ZXh0AQP//qsVVmEANwCHAjcANwGXQAECgqovAxFE1kQfEWluaXQRbPJXCyVhdXRob3JpemURqxVWYSVnZXRUeEhhc2iCLwCFOC4wLjAAoGzyVwsKFZm3CCkeUKo9rxPQx/JIS8M33a0kE6N/1KAJgwgAA4ZJUs52OAAAa4Q7msoAhysRRNZEHz/z50Zp'; const errors = await verifyTransaction(gaAttach, node); - const isIris = (await aeSdk.api.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; - expect(errors.find((e) => e.key === 'AccountUsed')).to.eql(isIris ? undefined : { + expect(errors.find((e) => e.key === 'AccountUsed')).to.eql({ message: 'Account ak_Yd9EiaBy8GNXWLkMuH53H9hiCyEuL3RKxN4wYKhN8xDnjKRpb can\'t become generalized because it is already used', key: 'AccountUsed', checkedKeys: ['nonce'], diff --git a/test/integration/typed-data.ts b/test/integration/typed-data.ts index 5a825e2ac4..c3b065113b 100644 --- a/test/integration/typed-data.ts +++ b/test/integration/typed-data.ts @@ -3,8 +3,7 @@ import { expect } from 'chai'; import canonicalize from 'canonicalize'; import { TypeResolver, ContractByteArrayEncoder } from '@aeternity/aepp-calldata'; import { - AeSdk, ConsensusProtocolVersion, Contract, decode, Encoded, - hashDomain, hashJson, hashTypedData, + AeSdk, Contract, decode, Encoded, hashDomain, hashJson, hashTypedData, } from '../../src'; import { Domain } from '../../src/utils/typed-data'; import { getSdk } from '.'; @@ -69,8 +68,6 @@ describe('typed data', () => { before(async () => { aeSdk = await getSdk(); const typeJson = (canonicalize(recordAci) ?? '').replaceAll('"', '\\"'); - const isIris = (await aeSdk.api.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; contract = await Contract.initialize({ ...aeSdk.getContext(), sourceCode: '' @@ -86,7 +83,7 @@ describe('typed data', () => { + '\n entrypoint getDomain(): domain =' // kind of EIP-5267 + '\n { name = Some("Test app"),' + '\n version = Some(2),' - + `\n networkId = Some(${isIris ? '"ae_dev"' : 'Chain.network_id'}),` + + '\n networkId = Some(Chain.network_id),' + '\n contractAddress = Some(Address.to_contract(Contract.address)) }' + '\n' + '\n entrypoint getDomainHash() = Crypto.blake2b(getDomain())' From 61554b32e02a26664df6954871917a9454e6d41f Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 8 Jun 2024 16:09:52 +1000 Subject: [PATCH 046/149] refactor!: drop Iris support BREAKING CHANGE: Iris is not supported Stick to a previous sdk version if it is required. --- src/aens.ts | 9 ++------- src/contract/Contract.ts | 8 ++------ src/tx/builder/constants.ts | 1 - src/tx/builder/field-types/abi-version.ts | 2 +- src/tx/builder/field-types/ct-version.ts | 13 +------------ src/tx/builder/field-types/nonce.ts | 10 +++++++++- src/tx/validator.ts | 11 ----------- test/integration/account-generalized.ts | 18 ++++++++++++++++++ test/integration/chain.ts | 2 +- test/integration/node.ts | 13 ++++++------- test/integration/txVerification.ts | 10 ---------- 11 files changed, 40 insertions(+), 57 deletions(-) diff --git a/src/aens.ts b/src/aens.ts index d52f1482f0..2ef5e8eead 100644 --- a/src/aens.ts +++ b/src/aens.ts @@ -9,9 +9,9 @@ import BigNumber from 'bignumber.js'; import { genSalt, isAddressValid } from './utils/crypto'; import { commitmentHash, isAuctionName } from './tx/builder/helpers'; -import { Tag, AensName, ConsensusProtocolVersion } from './tx/builder/constants'; +import { Tag, AensName } from './tx/builder/constants'; import { Encoded, Encoding } from './utils/encoder'; -import { UnsupportedProtocolError, LogicError } from './utils/errors'; +import { LogicError } from './utils/errors'; import { getName } from './chain'; import { sendTransaction, SendTransactionOptions } from './send-transaction'; import { Optional } from './utils/other'; @@ -125,11 +125,6 @@ export default class Name { const hasRawPointers = Object.values(allPointers) .some((v) => isAddressValid(v, Encoding.Bytearray)); - const isIris = (await opt.onNode.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; - if (hasRawPointers && isIris) { - throw new UnsupportedProtocolError('Raw pointers are available only in Ceres, the current protocol is Iris'); - } const tx = await buildTxAsync({ _isInternalBuild: true, diff --git a/src/contract/Contract.ts b/src/contract/Contract.ts index 944ded4ba9..6bb9f34c34 100644 --- a/src/contract/Contract.ts +++ b/src/contract/Contract.ts @@ -6,9 +6,7 @@ */ import { Encoder as Calldata } from '@aeternity/aepp-calldata'; -import { - Tag, AensName, ConsensusProtocolVersion, DRY_RUN_ACCOUNT, -} from '../tx/builder/constants'; +import { Tag, AensName, DRY_RUN_ACCOUNT } from '../tx/builder/constants'; import { buildContractIdByContractTx, unpackTx, buildTxAsync, BuildTxOptions, buildTxHash, } from '../tx/builder'; @@ -501,9 +499,7 @@ class Contract { 'contract_pubkey', { resolveByNode: true, onNode }, ) as Encoded.ContractAddress; - const isIris = (await onNode.getNodeInfo()) - .consensusProtocolVersion === ConsensusProtocolVersion.Iris; - if (!isIris && isNameValid(address)) name = address; + if (isNameValid(address)) name = address; } if (address == null && sourceCode == null && sourceCodePath == null && bytecode == null) { diff --git a/src/tx/builder/constants.ts b/src/tx/builder/constants.ts index 6364435e94..94bcfa2d1b 100644 --- a/src/tx/builder/constants.ts +++ b/src/tx/builder/constants.ts @@ -55,7 +55,6 @@ export const NAME_BID_RANGES = mapObject({ }, ([key, value]) => [key, new BigNumber(value).times(NAME_FEE_MULTIPLIER)]); export enum ConsensusProtocolVersion { - Iris = 5, Ceres = 6, } diff --git a/src/tx/builder/field-types/abi-version.ts b/src/tx/builder/field-types/abi-version.ts index 50438deb65..53d286db35 100644 --- a/src/tx/builder/field-types/abi-version.ts +++ b/src/tx/builder/field-types/abi-version.ts @@ -12,7 +12,7 @@ export default { serialize( value: AbiVersion | undefined, { tag }: { tag: Tag }, - { consensusProtocolVersion = ConsensusProtocolVersion.Iris }: + { consensusProtocolVersion = ConsensusProtocolVersion.Ceres }: { consensusProtocolVersion?: ConsensusProtocolVersion }, ): Buffer { const result = value ?? this._getProtocolDetails(consensusProtocolVersion, tag); diff --git a/src/tx/builder/field-types/ct-version.ts b/src/tx/builder/field-types/ct-version.ts index c466445038..8e20110437 100644 --- a/src/tx/builder/field-types/ct-version.ts +++ b/src/tx/builder/field-types/ct-version.ts @@ -6,17 +6,6 @@ import Node from '../../../Node'; * @see {@link https://github.com/aeternity/protocol/blob/71cf111/contracts/contract_vms.md#virtual-machines-on-the-æternity-blockchain} */ export const ProtocolToVmAbi = { - [ConsensusProtocolVersion.Iris]: { - 'contract-create': { - vmVersion: [VmVersion.Fate2], abiVersion: [AbiVersion.Fate], - }, - 'contract-call': { - vmVersion: [], abiVersion: [AbiVersion.Fate, AbiVersion.Sophia], - }, - 'oracle-call': { - vmVersion: [], abiVersion: [AbiVersion.NoAbi, AbiVersion.Fate], - }, - }, [ConsensusProtocolVersion.Ceres]: { 'contract-create': { vmVersion: [VmVersion.Fate3], abiVersion: [AbiVersion.Fate], @@ -50,7 +39,7 @@ export default { serialize( value: CtVersion | undefined, params: {}, - { consensusProtocolVersion = ConsensusProtocolVersion.Iris }: + { consensusProtocolVersion = ConsensusProtocolVersion.Ceres }: { consensusProtocolVersion?: ConsensusProtocolVersion }, ): Buffer { value ??= getProtocolDetails(consensusProtocolVersion, 'contract-create'); diff --git a/src/tx/builder/field-types/nonce.ts b/src/tx/builder/field-types/nonce.ts index aaca3d55fc..d37a79cf3d 100644 --- a/src/tx/builder/field-types/nonce.ts +++ b/src/tx/builder/field-types/nonce.ts @@ -3,9 +3,10 @@ import shortUInt from './short-u-int'; import Node from '../../../Node'; import { ArgumentError } from '../../../utils/errors'; import { NextNonceStrategy } from '../../../apis/node'; +import { Tag } from '../constants'; export default function genNonceField(senderKey: SenderKey): { - serialize: (value: number) => Buffer; + serialize: (value: number, params: { tag: Tag }) => Buffer; // TODO: (value: number) => Promise | (value: undefined, ...) => Promise prepare: ( value: number | undefined, @@ -23,6 +24,13 @@ export default function genNonceField(senderKey: Sende return { ...shortUInt, + serialize(value: number, { tag }): Buffer { + if (Tag.GaAttachTx === tag && value !== 1) { + throw new ArgumentError('nonce', 'equal 1 if GaAttachTx', value); + } + return shortUInt.serialize(value); + }, + async prepare(value, params, options) { if (value != null) return value; // TODO: uncomment the below line diff --git a/src/tx/validator.ts b/src/tx/validator.ts index 4bb5a41972..bec1eac879 100644 --- a/src/tx/validator.ts +++ b/src/tx/validator.ts @@ -208,15 +208,4 @@ validators.push( }]; } }, - // TODO: move to fee field of tx builder after dropping Iris - (tx, { consensusProtocolVersion }) => (( - Tag.GaAttachTx === tx.tag - && ConsensusProtocolVersion.Ceres === consensusProtocolVersion - && tx.nonce !== 1 - ) ? [{ - message: `Account ${tx.ownerId} can't become generalized because it is already used`, - key: 'AccountUsed', - checkedKeys: ['nonce'], - }] - : []), ); diff --git a/test/integration/account-generalized.ts b/test/integration/account-generalized.ts index f60e739d99..f831363c62 100644 --- a/test/integration/account-generalized.ts +++ b/test/integration/account-generalized.ts @@ -13,6 +13,7 @@ import { Contract, ContractMethodsBase, MIN_GAS_PRICE, Encoded, + ArgumentError, } from '../../src'; import { ensureEqual } from '../utils'; @@ -61,6 +62,23 @@ describe('Generalized Account', () => { .should.be.rejectedWith(`Account ${gaAccountAddress} is already GA`); }); + it('fails to build GaAttachTx with non-1 nonce', () => { + expect(() => buildTx({ + tag: Tag.GaAttachTx, + version: 1, + ownerId: 'ak_Yd9EiaBy8GNXWLkMuH53H9hiCyEuL3RKxN4wYKhN8xDnjKRpb', + nonce: 2, + code: 'cb_+LJGA6BFoqzc6YC/ewZLk3eumqCWL/K7O2Wqy+x14Zbcx4rB0MC4hbhV/kTWRB8ANwA3ABoOgq+CAAEAPwEDP/5s8lcLADcBBxd3AoJ3AAg8AgT7A01Ob3QgaW4gQXV0aCBjb250ZXh0AQP//qsVVmEANwCHAjcANwGXQAECgqovAxFE1kQfEWluaXQRbPJXCyVhdXRob3JpemURqxVWYSVnZXRUeEhhc2iCLwCFOC4wLjAAdzf5cQ==', + authFun: Buffer.from('6cf2570b0a1599b708291e50aa3daf13d0c7f2484bc337ddad2413a37fd4a009', 'hex'), + ctVersion: { vmVersion: 8, abiVersion: 3 }, + fee: '80620000000000', + ttl: 0, + gasLimit: 107, + gasPrice: '1000000000', + callData: 'cb_KxFE1kQfP4oEp9E=', + })).to.throw(ArgumentError, 'nonce should be equal 1 if GaAttachTx, got 2 instead'); + }); + const { publicKey } = generateKeyPair(); it('Init MemoryAccount for GA and Spend using GA', async () => { diff --git a/test/integration/chain.ts b/test/integration/chain.ts index 83d0eb25f6..76f8f28803 100644 --- a/test/integration/chain.ts +++ b/test/integration/chain.ts @@ -195,6 +195,6 @@ describe('Node Chain', () => { .foo(v, { nonce: nextNonce + idx, gasLimit, combine: true })), )).map((r) => r.decodedResult); expect(results).to.be.eql(numbers.map((v) => BigInt(v * 100))); - expect(getCount()).to.be.equal(2); + expect(getCount()).to.be.equal(1); }); }); diff --git a/test/integration/node.ts b/test/integration/node.ts index 2364b89715..2124c1debd 100644 --- a/test/integration/node.ts +++ b/test/integration/node.ts @@ -1,11 +1,11 @@ import { describe, it, before } from 'mocha'; import { expect } from 'chai'; -import { createSandbox } from 'sinon'; +import { stub } from 'sinon'; import { RestError } from '@azure/core-rest-pipeline'; import { FullOperationResponse } from '@azure/core-client'; import { url } from '.'; import { - AeSdkBase, Node, NodeNotFoundError, ConsensusProtocolVersion, MemoryAccount, buildTx, Tag, + AeSdkBase, Node, NodeNotFoundError, MemoryAccount, buildTx, Tag, } from '../../src'; import { bindRequestCounter } from '../utils'; @@ -67,12 +67,11 @@ describe('Node client', () => { }, Promise.resolve())); it('throws exception if unsupported protocol', async () => { - const sandbox = createSandbox(); - sandbox.stub(ConsensusProtocolVersion, 'Ceres' as any).value(undefined); - sandbox.stub(ConsensusProtocolVersion, '6' as any).value(undefined); + const status = await node.getStatus(); + const s = stub(node, 'getStatus').resolves({ ...status, topBlockHeight: 0 }); await expect(node.getNodeInfo()).to.be - .rejectedWith('Unsupported consensus protocol version 6. Supported: >= 5 < 6'); - sandbox.restore(); + .rejectedWith('Unsupported consensus protocol version 1. Supported: >= 6 < 7'); + s.restore(); }); it('throws exception with code', async () => { diff --git a/test/integration/txVerification.ts b/test/integration/txVerification.ts index 9585ea59e4..3edcd5a419 100644 --- a/test/integration/txVerification.ts +++ b/test/integration/txVerification.ts @@ -93,14 +93,4 @@ describe('Verify Transaction', () => { const errors = await verifyTransaction(contractCall, node); expect(errors.map(({ key }) => key)).to.include('ContractNotFound'); }); - - it('verifies nonce of gaAttach transaction', async () => { - const gaAttach = 'tx_+QEWUAGhAUfN4Ejc4KynKrM1XI1D2AWlqBrTeCVywu9B6hV4rnriAri0+LJGA6BFoqzc6YC/ewZLk3eumqCWL/K7O2Wqy+x14Zbcx4rB0MC4hbhV/kTWRB8ANwA3ABoOgq+CAAEAPwEDP/5s8lcLADcBBxd3AoJ3AAg8AgT7A01Ob3QgaW4gQXV0aCBjb250ZXh0AQP//qsVVmEANwCHAjcANwGXQAECgqovAxFE1kQfEWluaXQRbPJXCyVhdXRob3JpemURqxVWYSVnZXRUeEhhc2iCLwCFOC4wLjAAoGzyVwsKFZm3CCkeUKo9rxPQx/JIS8M33a0kE6N/1KAJgwgAA4ZJUs52OAAAa4Q7msoAhysRRNZEHz/z50Zp'; - const errors = await verifyTransaction(gaAttach, node); - expect(errors.find((e) => e.key === 'AccountUsed')).to.eql({ - message: 'Account ak_Yd9EiaBy8GNXWLkMuH53H9hiCyEuL3RKxN4wYKhN8xDnjKRpb can\'t become generalized because it is already used', - key: 'AccountUsed', - checkedKeys: ['nonce'], - }); - }); }); From c521597e4ee4243266011d5e23e0fb75a126a404 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 8 Jun 2024 17:11:45 +1000 Subject: [PATCH 047/149] refactor(contract)!: remove `encodeFateValue`, `decodeFateValue` BREAKING CHANGE: `encodeFateValue`, `decodeFateValue` not exported anymore Use ContractByteArrayEncoder:encodeWithType, decodeWithType from `@aeternity/aepp-calldata`. --- src/deprecated.ts | 19 ------------------- src/index-browser.ts | 4 +--- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/src/deprecated.ts b/src/deprecated.ts index d742111d3d..cde63cf1aa 100644 --- a/src/deprecated.ts +++ b/src/deprecated.ts @@ -1,6 +1,3 @@ -import { TypeResolver, ContractByteArrayEncoder } from '@aeternity/aepp-calldata'; -import { AciValue } from './utils/typed-data'; -import { Encoded } from './utils/encoder'; import { RpcError } from './aepp-wallet-communication/schema'; /** @@ -23,19 +20,3 @@ export class RpcBroadcastError extends RpcError { * @deprecated use isAuctionName instead */ export const NAME_BID_MAX_LENGTH = 12; // # this is the max length for a domain to be part of a bid - -/** - * @deprecated use ContractByteArrayEncoder:encodeWithType from \@aeternity/aepp-calldata - */ -export function encodeFateValue(value: unknown, aci: AciValue): Encoded.ContractBytearray { - const valueType = new TypeResolver().resolveType(aci, {}); - return new ContractByteArrayEncoder().encodeWithType(value, valueType); -} - -/** - * @deprecated use ContractByteArrayEncoder:decodeWithType from \@aeternity/aepp-calldata - */ -export function decodeFateValue(value: Encoded.ContractBytearray, aci: AciValue): any { - const valueType = new TypeResolver().resolveType(aci, {}); - return new ContractByteArrayEncoder().decodeWithType(value, valueType); -} diff --git a/src/index-browser.ts b/src/index-browser.ts index d804eb888b..11c54f1318 100644 --- a/src/index-browser.ts +++ b/src/index-browser.ts @@ -112,6 +112,4 @@ export { TagNotFoundError, TxNotInChainError, AlreadyConnectedError, NoWalletConnectedError, RpcConnectionError, } from './utils/errors'; -export { - RpcBroadcastError, NAME_BID_MAX_LENGTH, encodeFateValue, decodeFateValue, -} from './deprecated'; +export { RpcBroadcastError, NAME_BID_MAX_LENGTH } from './deprecated'; From 83797a4a1d778104f86c9ddcc6c04fb29dce6bfe Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 8 Jun 2024 17:13:29 +1000 Subject: [PATCH 048/149] refactor!: remove `NAME_BID_MAX_LENGTH` BREAKING CHANGE: `NAME_BID_MAX_LENGTH` not exported anymore Use `isAuctionName` function instead. --- src/deprecated.ts | 5 ----- src/index-browser.ts | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/deprecated.ts b/src/deprecated.ts index cde63cf1aa..9e2c557457 100644 --- a/src/deprecated.ts +++ b/src/deprecated.ts @@ -15,8 +15,3 @@ export class RpcBroadcastError extends RpcError { this.name = 'RpcBroadcastError'; } } - -/** - * @deprecated use isAuctionName instead - */ -export const NAME_BID_MAX_LENGTH = 12; // # this is the max length for a domain to be part of a bid diff --git a/src/index-browser.ts b/src/index-browser.ts index 11c54f1318..d56d58c6c8 100644 --- a/src/index-browser.ts +++ b/src/index-browser.ts @@ -112,4 +112,4 @@ export { TagNotFoundError, TxNotInChainError, AlreadyConnectedError, NoWalletConnectedError, RpcConnectionError, } from './utils/errors'; -export { RpcBroadcastError, NAME_BID_MAX_LENGTH } from './deprecated'; +export { RpcBroadcastError } from './deprecated'; From 1f0b3bbb7edb615b05c014e90fadac1642b8a331 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sat, 8 Jun 2024 17:15:20 +1000 Subject: [PATCH 049/149] refactor(aepp)!: remove RpcBroadcastError BREAKING CHANGE: RpcBroadcastError not exported anymore Because it is not thrown by wallet as well. --- src/deprecated.ts | 17 ----------------- src/index-browser.ts | 1 - 2 files changed, 18 deletions(-) delete mode 100644 src/deprecated.ts diff --git a/src/deprecated.ts b/src/deprecated.ts deleted file mode 100644 index 9e2c557457..0000000000 --- a/src/deprecated.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { RpcError } from './aepp-wallet-communication/schema'; - -/** - * @category exception - * @deprecated this exception is not thrown anymore - */ -export class RpcBroadcastError extends RpcError { - static override code = 3; - - override code = 3; - - constructor(data?: any) { - super('Broadcast failed'); - this.data = data; - this.name = 'RpcBroadcastError'; - } -} diff --git a/src/index-browser.ts b/src/index-browser.ts index d56d58c6c8..749336e3c3 100644 --- a/src/index-browser.ts +++ b/src/index-browser.ts @@ -112,4 +112,3 @@ export { TagNotFoundError, TxNotInChainError, AlreadyConnectedError, NoWalletConnectedError, RpcConnectionError, } from './utils/errors'; -export { RpcBroadcastError } from './deprecated'; From 3b866321d3ecaf80a15ae0d975f8cdd460d12d59 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Mon, 6 May 2024 21:24:59 +1000 Subject: [PATCH 050/149] test(channel): enable in all networks --- test/integration/channel.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/channel.ts b/test/integration/channel.ts index fa0bceb103..2facb78509 100644 --- a/test/integration/channel.ts +++ b/test/integration/channel.ts @@ -48,7 +48,7 @@ async function waitForChannel(channel: Channel): Promise { }); } -(networkId === 'ae_dev' ? describe : describe.skip)('Channel', () => { +describe('Channel', () => { let aeSdk: AeSdk; let initiator: MemoryAccount; let responder: MemoryAccount; From f30b9ddea117b4c68189e8aa990a859734fdead4 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sun, 9 Jun 2024 16:37:18 +1000 Subject: [PATCH 051/149] test(channel): fix on testnet --- .mocharc.js | 2 +- test/integration/aens.ts | 16 ++++++++-------- test/integration/chain.ts | 6 +++--- test/integration/channel.ts | 9 ++++++--- test/integration/contract.ts | 4 ++-- test/integration/delegation.ts | 8 ++++---- test/integration/index.ts | 2 ++ test/integration/oracle.ts | 7 +++---- test/integration/typed-data.ts | 2 +- 9 files changed, 30 insertions(+), 26 deletions(-) diff --git a/.mocharc.js b/.mocharc.js index d36701fef6..7edd1ea5df 100644 --- a/.mocharc.js +++ b/.mocharc.js @@ -2,6 +2,6 @@ module.exports = { require: 'tooling/babel-register.js', recursive: true, extension: '.js,.ts', - timeout: process.env.NETWORK ? '500s' : '6s', + timeout: process.env.NETWORK ? '30s' : '6s', ignore: 'test/environment/**', } diff --git a/test/integration/aens.ts b/test/integration/aens.ts index 07838a3163..47a64f36d9 100644 --- a/test/integration/aens.ts +++ b/test/integration/aens.ts @@ -1,7 +1,7 @@ import { describe, it, before } from 'mocha'; import { expect } from 'chai'; import { RestError } from '@azure/core-rest-pipeline'; -import { getSdk, isLimitedCoins } from '.'; +import { getSdk, isLimitedCoins, timeoutBlock } from '.'; import { assertNotNull, ensureEqual, randomName, randomString, } from '../utils'; @@ -51,7 +51,7 @@ describe('Aens', () => { assertNotNull(claimRes.tx); assertNotNull(claimRes.signatures); expect(claimRes.tx.fee).to.satisfy((fee: bigint) => fee >= 16660000000000n); - expect(claimRes.tx.fee).to.satisfy((fee: bigint) => fee <= 17040000000000n); + expect(claimRes.tx.fee).to.satisfy((fee: bigint) => fee <= 17080000000000n); expect(claimRes).to.be.eql({ tx: { fee: claimRes.tx.fee, @@ -79,7 +79,7 @@ describe('Aens', () => { pointers: [], ttl: claimRes.blockHeight + 180000, }); - }); + }).timeout(timeoutBlock); it('claims a long name without preclaim', async () => { const nameString = randomName(30); @@ -136,7 +136,7 @@ describe('Aens', () => { pointers: [], ttl: claimRes.blockHeight + 180000, }); - }); + }).timeout(timeoutBlock); it('preclaims name using specific account', async () => { const onAccount = Object.values(aeSdk.accounts)[1]; @@ -241,7 +241,7 @@ describe('Aens', () => { assertNotNull(updateRes.tx); assertNotNull(updateRes.signatures); expect(updateRes.tx.fee).to.satisfy((fee: bigint) => fee >= 22140000000000n); - expect(updateRes.tx.fee).to.satisfy((fee: bigint) => fee <= 22180000000000n); + expect(updateRes.tx.fee).to.satisfy((fee: bigint) => fee <= 22240000000000n); expect(updateRes).to.be.eql({ tx: { fee: updateRes.tx.fee, @@ -280,7 +280,7 @@ describe('Aens', () => { const txHash = buildTxHash(rawTx); await expect(aeSdk.poll(txHash)) .to.be.rejectedWith(new RegExp(`v3/transactions/${txHash} error: (Transaction not found|412 status code)`)); - }); + }).timeout(timeoutBlock); it('updates extending pointers', async () => { const anotherContract = buildContractId(address, 12); @@ -331,7 +331,7 @@ describe('Aens', () => { assertNotNull(transferRes.tx); assertNotNull(transferRes.signatures); expect(transferRes.tx.fee).to.satisfy((fee: bigint) => fee >= 17300000000000n); - expect(transferRes.tx.fee).to.satisfy((fee: bigint) => fee <= 17340000000000n); + expect(transferRes.tx.fee).to.satisfy((fee: bigint) => fee <= 17400000000000n); expect(transferRes).to.be.eql({ tx: { fee: transferRes.tx.fee, @@ -359,7 +359,7 @@ describe('Aens', () => { assertNotNull(revokeRes.tx); assertNotNull(revokeRes.signatures); expect(revokeRes.tx.fee).to.satisfy((fee: bigint) => fee >= 16620000000000n); - expect(revokeRes.tx.fee).to.satisfy((fee: bigint) => fee <= 16660000000000n); + expect(revokeRes.tx.fee).to.satisfy((fee: bigint) => fee <= 16700000000000n); expect(revokeRes).to.be.eql({ tx: { fee: revokeRes.tx.fee, diff --git a/test/integration/chain.ts b/test/integration/chain.ts index 76f8f28803..86d31c6ba5 100644 --- a/test/integration/chain.ts +++ b/test/integration/chain.ts @@ -1,7 +1,7 @@ import { describe, it, before } from 'mocha'; import { expect } from 'chai'; import { stub } from 'sinon'; -import { getSdk } from '.'; +import { getSdk, timeoutBlock } from '.'; import { generateKeyPair, AeSdk, Tag, MemoryAccount, Encoded, Node, Contract, } from '../../src'; @@ -62,7 +62,7 @@ describe('Node Chain', () => { const target = await aeSdkWithoutAccount.getHeight() + 1; await aeSdkWithoutAccount.awaitHeight(target).should.eventually.be.at.least(target); await aeSdkWithoutAccount.getHeight().should.eventually.be.at.least(target); - }); + }).timeout(timeoutBlock); it('Can verify transaction from broadcast error', async () => { const error = await aeSdk @@ -114,7 +114,7 @@ describe('Node Chain', () => { const res = await aeSdk.spend(1000, aeSdk.address, { confirm: 1 }); assertNotNull(res.blockHeight); expect(await aeSdk.getHeight() >= res.blockHeight + 1).to.be.equal(true); - }); + }).timeout(timeoutBlock); it('doesn\'t make extra requests', async () => { let getCount; diff --git a/test/integration/channel.ts b/test/integration/channel.ts index 2facb78509..85937fdf31 100644 --- a/test/integration/channel.ts +++ b/test/integration/channel.ts @@ -4,7 +4,9 @@ import { import { expect } from 'chai'; import * as sinon from 'sinon'; import BigNumber from 'bignumber.js'; -import { getSdk, networkId, channelUrl } from '.'; +import { + getSdk, networkId, channelUrl, timeoutBlock, +} from '.'; import { unpackTx, buildTxHash, @@ -98,6 +100,7 @@ describe('Channel', () => { initiatorId: 'ak_' as Encoded.AccountAddress, responderId: 'ak_' as Encoded.AccountAddress, minimumDepth: 0, + minimumDepthStrategy: 'plain' as const, }; const initiatorParams = { role: 'initiator', @@ -738,7 +741,7 @@ describe('Channel', () => { .minus(responderBalanceBeforeClose) .isEqualTo(balances[responder.address]) .should.be.equal(true); - }); + }).timeout(timeoutBlock); it('can dispute via slash tx', async () => { initiatorCh.disconnect(); @@ -809,7 +812,7 @@ describe('Channel', () => { .plus(settleTxFee) .isEqualTo(recentBalances[responder.address]) .should.be.equal(true); - }); + }).timeout(timeoutBlock); it('can create a contract and accept', async () => { initiatorCh.disconnect(); diff --git a/test/integration/contract.ts b/test/integration/contract.ts index 74decf94fa..95b1b19526 100644 --- a/test/integration/contract.ts +++ b/test/integration/contract.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { before, describe, it } from 'mocha'; import { assertNotNull, InputNumber } from '../utils'; -import { getSdk } from '.'; +import { getSdk, timeoutBlock } from '.'; import { ArgumentError, NodeInvocationError, Encoded, DRY_RUN_ACCOUNT, messageToHash, UnexpectedTsError, AeSdk, Contract, ContractMethodsBase, isAddressValid, Encoding, @@ -210,7 +210,7 @@ describe('Contract', () => { await contract.call({ callStatic: true, top: beforeMicroBlockHash }); await contract.call({ callStatic: true, top: beforeKeyBlockHash }); await contract.call({ callStatic: true, top: beforeKeyBlockHeight }); - }); + }).timeout(timeoutBlock); it('call contract/deploy with waitMined: false', async () => { delete identityContract.$options.address; diff --git a/test/integration/delegation.ts b/test/integration/delegation.ts index 89f3298a12..3cb9f9afdc 100644 --- a/test/integration/delegation.ts +++ b/test/integration/delegation.ts @@ -3,7 +3,7 @@ import { before, describe, it } from 'mocha'; import { assertNotNull, randomName, ChainTtl, InputNumber, } from '../utils'; -import { getSdk } from '.'; +import { getSdk, timeoutBlock } from '.'; import { commitmentHash, decode, encode, Encoded, Encoding, genSalt, AeSdk, Contract, Oracle, OracleClient, Name, @@ -123,7 +123,7 @@ contract DelegateTest = .signedClaim(owner, name, salt, nameFee, decode(delegationSignature)); assertNotNull(result); result.returnType.should.be.equal('ok'); - }); + }).timeout(timeoutBlock); it('updates', async () => { const pointee: Pointee = { 'AENSv2.OraclePt': [newOwner] }; @@ -197,7 +197,7 @@ contract DelegateTest = const commitmentId = decode(commitmentHash(n, salt)); await contract.signedPreclaim(owner, commitmentId, allNamesDelSig); - await aeSdk.awaitHeight(2 + await aeSdk.getHeight()); + await aeSdk.awaitHeight(1 + await aeSdk.getHeight()); await contract.signedClaim(owner, n, salt, nameFee, allNamesDelSig); @@ -218,7 +218,7 @@ contract DelegateTest = .transfer(owner, { onAccount: aeSdk.accounts[newOwner] }); await contract.signedRevoke(owner, n, allNamesDelSig); - }); + }).timeout(timeoutBlock); it('claims without preclaim', async () => { const n = randomName(30); diff --git a/test/integration/index.ts b/test/integration/index.ts index 72a825ccdc..81f9085825 100644 --- a/test/integration/index.ts +++ b/test/integration/index.ts @@ -121,3 +121,5 @@ afterEach(async function describeTxError() { const { status } = await response.json(); err.message += ` (node-provided transaction status: ${status})`; }); + +export const timeoutBlock = networkId === 'ae_dev' ? 6_000 : 700_000; diff --git a/test/integration/oracle.ts b/test/integration/oracle.ts index b575db1e7e..d17a62c2f0 100644 --- a/test/integration/oracle.ts +++ b/test/integration/oracle.ts @@ -1,7 +1,7 @@ import { describe, it, before } from 'mocha'; import { expect } from 'chai'; import { RestError } from '@azure/core-rest-pipeline'; -import { getSdk, networkId } from '.'; +import { getSdk, timeoutBlock } from '.'; import { AeSdk, decode, encode, Encoding, Encoded, ORACLE_TTL_TYPES, Oracle, OracleClient, LogicError, } from '../../src'; @@ -156,19 +156,18 @@ describe('Oracle', () => { expect(query.tx.query).to.be.equal('{"city": "Berlin"}'); }); - const timeout = networkId === 'ae_dev' ? 8000 : 700000; it('polls for response for query without response', async () => { const { queryId } = await oracleClient.postQuery('{"city": "Berlin"}', { queryTtlValue: 1 }); await oracleClient.pollForResponse(queryId) .should.be.rejectedWith(/Giving up at height|error: Query not found/); - }).timeout(timeout); + }).timeout(timeoutBlock); it('polls for response for query that is already expired without response', async () => { const { queryId } = await oracleClient.postQuery('{"city": "Berlin"}', { queryTtlValue: 1 }); await aeSdk.awaitHeight(await aeSdk.getHeight() + 2); await oracleClient.pollForResponse(queryId) .should.be.rejectedWith(RestError, 'Query not found'); - }).timeout(timeout); + }).timeout(timeoutBlock * 2); it('queries oracle', async () => { const stopPolling = oracle.pollQueries((query) => { diff --git a/test/integration/typed-data.ts b/test/integration/typed-data.ts index c3b065113b..558ac04190 100644 --- a/test/integration/typed-data.ts +++ b/test/integration/typed-data.ts @@ -83,7 +83,7 @@ describe('typed data', () => { + '\n entrypoint getDomain(): domain =' // kind of EIP-5267 + '\n { name = Some("Test app"),' + '\n version = Some(2),' - + '\n networkId = Some(Chain.network_id),' + + '\n networkId = Some("ae_dev"),' // better `Chain.network_id`, but would complicate testing + '\n contractAddress = Some(Address.to_contract(Contract.address)) }' + '\n' + '\n entrypoint getDomainHash() = Crypto.blake2b(getDomain())' From 55693e0675f125934e637e012cb4003d88c490f2 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Sun, 9 Jun 2024 19:39:41 +1000 Subject: [PATCH 052/149] test(channel): split into three modules --- test/integration/channel-contracts.ts | 351 +++++++++++++++ test/integration/channel-other.ts | 218 ++++++++++ test/integration/channel-utils.ts | 61 +++ test/integration/channel.ts | 605 +------------------------- 4 files changed, 643 insertions(+), 592 deletions(-) create mode 100644 test/integration/channel-contracts.ts create mode 100644 test/integration/channel-other.ts create mode 100644 test/integration/channel-utils.ts diff --git a/test/integration/channel-contracts.ts b/test/integration/channel-contracts.ts new file mode 100644 index 0000000000..af0ccc51ca --- /dev/null +++ b/test/integration/channel-contracts.ts @@ -0,0 +1,351 @@ +import { + describe, it, before, after, beforeEach, afterEach, +} from 'mocha'; +import { expect } from 'chai'; +import * as sinon from 'sinon'; +import { getSdk, networkId } from '.'; +import { + buildTxHash, encode, decode, Encoded, Encoding, Tag, AbiVersion, VmVersion, AeSdk, Contract, + Channel, buildTx, MemoryAccount, +} from '../../src'; +import { SignTxWithTag } from '../../src/channel/internal'; +import { assertNotNull } from '../utils'; +import { initializeChannels, recreateAccounts } from './channel-utils'; + +const contractSourceCode = ` +contract Identity = + entrypoint getArg(x : int) : int = x +`; + +describe('Channel contracts', () => { + let aeSdk: AeSdk; + let initiator: MemoryAccount; + let responder: MemoryAccount; + let initiatorCh: Channel; + let responderCh: Channel; + let responderShouldRejectUpdate: number | boolean; + let contractAddress: Encoded.ContractAddress; + let callerNonce: number; + let contract: Contract<{}>; + const initiatorSign = async (tx: Encoded.Transaction): Promise => ( + initiator.signTransaction(tx, { networkId }) + ); + const responderSign = async (tx: Encoded.Transaction): Promise => ( + responder.signTransaction(tx, { networkId }) + ); + const responderSignTag = sinon.spy(async (_tag, tx: Encoded.Transaction) => { + if (typeof responderShouldRejectUpdate === 'number') { + return responderShouldRejectUpdate as unknown as Encoded.Transaction; + } + if (responderShouldRejectUpdate) { + return null as unknown as Encoded.Transaction; + } + return responderSign(tx); + }); + const initiatorSignedTx = async (): Promise => { + const { signedTx } = await initiatorCh.state(); + assertNotNull(signedTx); + return buildTx(signedTx); + }; + const initiatorParams = { + role: 'initiator', + host: 'localhost', + sign: async (_tag: string, tx: Encoded.Transaction) => initiatorSign(tx), + } as const; + const responderParams = { + role: 'responder', + sign: responderSignTag, + } as const; + + before(async () => { + aeSdk = await getSdk(); + [initiator, responder] = await recreateAccounts(aeSdk); + }); + + after(() => { + initiatorCh.disconnect(); + responderCh.disconnect(); + }); + + beforeEach(() => { + responderShouldRejectUpdate = false; + }); + + afterEach(() => { + responderSignTag.resetHistory(); + }); + + it('can create a contract and accept', async () => { + [initiatorCh, responderCh] = await initializeChannels(initiatorParams, responderParams); + contract = await Contract.initialize({ ...aeSdk.getContext(), sourceCode: contractSourceCode }); + const initiatorNewContract = sinon.spy(); + initiatorCh.on('newContract', initiatorNewContract); + const responderNewContract = sinon.spy(); + responderCh.on('newContract', responderNewContract); + const roundBefore = initiatorCh.round(); + assertNotNull(roundBefore); + const callData = contract._calldata.encode('Identity', 'init', []); + const result = await initiatorCh.createContract({ + code: await contract.$compile(), + callData, + deposit: 1000, + vmVersion: VmVersion.Fate, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + result.should.eql({ + accepted: true, address: result.address, signedTx: await initiatorSignedTx(), + }); + expect(initiatorCh.round()).to.equal(roundBefore + 1); + sinon.assert.calledTwice(responderSignTag); + sinon.assert.calledWithExactly( + responderSignTag, + 'update_ack', + sinon.match.string, + { + updates: [{ + abi_version: AbiVersion.Fate, + call_data: callData, + code: await contract.$compile(), + deposit: 1000, + op: 'OffChainNewContract', + owner: sinon.match.string, + vm_version: VmVersion.Fate, + }], + }, + ); + async function getContractAddresses(channel: Channel): Promise { + return Object.keys((await channel.state()).trees.contracts) as Encoded.ContractAddress[]; + } + expect(initiatorNewContract.callCount).to.equal(1); + expect(initiatorNewContract.firstCall.args).to.eql([result.address]); + expect(responderNewContract.callCount).to.equal(1); + expect(responderNewContract.firstCall.args).to.eql([result.address]); + expect(await getContractAddresses(initiatorCh)).to.eql([result.address]); + expect(await getContractAddresses(responderCh)).to.eql([result.address]); + contractAddress = result.address; + + await responderCh.createContract({ + code: await contract.$compile(), + callData: contract._calldata.encode('Identity', 'init', []), + deposit: 1e14, + vmVersion: VmVersion.Fate, + abiVersion: AbiVersion.Fate, + }, responderSign); + const contracts = await getContractAddresses(initiatorCh); + expect(contracts.length).to.equal(2); + expect(await getContractAddresses(responderCh)).to.eql(contracts); + const secondContract = contracts.filter((c) => c !== result.address); + expect(initiatorNewContract.callCount).to.equal(2); + expect(initiatorNewContract.secondCall.args).to.eql(secondContract); + expect(responderNewContract.callCount).to.equal(2); + expect(responderNewContract.secondCall.args).to.eql(secondContract); + }); + + it('can create a contract and reject', async () => { + responderShouldRejectUpdate = true; + const roundBefore = initiatorCh.round(); + const result = await initiatorCh.createContract({ + code: await contract.$compile(), + callData: contract._calldata.encode('Identity', 'init', []), + deposit: 1e14, + vmVersion: VmVersion.Fate, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + expect(initiatorCh.round()).to.equal(roundBefore); + result.should.eql({ ...result, accepted: false }); + }); + + it('can abort contract sign request', async () => { + const errorCode = 12345; + const result = await initiatorCh.createContract( + { + code: await contract.$compile(), + callData: contract._calldata.encode('Identity', 'init', []), + deposit: 1e14, + vmVersion: VmVersion.Fate, + abiVersion: AbiVersion.Fate, + }, + async () => Promise.resolve(errorCode), + ); + result.should.eql({ accepted: false }); + }); + + it('can abort contract with custom error code', async () => { + responderShouldRejectUpdate = 12345; + const result = await initiatorCh.createContract({ + code: await contract.$compile(), + callData: contract._calldata.encode('Identity', 'init', []), + deposit: 1e14, + vmVersion: VmVersion.Fate, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + result.should.eql({ + accepted: false, + errorCode: responderShouldRejectUpdate, + errorMessage: 'user-defined', + }); + }); + + it('can get balances', async () => { + const contractAddr = encode(decode(contractAddress), Encoding.AccountAddress); + const addresses = [initiator.address, responder.address, contractAddr]; + const balances = await initiatorCh.balances(addresses); + balances.should.be.an('object'); + // TODO: use the same type not depending on value after fixing https://github.com/aeternity/aepp-sdk-js/issues/1926 + balances[initiator.address].should.be.a('number'); + balances[responder.address].should.be.a('number'); + balances[contractAddr].should.be.equal(1000); + expect(balances).to.eql(await responderCh.balances(addresses)); + }); + + it('can call a contract and accept', async () => { + const roundBefore = initiatorCh.round(); + assertNotNull(roundBefore); + const result = await initiatorCh.callContract({ + amount: 0, + callData: contract._calldata.encode('Identity', 'getArg', [42]), + contract: contractAddress, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + result.should.eql({ accepted: true, signedTx: await initiatorSignedTx() }); + const round = initiatorCh.round(); + assertNotNull(round); + expect(round).to.equal(roundBefore + 1); + callerNonce = round; + }); + + it('can call a force progress', async () => { + const forceTx = await initiatorCh.forceProgress({ + amount: 0, + callData: contract._calldata.encode('Identity', 'getArg', [42]), + contract: contractAddress, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + const hash = buildTxHash(forceTx.tx); + const { callInfo } = await aeSdk.api.getTransactionInfoByHash(hash); + assertNotNull(callInfo); + expect(callInfo.returnType).to.be.equal('ok'); + }); + + it('can call a contract and reject', async () => { + responderShouldRejectUpdate = true; + const roundBefore = initiatorCh.round(); + const result = await initiatorCh.callContract({ + amount: 0, + callData: contract._calldata.encode('Identity', 'getArg', [42]), + contract: contractAddress, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + expect(initiatorCh.round()).to.equal(roundBefore); + result.should.eql({ ...result, accepted: false }); + }); + + it('can abort contract call sign request', async () => { + const errorCode = 12345; + const result = await initiatorCh.callContract( + { + amount: 0, + callData: contract._calldata.encode('Identity', 'getArg', [42]), + contract: contractAddress, + abiVersion: AbiVersion.Fate, + }, + async () => Promise.resolve(errorCode), + ); + result.should.eql({ accepted: false }); + }); + + it('can abort contract call with custom error code', async () => { + responderShouldRejectUpdate = 12345; + const result = await initiatorCh.callContract({ + amount: 0, + callData: contract._calldata.encode('Identity', 'getArg', [42]), + contract: contractAddress, + abiVersion: AbiVersion.Fate, + }, initiatorSign); + result.should.eql({ + accepted: false, + errorCode: responderShouldRejectUpdate, + errorMessage: 'user-defined', + }); + }); + + it('can get contract call', async () => { + const result = await initiatorCh.getContractCall({ + caller: initiator.address, + contract: contractAddress, + round: callerNonce, + }); + result.should.eql({ + callerId: initiator.address, + callerNonce, + contractId: contractAddress, + gasPrice: result.gasPrice, + gasUsed: result.gasUsed, + height: result.height, + log: result.log, + returnType: 'ok', + returnValue: result.returnValue, + }); + expect(result.returnType).to.be.equal('ok'); + expect(contract._calldata.decode('Identity', 'getArg', result.returnValue).toString()).to.be.equal('42'); + }); + + it('can call a contract using dry-run', async () => { + const result = await initiatorCh.callContractStatic({ + amount: 0, + callData: contract._calldata.encode('Identity', 'getArg', [42]), + contract: contractAddress, + abiVersion: AbiVersion.Fate, + }); + result.should.eql({ + callerId: initiator.address, + callerNonce: result.callerNonce, + contractId: contractAddress, + gasPrice: result.gasPrice, + gasUsed: result.gasUsed, + height: result.height, + log: result.log, + returnType: 'ok', + returnValue: result.returnValue, + }); + expect(result.returnType).to.be.equal('ok'); + expect(contract._calldata.decode('Identity', 'getArg', result.returnValue).toString()).to.be.equal('42'); + }); + + it('can clean contract calls', async () => { + await initiatorCh.cleanContractCalls(); + await initiatorCh.getContractCall({ + caller: initiator.address, + contract: contractAddress, + round: callerNonce, + }).should.eventually.be.rejected; + }); + + it('can get contract state', async () => { + const result = await initiatorCh.getContractState(contractAddress); + result.should.eql({ + contract: { + abiVersion: AbiVersion.Fate, + active: true, + deposit: 1000, + id: contractAddress, + ownerId: initiator.address, + referrerIds: [], + vmVersion: VmVersion.Fate, + }, + contractState: result.contractState, + }); + // TODO: contractState deserialization + }); + + it.skip('can post snapshot solo transaction', async () => { + const snapshotSoloTx = await aeSdk.buildTx({ + tag: Tag.ChannelSnapshotSoloTx, + channelId: initiatorCh.id(), + fromId: initiator.address, + payload: await initiatorSignedTx(), + }); + // TODO: fix this, error: invalid_at_protocol + await aeSdk.sendTransaction(snapshotSoloTx, { onAccount: initiator }); + }); +}); diff --git a/test/integration/channel-other.ts b/test/integration/channel-other.ts new file mode 100644 index 0000000000..777b648766 --- /dev/null +++ b/test/integration/channel-other.ts @@ -0,0 +1,218 @@ +import { + describe, it, before, beforeEach, afterEach, +} from 'mocha'; +import { expect } from 'chai'; +import BigNumber from 'bignumber.js'; +import { getSdk, networkId, timeoutBlock } from '.'; +import { + unpackTx, Encoded, Tag, AeSdk, Channel, MemoryAccount, +} from '../../src'; +import { appendSignature } from '../../src/channel/handlers'; +import { assertNotNull } from '../utils'; +import { + waitForChannel, sharedParams, initializeChannels, recreateAccounts, +} from './channel-utils'; + +describe('Channel other', () => { + let aeSdk: AeSdk; + let initiator: MemoryAccount; + let responder: MemoryAccount; + let initiatorCh: Channel; + let responderCh: Channel; + const initiatorSign = async (tx: Encoded.Transaction): Promise => ( + initiator.signTransaction(tx, { networkId }) + ); + const responderSign = async (tx: Encoded.Transaction): Promise => ( + responder.signTransaction(tx, { networkId }) + ); + const initiatorParams = { + role: 'initiator', + host: 'localhost', + sign: async (_tag: string, tx: Encoded.Transaction) => initiatorSign(tx), + } as const; + const responderParams = { + role: 'responder', + sign: async (_tag: string, tx: Encoded.Transaction) => responderSign(tx), + } as const; + + async function getBalances(): Promise<[string, string]> { + const [bi, br] = await Promise.all( + [initiator.address, responder.address].map(async (a) => aeSdk.getBalance(a)), + ); + return [bi, br]; + } + + before(async () => { + aeSdk = await getSdk(3); + await Promise.all( + aeSdk.addresses().slice(1) + .map(async (onAccount) => aeSdk.transferFunds(1, aeSdk.address, { onAccount })), + ); + }); + + beforeEach(async () => { + [initiator, responder] = await recreateAccounts(aeSdk); + [initiatorCh, responderCh] = await initializeChannels(initiatorParams, responderParams); + }); + + afterEach(() => { + initiatorCh.disconnect(); + responderCh.disconnect(); + }); + + it('can solo close a channel', async () => { + const { signedTx } = await initiatorCh.update( + initiator.address, + responder.address, + 1e14, + initiatorSign, + ); + assertNotNull(signedTx); + const poi = await initiatorCh.poi({ + accounts: [initiator.address, responder.address], + }); + const balances = await initiatorCh.balances([initiator.address, responder.address]); + const [initiatorBalanceBeforeClose, responderBalanceBeforeClose] = await getBalances(); + const closeSoloTx = await aeSdk.buildTx({ + tag: Tag.ChannelCloseSoloTx, + channelId: await initiatorCh.id(), + fromId: initiator.address, + poi, + payload: signedTx, + }); + const closeSoloTxFee = unpackTx(closeSoloTx, Tag.ChannelCloseSoloTx).fee; + await aeSdk.sendTransaction(closeSoloTx, { onAccount: initiator }); + + const settleTx = await aeSdk.buildTx({ + tag: Tag.ChannelSettleTx, + channelId: await initiatorCh.id(), + fromId: initiator.address, + initiatorAmountFinal: balances[initiator.address], + responderAmountFinal: balances[responder.address], + }); + const settleTxFee = unpackTx(settleTx, Tag.ChannelSettleTx).fee; + await aeSdk.sendTransaction(settleTx, { onAccount: initiator }); + + const [initiatorBalanceAfterClose, responderBalanceAfterClose] = await getBalances(); + new BigNumber(initiatorBalanceAfterClose) + .minus(initiatorBalanceBeforeClose) + .plus(closeSoloTxFee) + .plus(settleTxFee) + .isEqualTo(balances[initiator.address]) + .should.be.equal(true); + new BigNumber(responderBalanceAfterClose) + .minus(responderBalanceBeforeClose) + .isEqualTo(balances[responder.address]) + .should.be.equal(true); + }).timeout(timeoutBlock); + + it('can dispute via slash tx', async () => { + const [initiatorBalanceBeforeClose, responderBalanceBeforeClose] = await getBalances(); + const oldUpdate = await initiatorCh + .update(initiator.address, responder.address, 100, initiatorSign); + const oldPoi = await initiatorCh.poi({ + accounts: [initiator.address, responder.address], + }); + const recentUpdate = await initiatorCh + .update(initiator.address, responder.address, 100, initiatorSign); + const recentPoi = await responderCh.poi({ + accounts: [initiator.address, responder.address], + }); + const recentBalances = await responderCh.balances([initiator.address, responder.address]); + assertNotNull(oldUpdate.signedTx); + const closeSoloTx = await aeSdk.buildTx({ + tag: Tag.ChannelCloseSoloTx, + channelId: initiatorCh.id(), + fromId: initiator.address, + poi: oldPoi, + payload: oldUpdate.signedTx, + }); + const closeSoloTxFee = unpackTx(closeSoloTx, Tag.ChannelCloseSoloTx).fee; + await aeSdk.sendTransaction(closeSoloTx, { onAccount: initiator }); + + assertNotNull(recentUpdate.signedTx); + const slashTx = await aeSdk.buildTx({ + tag: Tag.ChannelSlashTx, + channelId: responderCh.id(), + fromId: responder.address, + poi: recentPoi, + payload: recentUpdate.signedTx, + }); + const slashTxFee = unpackTx(slashTx, Tag.ChannelSlashTx).fee; + await aeSdk.sendTransaction(slashTx, { onAccount: responder }); + const settleTx = await aeSdk.buildTx({ + tag: Tag.ChannelSettleTx, + channelId: responderCh.id(), + fromId: responder.address, + initiatorAmountFinal: recentBalances[initiator.address], + responderAmountFinal: recentBalances[responder.address], + }); + const settleTxFee = unpackTx(settleTx, Tag.ChannelSettleTx).fee; + await aeSdk.sendTransaction(settleTx, { onAccount: responder }); + + const [initiatorBalanceAfterClose, responderBalanceAfterClose] = await getBalances(); + new BigNumber(initiatorBalanceAfterClose) + .minus(initiatorBalanceBeforeClose) + .plus(closeSoloTxFee) + .isEqualTo(recentBalances[initiator.address]) + .should.be.equal(true); + new BigNumber(responderBalanceAfterClose) + .minus(responderBalanceBeforeClose) + .plus(slashTxFee) + .plus(settleTxFee) + .isEqualTo(recentBalances[responder.address]) + .should.be.equal(true); + }).timeout(timeoutBlock); + + // https://github.com/aeternity/protocol/blob/d634e7a3f3110657900759b183d0734e61e5803a/node/api/channels_api_usage.md#reestablish + it('can reconnect', async () => { + expect(await initiatorCh.round()).to.be.equal(1); + const result = await initiatorCh.update( + initiator.address, + responder.address, + 100, + initiatorSign, + ); + expect(result.accepted).to.equal(true); + const channelId = await initiatorCh.id(); + const fsmId = initiatorCh.fsmId(); + initiatorCh.disconnect(); + const ch = await Channel.initialize({ + ...sharedParams, + ...initiatorParams, + existingChannelId: channelId, + existingFsmId: fsmId, + }); + await waitForChannel(ch); + expect(ch.fsmId()).to.be.equal(fsmId); + expect(await ch.round()).to.be.equal(2); + const state = await ch.state(); + ch.disconnect(); + assertNotNull(state.signedTx); + expect(state.signedTx.encodedTx.tag).to.be.equal(Tag.ChannelOffChainTx); + }); + + it('can post backchannel update', async () => { + expect(await responderCh.round()).to.be.equal(1); + initiatorCh.disconnect(); + const { accepted } = await responderCh.update( + initiator.address, + responder.address, + 100, + responderSign, + ); + expect(accepted).to.equal(false); + expect(await responderCh.round()).to.be.equal(1); + const result = await responderCh.update( + initiator.address, + responder.address, + 100, + async (transaction) => ( + appendSignature(await responderSign(transaction), initiatorSign) + ), + ); + result.accepted.should.equal(true); + expect(await responderCh.round()).to.be.equal(2); + expect(result.signedTx).to.be.a('string'); + }); +}); diff --git a/test/integration/channel-utils.ts b/test/integration/channel-utils.ts new file mode 100644 index 0000000000..ae64da29de --- /dev/null +++ b/test/integration/channel-utils.ts @@ -0,0 +1,61 @@ +import { channelUrl } from '.'; +import { + Encoded, Channel, MemoryAccount, AeSdk, +} from '../../src'; +import { ChannelOptions, SignTxWithTag } from '../../src/channel/internal'; + +export async function waitForChannel(channel: Channel): Promise { + return new Promise((resolve, reject) => { + channel.on('statusChanged', (status: string) => { + switch (status) { + case 'open': + resolve(); + break; + case 'disconnected': + reject(new Error('Unexpected SC status: disconnected')); + break; + default: + } + }); + }); +} + +export const sharedParams = { + url: channelUrl, + pushAmount: 1e13, + initiatorAmount: 5e14, + responderAmount: 5e14, + channelReserve: 0, + port: 3114, + lockPeriod: 1, + initiatorId: 'ak_' as Encoded.AccountAddress, + responderId: 'ak_' as Encoded.AccountAddress, + minimumDepth: 0, + minimumDepthStrategy: 'plain' as const, +}; + +export async function initializeChannels( + initiatorParams: { role: 'initiator'; host: string; sign: SignTxWithTag } & Partial, + responderParams: { role: 'responder'; sign: SignTxWithTag } & Partial, +): Promise<[Channel, Channel]> { + const initiatorCh = await Channel.initialize({ + ...sharedParams, + ...initiatorParams, + }); + const responderCh = await Channel.initialize({ + ...sharedParams, + ...responderParams, + }); + await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); + return [initiatorCh, responderCh]; +} + +export async function recreateAccounts(aeSdk: AeSdk): Promise<[MemoryAccount, MemoryAccount]> { + const initiator = MemoryAccount.generate(); + const responder = MemoryAccount.generate(); + await aeSdk.spend(3e15, initiator.address); + await aeSdk.spend(3e15, responder.address); + sharedParams.initiatorId = initiator.address; + sharedParams.responderId = responder.address; + return [initiator, responder]; +} diff --git a/test/integration/channel.ts b/test/integration/channel.ts index 85937fdf31..757d55f530 100644 --- a/test/integration/channel.ts +++ b/test/integration/channel.ts @@ -3,52 +3,18 @@ import { } from 'mocha'; import { expect } from 'chai'; import * as sinon from 'sinon'; -import BigNumber from 'bignumber.js'; +import { getSdk, networkId } from '.'; import { - getSdk, networkId, channelUrl, timeoutBlock, -} from '.'; -import { - unpackTx, - buildTxHash, - encode, decode, Encoded, Encoding, - Tag, - AbiVersion, - VmVersion, - IllegalArgumentError, - InsufficientBalanceError, - ChannelConnectionError, - ChannelIncomingMessageError, - UnknownChannelStateError, - AeSdk, - Contract, - Channel, - buildTx, - MemoryAccount, + unpackTx, Encoded, Tag, + IllegalArgumentError, InsufficientBalanceError, ChannelConnectionError, + ChannelIncomingMessageError, UnknownChannelStateError, + AeSdk, Channel, buildTx, MemoryAccount, } from '../../src'; import { notify, SignTx, SignTxWithTag } from '../../src/channel/internal'; -import { appendSignature } from '../../src/channel/handlers'; import { assertNotNull, ensureEqual, ensureInstanceOf } from '../utils'; - -const contractSourceCode = ` -contract Identity = - entrypoint getArg(x : int) : int = x -`; - -async function waitForChannel(channel: Channel): Promise { - return new Promise((resolve, reject) => { - channel.on('statusChanged', (status: string) => { - switch (status) { - case 'open': - resolve(); - break; - case 'disconnected': - reject(new Error('Unexpected SC status: disconnected')); - break; - default: - } - }); - }); -} +import { + waitForChannel, sharedParams, initializeChannels, recreateAccounts, +} from './channel-utils'; describe('Channel', () => { let aeSdk: AeSdk; @@ -57,9 +23,6 @@ describe('Channel', () => { let initiatorCh: Channel; let responderCh: Channel; let responderShouldRejectUpdate: number | boolean; - let contractAddress: Encoded.ContractAddress; - let callerNonce: number; - let contract: Contract<{}>; const initiatorSign = sinon.spy( // eslint-disable-next-line @typescript-eslint/no-unused-vars async (tx: Encoded.Transaction, o?: Parameters[1]): Promise => ( @@ -89,19 +52,6 @@ describe('Channel', () => { assertNotNull(signedTx); return buildTx(signedTx); }; - const sharedParams = { - url: channelUrl, - pushAmount: 1e13, - initiatorAmount: 5e14, - responderAmount: 5e14, - channelReserve: 0, - port: 3114, - lockPeriod: 1, - initiatorId: 'ak_' as Encoded.AccountAddress, - responderId: 'ak_' as Encoded.AccountAddress, - minimumDepth: 0, - minimumDepthStrategy: 'plain' as const, - }; const initiatorParams = { role: 'initiator', host: 'localhost', @@ -112,25 +62,9 @@ describe('Channel', () => { sign: responderSignTag, } as const; - async function recreateAccounts(): Promise { - initiator = MemoryAccount.generate(); - responder = MemoryAccount.generate(); - await aeSdk.spend(3e15, initiator.address); - await aeSdk.spend(3e15, responder.address); - sharedParams.initiatorId = initiator.address; - sharedParams.responderId = responder.address; - } - - async function getBalances(): Promise<[string, string]> { - const [bi, br] = await Promise.all( - [initiator.address, responder.address].map(async (a) => aeSdk.getBalance(a)), - ); - return [bi, br]; - } - before(async () => { aeSdk = await getSdk(); - await recreateAccounts(); + [initiator, responder] = await recreateAccounts(aeSdk); }); after(() => { @@ -150,17 +84,8 @@ describe('Channel', () => { }); it('can open a channel', async () => { - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - const initiatorChOpenPromise = waitForChannel(initiatorCh); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - const responderChOpenPromise = waitForChannel(responderCh); - await Promise.all([initiatorChOpenPromise, responderChOpenPromise]); + [initiatorCh, responderCh] = await initializeChannels(initiatorParams, responderParams); + expect(initiatorCh.round()).to.equal(1); expect(responderCh.round()).to.equal(1); @@ -652,15 +577,7 @@ describe('Channel', () => { it('can leave a channel', async () => { initiatorCh.disconnect(); responderCh.disconnect(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); + [initiatorCh, responderCh] = await initializeChannels(initiatorParams, responderParams); initiatorCh.round(); // existingChannelRound const result = await initiatorCh.leave(); expect(result.channelId).to.satisfy((t: string) => t.startsWith('ch_')); @@ -684,507 +601,11 @@ describe('Channel', () => { sinon.assert.notCalled(responderSignTag); }); - it('can solo close a channel', async () => { - initiatorCh.disconnect(); - responderCh.disconnect(); - await recreateAccounts(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); - - const { signedTx } = await initiatorCh.update( - initiator.address, - responder.address, - 1e14, - initiatorSign, - ); - assertNotNull(signedTx); - const poi = await initiatorCh.poi({ - accounts: [initiator.address, responder.address], - }); - const balances = await initiatorCh.balances([initiator.address, responder.address]); - const [initiatorBalanceBeforeClose, responderBalanceBeforeClose] = await getBalances(); - const closeSoloTx = await aeSdk.buildTx({ - tag: Tag.ChannelCloseSoloTx, - channelId: await initiatorCh.id(), - fromId: initiator.address, - poi, - payload: signedTx, - }); - const closeSoloTxFee = unpackTx(closeSoloTx, Tag.ChannelCloseSoloTx).fee; - await aeSdk.sendTransaction(closeSoloTx, { onAccount: initiator }); - - const settleTx = await aeSdk.buildTx({ - tag: Tag.ChannelSettleTx, - channelId: await initiatorCh.id(), - fromId: initiator.address, - initiatorAmountFinal: balances[initiator.address], - responderAmountFinal: balances[responder.address], - }); - const settleTxFee = unpackTx(settleTx, Tag.ChannelSettleTx).fee; - await aeSdk.sendTransaction(settleTx, { onAccount: initiator }); - - const [initiatorBalanceAfterClose, responderBalanceAfterClose] = await getBalances(); - new BigNumber(initiatorBalanceAfterClose) - .minus(initiatorBalanceBeforeClose) - .plus(closeSoloTxFee) - .plus(settleTxFee) - .isEqualTo(balances[initiator.address]) - .should.be.equal(true); - new BigNumber(responderBalanceAfterClose) - .minus(responderBalanceBeforeClose) - .isEqualTo(balances[responder.address]) - .should.be.equal(true); - }).timeout(timeoutBlock); - - it('can dispute via slash tx', async () => { - initiatorCh.disconnect(); - responderCh.disconnect(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - lockPeriod: 2, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - lockPeriod: 2, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); - const [initiatorBalanceBeforeClose, responderBalanceBeforeClose] = await getBalances(); - const oldUpdate = await initiatorCh - .update(initiator.address, responder.address, 100, initiatorSign); - const oldPoi = await initiatorCh.poi({ - accounts: [initiator.address, responder.address], - }); - const recentUpdate = await initiatorCh - .update(initiator.address, responder.address, 100, initiatorSign); - const recentPoi = await responderCh.poi({ - accounts: [initiator.address, responder.address], - }); - const recentBalances = await responderCh.balances([initiator.address, responder.address]); - assertNotNull(oldUpdate.signedTx); - const closeSoloTx = await aeSdk.buildTx({ - tag: Tag.ChannelCloseSoloTx, - channelId: initiatorCh.id(), - fromId: initiator.address, - poi: oldPoi, - payload: oldUpdate.signedTx, - }); - const closeSoloTxFee = unpackTx(closeSoloTx, Tag.ChannelCloseSoloTx).fee; - await aeSdk.sendTransaction(closeSoloTx, { onAccount: initiator }); - - assertNotNull(recentUpdate.signedTx); - const slashTx = await aeSdk.buildTx({ - tag: Tag.ChannelSlashTx, - channelId: responderCh.id(), - fromId: responder.address, - poi: recentPoi, - payload: recentUpdate.signedTx, - }); - const slashTxFee = unpackTx(slashTx, Tag.ChannelSlashTx).fee; - await aeSdk.sendTransaction(slashTx, { onAccount: responder }); - const settleTx = await aeSdk.buildTx({ - tag: Tag.ChannelSettleTx, - channelId: responderCh.id(), - fromId: responder.address, - initiatorAmountFinal: recentBalances[initiator.address], - responderAmountFinal: recentBalances[responder.address], - }); - const settleTxFee = unpackTx(settleTx, Tag.ChannelSettleTx).fee; - await aeSdk.sendTransaction(settleTx, { onAccount: responder }); - - const [initiatorBalanceAfterClose, responderBalanceAfterClose] = await getBalances(); - new BigNumber(initiatorBalanceAfterClose) - .minus(initiatorBalanceBeforeClose) - .plus(closeSoloTxFee) - .isEqualTo(recentBalances[initiator.address]) - .should.be.equal(true); - new BigNumber(responderBalanceAfterClose) - .minus(responderBalanceBeforeClose) - .plus(slashTxFee) - .plus(settleTxFee) - .isEqualTo(recentBalances[responder.address]) - .should.be.equal(true); - }).timeout(timeoutBlock); - - it('can create a contract and accept', async () => { - initiatorCh.disconnect(); - responderCh.disconnect(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); - contract = await Contract.initialize({ ...aeSdk.getContext(), sourceCode: contractSourceCode }); - const initiatorNewContract = sinon.spy(); - initiatorCh.on('newContract', initiatorNewContract); - const responderNewContract = sinon.spy(); - responderCh.on('newContract', responderNewContract); - const roundBefore = initiatorCh.round(); - assertNotNull(roundBefore); - const callData = contract._calldata.encode('Identity', 'init', []); - const result = await initiatorCh.createContract({ - code: await contract.$compile(), - callData, - deposit: 1000, - vmVersion: VmVersion.Fate, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - result.should.eql({ - accepted: true, address: result.address, signedTx: await initiatorSignedTx(), - }); - expect(initiatorCh.round()).to.equal(roundBefore + 1); - sinon.assert.calledTwice(responderSignTag); - sinon.assert.calledWithExactly( - responderSignTag, - 'update_ack', - sinon.match.string, - { - updates: [{ - abi_version: AbiVersion.Fate, - call_data: callData, - code: await contract.$compile(), - deposit: 1000, - op: 'OffChainNewContract', - owner: sinon.match.string, - vm_version: VmVersion.Fate, - }], - }, - ); - async function getContractAddresses(channel: Channel): Promise { - return Object.keys((await channel.state()).trees.contracts) as Encoded.ContractAddress[]; - } - expect(initiatorNewContract.callCount).to.equal(1); - expect(initiatorNewContract.firstCall.args).to.eql([result.address]); - expect(responderNewContract.callCount).to.equal(1); - expect(responderNewContract.firstCall.args).to.eql([result.address]); - expect(await getContractAddresses(initiatorCh)).to.eql([result.address]); - expect(await getContractAddresses(responderCh)).to.eql([result.address]); - contractAddress = result.address; - - await responderCh.createContract({ - code: await contract.$compile(), - callData: contract._calldata.encode('Identity', 'init', []), - deposit: 1e14, - vmVersion: VmVersion.Fate, - abiVersion: AbiVersion.Fate, - }, responderSign); - const contracts = await getContractAddresses(initiatorCh); - expect(contracts.length).to.equal(2); - expect(await getContractAddresses(responderCh)).to.eql(contracts); - const secondContract = contracts.filter((c) => c !== result.address); - expect(initiatorNewContract.callCount).to.equal(2); - expect(initiatorNewContract.secondCall.args).to.eql(secondContract); - expect(responderNewContract.callCount).to.equal(2); - expect(responderNewContract.secondCall.args).to.eql(secondContract); - }); - - it('can create a contract and reject', async () => { - responderShouldRejectUpdate = true; - const roundBefore = initiatorCh.round(); - const result = await initiatorCh.createContract({ - code: await contract.$compile(), - callData: contract._calldata.encode('Identity', 'init', []), - deposit: 1e14, - vmVersion: VmVersion.Fate, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - expect(initiatorCh.round()).to.equal(roundBefore); - result.should.eql({ ...result, accepted: false }); - }); - - it('can abort contract sign request', async () => { - const errorCode = 12345; - const result = await initiatorCh.createContract( - { - code: await contract.$compile(), - callData: contract._calldata.encode('Identity', 'init', []), - deposit: 1e14, - vmVersion: VmVersion.Fate, - abiVersion: AbiVersion.Fate, - }, - async () => Promise.resolve(errorCode), - ); - result.should.eql({ accepted: false }); - }); - - it('can abort contract with custom error code', async () => { - responderShouldRejectUpdate = 12345; - const result = await initiatorCh.createContract({ - code: await contract.$compile(), - callData: contract._calldata.encode('Identity', 'init', []), - deposit: 1e14, - vmVersion: VmVersion.Fate, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - result.should.eql({ - accepted: false, - errorCode: responderShouldRejectUpdate, - errorMessage: 'user-defined', - }); - }); - - it('can get balances', async () => { - const contractAddr = encode(decode(contractAddress), Encoding.AccountAddress); - const addresses = [initiator.address, responder.address, contractAddr]; - const balances = await initiatorCh.balances(addresses); - balances.should.be.an('object'); - // TODO: use the same type not depending on value after fixing https://github.com/aeternity/aepp-sdk-js/issues/1926 - balances[initiator.address].should.be.a('number'); - balances[responder.address].should.be.a('number'); - balances[contractAddr].should.be.equal(1000); - expect(balances).to.eql(await responderCh.balances(addresses)); - }); - - it('can call a contract and accept', async () => { - const roundBefore = initiatorCh.round(); - assertNotNull(roundBefore); - const result = await initiatorCh.callContract({ - amount: 0, - callData: contract._calldata.encode('Identity', 'getArg', [42]), - contract: contractAddress, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - result.should.eql({ accepted: true, signedTx: await initiatorSignedTx() }); - const round = initiatorCh.round(); - assertNotNull(round); - expect(round).to.equal(roundBefore + 1); - callerNonce = round; - }); - - it('can call a force progress', async () => { - const forceTx = await initiatorCh.forceProgress({ - amount: 0, - callData: contract._calldata.encode('Identity', 'getArg', [42]), - contract: contractAddress, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - const hash = buildTxHash(forceTx.tx); - const { callInfo } = await aeSdk.api.getTransactionInfoByHash(hash); - assertNotNull(callInfo); - expect(callInfo.returnType).to.be.equal('ok'); - }); - - it('can call a contract and reject', async () => { - responderShouldRejectUpdate = true; - const roundBefore = initiatorCh.round(); - const result = await initiatorCh.callContract({ - amount: 0, - callData: contract._calldata.encode('Identity', 'getArg', [42]), - contract: contractAddress, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - expect(initiatorCh.round()).to.equal(roundBefore); - result.should.eql({ ...result, accepted: false }); - }); - - it('can abort contract call sign request', async () => { - const errorCode = 12345; - const result = await initiatorCh.callContract( - { - amount: 0, - callData: contract._calldata.encode('Identity', 'getArg', [42]), - contract: contractAddress, - abiVersion: AbiVersion.Fate, - }, - async () => Promise.resolve(errorCode), - ); - result.should.eql({ accepted: false }); - }); - - it('can abort contract call with custom error code', async () => { - responderShouldRejectUpdate = 12345; - const result = await initiatorCh.callContract({ - amount: 0, - callData: contract._calldata.encode('Identity', 'getArg', [42]), - contract: contractAddress, - abiVersion: AbiVersion.Fate, - }, initiatorSign); - result.should.eql({ - accepted: false, - errorCode: responderShouldRejectUpdate, - errorMessage: 'user-defined', - }); - }); - - it('can get contract call', async () => { - const result = await initiatorCh.getContractCall({ - caller: initiator.address, - contract: contractAddress, - round: callerNonce, - }); - result.should.eql({ - callerId: initiator.address, - callerNonce, - contractId: contractAddress, - gasPrice: result.gasPrice, - gasUsed: result.gasUsed, - height: result.height, - log: result.log, - returnType: 'ok', - returnValue: result.returnValue, - }); - expect(result.returnType).to.be.equal('ok'); - expect(contract._calldata.decode('Identity', 'getArg', result.returnValue).toString()).to.be.equal('42'); - }); - - it('can call a contract using dry-run', async () => { - const result = await initiatorCh.callContractStatic({ - amount: 0, - callData: contract._calldata.encode('Identity', 'getArg', [42]), - contract: contractAddress, - abiVersion: AbiVersion.Fate, - }); - result.should.eql({ - callerId: initiator.address, - callerNonce: result.callerNonce, - contractId: contractAddress, - gasPrice: result.gasPrice, - gasUsed: result.gasUsed, - height: result.height, - log: result.log, - returnType: 'ok', - returnValue: result.returnValue, - }); - expect(result.returnType).to.be.equal('ok'); - expect(contract._calldata.decode('Identity', 'getArg', result.returnValue).toString()).to.be.equal('42'); - }); - - it('can clean contract calls', async () => { - await initiatorCh.cleanContractCalls(); - await initiatorCh.getContractCall({ - caller: initiator.address, - contract: contractAddress, - round: callerNonce, - }).should.eventually.be.rejected; - }); - - it('can get contract state', async () => { - const result = await initiatorCh.getContractState(contractAddress); - result.should.eql({ - contract: { - abiVersion: AbiVersion.Fate, - active: true, - deposit: 1000, - id: contractAddress, - ownerId: initiator.address, - referrerIds: [], - vmVersion: VmVersion.Fate, - }, - contractState: result.contractState, - }); - // TODO: contractState deserialization - }); - - it.skip('can post snapshot solo transaction', async () => { - const snapshotSoloTx = await aeSdk.buildTx({ - tag: Tag.ChannelSnapshotSoloTx, - channelId: initiatorCh.id(), - fromId: initiator.address, - payload: await initiatorSignedTx(), - }); - // TODO: fix this, error: invalid_at_protocol - await aeSdk.sendTransaction(snapshotSoloTx, { onAccount: initiator }); - }); - - // https://github.com/aeternity/protocol/blob/d634e7a3f3110657900759b183d0734e61e5803a/node/api/channels_api_usage.md#reestablish - it('can reconnect', async () => { - initiatorCh.disconnect(); - responderCh.disconnect(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); - expect(await initiatorCh.round()).to.be.equal(1); - const result = await initiatorCh.update( - initiator.address, - responder.address, - 100, - initiatorSign, - ); - expect(result.accepted).to.equal(true); - const channelId = await initiatorCh.id(); - const fsmId = initiatorCh.fsmId(); - initiatorCh.disconnect(); - const ch = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - existingChannelId: channelId, - existingFsmId: fsmId, - }); - await waitForChannel(ch); - expect(ch.fsmId()).to.be.equal(fsmId); - expect(await ch.round()).to.be.equal(2); - const state = await ch.state(); - ch.disconnect(); - assertNotNull(state.signedTx); - expect(state.signedTx.encodedTx.tag).to.be.equal(Tag.ChannelOffChainTx); - }); - - it('can post backchannel update', async () => { - initiatorCh.disconnect(); - responderCh.disconnect(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); - expect(await responderCh.round()).to.be.equal(1); - initiatorCh.disconnect(); - const { accepted } = await responderCh.update( - initiator.address, - responder.address, - 100, - responderSign, - ); - expect(accepted).to.equal(false); - expect(await responderCh.round()).to.be.equal(1); - const result = await responderCh.update( - initiator.address, - responder.address, - 100, - async (transaction) => ( - appendSignature(await responderSign(transaction), initiatorSign) - ), - ); - result.accepted.should.equal(true); - expect(await responderCh.round()).to.be.equal(2); - expect(result.signedTx).to.be.a('string'); - }); - describe('throws errors', () => { before(async () => { initiatorCh.disconnect(); responderCh.disconnect(); - initiatorCh = await Channel.initialize({ - ...sharedParams, - ...initiatorParams, - }); - responderCh = await Channel.initialize({ - ...sharedParams, - ...responderParams, - }); - await Promise.all([waitForChannel(initiatorCh), waitForChannel(responderCh)]); + [initiatorCh, responderCh] = await initializeChannels(initiatorParams, responderParams); }); after(() => { From 329de9e8f0b824cea89aaf016a7358223b82b061 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Tue, 11 Jun 2024 14:33:45 +1000 Subject: [PATCH 053/149] fix(aens): validate minus chars in name as node does --- src/tx/builder/helpers.ts | 9 +++++++++ test/unit/aens.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/tx/builder/helpers.ts b/src/tx/builder/helpers.ts index 0a1c0693a9..f959e821d8 100644 --- a/src/tx/builder/helpers.ts +++ b/src/tx/builder/helpers.ts @@ -70,6 +70,15 @@ export function nameToPunycode(maybeName: string): AensName { if (/\p{Emoji_Presentation}/u.test(name)) { throw new ArgumentError('aens name', 'not containing emoji', maybeName); } + if (name[2] === '-' && name[3] === '-') { + throw new ArgumentError('aens name', 'without "-" char in both the third and fourth positions', maybeName); + } + if (name[0] === '-') { + throw new ArgumentError('aens name', 'starting with no "-" char', maybeName); + } + if (name.at(-1) === '-') { + throw new ArgumentError('aens name', 'ending with no "-" char', maybeName); + } let punycode; try { const u = new URL(`http://${name}.${suffix}`); diff --git a/test/unit/aens.ts b/test/unit/aens.ts index 5f03383635..fad5510260 100644 --- a/test/unit/aens.ts +++ b/test/unit/aens.ts @@ -295,6 +295,18 @@ describe('AENS utils', () => { expect(() => ensureName('ldiDxa1Yxy1iiTRztYEN4F8nrnfZib3Q1MllPghmst8fjJ1sI3DXzOoAddE2ETxp.chain')) .to.throw(ArgumentError, 'aens name should be not too long, got ldiDxa1Yxy1iiTRztYEN4F8nrnfZib3Q1MllPghmst8fjJ1sI3DXzOoAddE2ETxp.chain instead'); }); + + it('fails if name starts or ends with minus', () => { + expect(() => ensureName('-test.chain')) + .to.throw(ArgumentError, 'aens name should be starting with no "-" char, got -test.chain instead'); + expect(() => ensureName('test-.chain')) + .to.throw(ArgumentError, 'aens name should be ending with no "-" char, got test-.chain instead'); + }); + + it('fails if name has minus at 2, 3 chars', () => { + expect(() => ensureName('te--st.chain')) + .to.throw(ArgumentError, 'aens name should be without "-" char in both the third and fourth positions, got te--st.chain instead'); + }); }); describe('isAuctionName', () => { From b94e198ef1b811bd42a6f7434466884d5333e13c Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Wed, 12 Jun 2024 18:31:57 +1000 Subject: [PATCH 054/149] feat(account)!: encode secret key as sk_-prefixed string BREAKING CHANGE: MemoryAccount accepts secret key as sk_-prefixed string Convert secret key as hex to new format as ```js const oldSk = '9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b971647764' + '54ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'; const newSk = encode(Buffer.from(oldSk, 'hex').subarray(0, 32), Encoding.AccountSecretKey) // 'sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf' ``` BREAKING CHANGE: `generateKeyPair` returns secretKey encoded as sk_-prefixed string --- examples/browser/wallet-iframe/src/App.vue | 2 +- .../wallet-web-extension/src/background.js | 2 +- examples/node/contract-interaction.mjs | 2 +- examples/node/paying-for-contract-call-tx.mjs | 2 +- examples/node/paying-for-spend-tx.mjs | 2 +- examples/node/transfer-ae.mjs | 2 +- src/account/Memory.ts | 17 ++++------ src/utils/crypto.ts | 4 +-- src/utils/encoder-types.ts | 2 ++ src/utils/encoder.ts | 2 ++ test/charts/dynamic-gas-price.html | 2 +- test/environment/browser.html | 2 +- test/environment/node.js | 2 +- test/environment/node.mjs | 2 +- test/environment/node.ts | 2 +- test/integration/index.ts | 9 +++--- test/unit/crypto.ts | 3 ++ test/unit/delegation.ts | 2 +- test/unit/jwt.ts | 2 +- test/unit/memory-account.ts | 31 +++++++++---------- 20 files changed, 48 insertions(+), 46 deletions(-) diff --git a/examples/browser/wallet-iframe/src/App.vue b/examples/browser/wallet-iframe/src/App.vue index 5f33c97cd3..f39be6a371 100644 --- a/examples/browser/wallet-iframe/src/App.vue +++ b/examples/browser/wallet-iframe/src/App.vue @@ -212,7 +212,7 @@ export default { { name: 'ae_mainnet', instance: new Node('https://mainnet.aeternity.io') }, ], accounts: [ - new AccountMemoryProtected('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), + new AccountMemoryProtected('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), AccountMemoryProtected.generate(), ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), diff --git a/examples/browser/wallet-web-extension/src/background.js b/examples/browser/wallet-web-extension/src/background.js index a7a07c9e4d..cbce8aff54 100644 --- a/examples/browser/wallet-web-extension/src/background.js +++ b/examples/browser/wallet-web-extension/src/background.js @@ -106,7 +106,7 @@ const aeSdk = new AeSdkWallet({ instance: new Node('https://testnet.aeternity.io'), }], accounts: [ - new AccountMemoryProtected('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), + new AccountMemoryProtected('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), AccountMemoryProtected.generate(), ], id: browser.runtime.id, diff --git a/examples/node/contract-interaction.mjs b/examples/node/contract-interaction.mjs index 5a20a8c788..c5bab60cce 100755 --- a/examples/node/contract-interaction.mjs +++ b/examples/node/contract-interaction.mjs @@ -31,7 +31,7 @@ contract Multiplier = f * 10 entrypoint multiplyBy(x : int) = x * state.factor `; -const ACCOUNT_SECRET_KEY = '9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'; +const ACCOUNT_SECRET_KEY = 'sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'; const NODE_URL = 'https://testnet.aeternity.io'; const COMPILER_URL = 'https://v7.compiler.aepps.com'; diff --git a/examples/node/paying-for-contract-call-tx.mjs b/examples/node/paying-for-contract-call-tx.mjs index 92a3bfe69c..988ec83051 100644 --- a/examples/node/paying-for-contract-call-tx.mjs +++ b/examples/node/paying-for-contract-call-tx.mjs @@ -40,7 +40,7 @@ import { // ## 2. Define constants // The following constants are used in the subsequent code snippets. -const PAYER_ACCOUNT_SECRET_KEY = '9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'; +const PAYER_ACCOUNT_SECRET_KEY = 'sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'; const NODE_URL = 'https://testnet.aeternity.io'; const COMPILER_URL = 'https://v7.compiler.aepps.com'; const CONTRACT_ADDRESS = 'ct_iy86kak8GGt4U5VjDFNQf1a9qjbyxKpmGVNe3UuKwnmcM6LW8'; diff --git a/examples/node/paying-for-spend-tx.mjs b/examples/node/paying-for-spend-tx.mjs index cbb70cb92b..c67d6378df 100644 --- a/examples/node/paying-for-spend-tx.mjs +++ b/examples/node/paying-for-spend-tx.mjs @@ -26,7 +26,7 @@ import { // ## 2. Define constants // The following constants are used in the subsequent code snippets. -const PAYER_ACCOUNT_SECRET_KEY = '9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'; +const PAYER_ACCOUNT_SECRET_KEY = 'sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'; const NODE_URL = 'https://testnet.aeternity.io'; const AMOUNT = 1; diff --git a/examples/node/transfer-ae.mjs b/examples/node/transfer-ae.mjs index 571796d621..eb6e67e9d4 100755 --- a/examples/node/transfer-ae.mjs +++ b/examples/node/transfer-ae.mjs @@ -20,7 +20,7 @@ import { AeSdk, Node, MemoryAccount } from '@aeternity/aepp-sdk'; // The following constants are used in the subsequent code snippets. const ACCOUNT_KEYPAIR = { publicKey: 'ak_21A27UVVt3hDkBE5J7rhhqnH5YNb4Y1dqo4PnSybrH85pnWo7E', - secretKey: '9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200', + secretKey: 'sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf', }; const NODE_URL = 'https://testnet.aeternity.io'; const [amount = 1, recipient = ACCOUNT_KEYPAIR.publicKey] = process.argv.slice(2); diff --git a/src/account/Memory.ts b/src/account/Memory.ts index bfa45b46dc..00b9accbfe 100644 --- a/src/account/Memory.ts +++ b/src/account/Memory.ts @@ -1,6 +1,7 @@ +import nacl from 'tweetnacl'; import AccountBase from './Base'; import { - generateKeyPairFromSecret, sign, generateKeyPair, hash, messageToHash, messagePrefixLength, + sign, generateKeyPair, hash, messageToHash, messagePrefixLength, } from '../utils/crypto'; import { ArgumentError, UnexpectedTsError } from '../utils/errors'; import { @@ -33,17 +34,11 @@ export default class AccountMemory extends AccountBase { /** * @param secretKey - Secret key */ - constructor(secretKey: string | Uint8Array) { + constructor(secretKey: Encoded.AccountSecretKey) { super(); - secretKey = typeof secretKey === 'string' ? Buffer.from(secretKey, 'hex') : secretKey; - if (secretKey.length !== 64) { - throw new ArgumentError('secretKey', '64 bytes', secretKey.length); - } - secretKeys.set(this, secretKey); - this.address = encode( - generateKeyPairFromSecret(secretKey).publicKey, - Encoding.AccountAddress, - ); + const keyPair = nacl.sign.keyPair.fromSeed(decode(secretKey)); + secretKeys.set(this, keyPair.secretKey); + this.address = encode(keyPair.publicKey, Encoding.AccountAddress); } /** diff --git a/src/utils/crypto.ts b/src/utils/crypto.ts index f68c86db4c..6eced1b423 100644 --- a/src/utils/crypto.ts +++ b/src/utils/crypto.ts @@ -118,7 +118,7 @@ export function generateKeyPairFromSecret(secret: Uint8Array): SignKeyPair { */ export function generateKeyPair(raw: true): { publicKey: Buffer; secretKey: Buffer }; export function generateKeyPair(raw?: false): { - publicKey: Encoded.AccountAddress; secretKey: string; + publicKey: Encoded.AccountAddress; secretKey: Encoded.AccountSecretKey; }; export function generateKeyPair(raw = false): { publicKey: Encoded.AccountAddress | Buffer; @@ -136,7 +136,7 @@ export function generateKeyPair(raw = false): { } return { publicKey: encode(publicBuffer, Encoding.AccountAddress), - secretKey: secretBuffer.toString('hex'), + secretKey: encode(secretBuffer.subarray(0, 32), Encoding.AccountSecretKey), }; } diff --git a/src/utils/encoder-types.ts b/src/utils/encoder-types.ts index be4c4d99e0..4195cd5296 100644 --- a/src/utils/encoder-types.ts +++ b/src/utils/encoder-types.ts @@ -21,6 +21,7 @@ export enum Encoding { OracleQueryId = 'oq', OracleResponse = 'or', AccountAddress = 'ak', + AccountSecretKey = 'sk', Signature = 'sg', Commitment = 'cm', PeerPubkey = 'pp', @@ -49,6 +50,7 @@ export type OracleQuery = `${Encoding.OracleQuery}_${string}`; export type OracleQueryId = `${Encoding.OracleQueryId}_${string}`; export type OracleResponse = `${Encoding.OracleResponse}_${string}`; export type AccountAddress = `${Encoding.AccountAddress}_${string}`; +export type AccountSecretKey = `${Encoding.AccountSecretKey}_${string}`; export type Signature = `${Encoding.Signature}_${string}`; export type Commitment = `${Encoding.Commitment}_${string}`; export type PeerPubkey = `${Encoding.PeerPubkey}_${string}`; diff --git a/src/utils/encoder.ts b/src/utils/encoder.ts index 38bf2066a3..d9b65f937a 100644 --- a/src/utils/encoder.ts +++ b/src/utils/encoder.ts @@ -51,6 +51,7 @@ const base58Types = [ Encoding.OracleAddress, Encoding.OracleQueryId, Encoding.AccountAddress, + Encoding.AccountSecretKey, Encoding.Signature, Encoding.Commitment, Encoding.PeerPubkey, @@ -72,6 +73,7 @@ const byteSizeForType = { [Encoding.OracleAddress]: 32, [Encoding.OracleQueryId]: 32, [Encoding.AccountAddress]: 32, + [Encoding.AccountSecretKey]: 32, [Encoding.Signature]: 64, [Encoding.Commitment]: 32, [Encoding.PeerPubkey]: 32, diff --git a/test/charts/dynamic-gas-price.html b/test/charts/dynamic-gas-price.html index 91d5cd7db8..cde59ad642 100644 --- a/test/charts/dynamic-gas-price.html +++ b/test/charts/dynamic-gas-price.html @@ -74,7 +74,7 @@ const nodeUrl = 'http://localhost:3013'; const node = new Node(nodeUrl); -const genesis = new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'); +const genesis = new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'); const minGasPriceToShow = 1e9 - 10; async function newFrame() { diff --git a/test/environment/browser.html b/test/environment/browser.html index 685e92090f..edbc9078f1 100644 --- a/test/environment/browser.html +++ b/test/environment/browser.html @@ -18,7 +18,7 @@ const aeSdk = new AeSdk({ nodes: [{ name: 'testnet', instance: node }], accounts: [ - new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), + new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), }); diff --git a/test/environment/node.js b/test/environment/node.js index de021e51ad..fda60ea7a6 100755 --- a/test/environment/node.js +++ b/test/environment/node.js @@ -12,7 +12,7 @@ const node = new Node('https://testnet.aeternity.io'); const aeSdk = new AeSdk({ nodes: [{ name: 'testnet', instance: node }], accounts: [ - new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), + new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), }); diff --git a/test/environment/node.mjs b/test/environment/node.mjs index de52ce0361..49c263837e 100755 --- a/test/environment/node.mjs +++ b/test/environment/node.mjs @@ -12,7 +12,7 @@ const node = new Node('https://testnet.aeternity.io'); const aeSdk = new AeSdk({ nodes: [{ name: 'testnet', instance: node }], accounts: [ - new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), + new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), }); diff --git a/test/environment/node.ts b/test/environment/node.ts index 2b30d5739b..45fdb97e8a 100755 --- a/test/environment/node.ts +++ b/test/environment/node.ts @@ -11,7 +11,7 @@ const node = new Node('https://testnet.aeternity.io'); const aeSdk = new AeSdk({ nodes: [{ name: 'testnet', instance: node }], accounts: [ - new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'), + new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), ], onCompiler: new CompilerHttp('https://v7.compiler.aepps.com'), }); diff --git a/test/integration/index.ts b/test/integration/index.ts index 81f9085825..4e808badf5 100644 --- a/test/integration/index.ts +++ b/test/integration/index.ts @@ -1,6 +1,6 @@ import { after, afterEach } from 'mocha'; import { - AeSdk, CompilerHttpNode, MemoryAccount, Node, Encoded, + AeSdk, CompilerHttpNode, MemoryAccount, Node, Encoded, isAddressValid, Encoding, } from '../../src'; import '..'; @@ -14,6 +14,9 @@ const configuration = { compilerUrl: 'https://v8.compiler.aepps.com', getGenesisAccount: () => { if (process.env.MAINNET_SECRET_KEY == null) throw new Error('MAINNET_SECRET_KEY is not set'); + if (!isAddressValid(process.env.MAINNET_SECRET_KEY, Encoding.AccountSecretKey)) { + throw new Error(`MAINNET_SECRET_KEY is not valid: ${process.env.MAINNET_SECRET_KEY}`); + } return new MemoryAccount(process.env.MAINNET_SECRET_KEY); }, sdkOptions: { @@ -45,9 +48,7 @@ const configuration = { debugUrl: 'http://localhost:3113', channelUrl: 'ws://localhost:3014/channel', compilerUrl: 'http://localhost:3080', - getGenesisAccount: () => new MemoryAccount( - '9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200', - ), + getGenesisAccount: () => new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'), sdkOptions: { _expectedMineRate: 1000, _microBlockCycle: 300, diff --git a/test/unit/crypto.ts b/test/unit/crypto.ts index bc538ab039..e7bf5c47a9 100644 --- a/test/unit/crypto.ts +++ b/test/unit/crypto.ts @@ -38,6 +38,9 @@ describe('crypto', () => { expect(keyPair.publicKey).to.satisfy((b: string) => b.startsWith('ak_')); assert.isAtLeast(keyPair.publicKey.length, 51); assert.isAtMost(keyPair.publicKey.length, 53); + expect(keyPair.secretKey).to.satisfy((b: string) => b.startsWith('sk_')); + assert.isAtLeast(keyPair.secretKey.length, 51); + assert.isAtMost(keyPair.secretKey.length, 53); }); it('Address from secret', () => { diff --git a/test/unit/delegation.ts b/test/unit/delegation.ts index 16b726c5dc..c913eef708 100644 --- a/test/unit/delegation.ts +++ b/test/unit/delegation.ts @@ -18,7 +18,7 @@ describe('Delegation signatures', () => { }); it('signs delegation', async () => { - const account = new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'); + const account = new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'); expect(await account.signDelegation(delegation, { networkId: 'ae_test' })) .to.be.equal('sg_UHnWENCvSvJPjcwR2rW82btPvDoDqPvDnn8TsXkoQSNoMHEeT1D8YkAwJQQNrALTBdqqFou4X4Q2MoqCXzwnQZTDZvH28'); }); diff --git a/test/unit/jwt.ts b/test/unit/jwt.ts index 337303800a..a680e3142f 100644 --- a/test/unit/jwt.ts +++ b/test/unit/jwt.ts @@ -6,7 +6,7 @@ import { } from '../../src'; describe('JWT', () => { - const account = new MemoryAccount('9ebd7beda0c79af72a42ece3821a56eff16359b6df376cf049aee995565f022f840c974b97164776454ba119d84edc4d6058a8dec92b6edc578ab2d30b4c4200'); + const account = new MemoryAccount('sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'); const payload = { test: 'data' }; const jwt = 'eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJzdWJfandrIjp7ImNydiI6IkVkMjU1MTkiLCJrdHkiOiJPS1AiLCJ4IjoiaEF5WFM1Y1dSM1pGUzZFWjJFN2NUV0JZcU43SksyN2NWNHF5MHd0TVFnQSJ9LCJ0ZXN0IjoiZGF0YSJ9.u9El4b2O2LRhvTTW3g46vk1hx0xXWPkJEaEeEy-rLzLr2yuQlNc7qIdcr_z06BgHx5jyYv2CpUL3hqLpc0RzBA'; const jwtWithAddress = 'eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJhZGRyZXNzIjoiYWtfMjFBMjdVVlZ0M2hEa0JFNUo3cmhocW5INVlOYjRZMWRxbzRQblN5YnJIODVwbldvN0UifQ._munmgMvg9SE6jJaTYd6tBSV7EtqO_YRV4TkZjQfop6W18hm_fAPWNbwNupS8doaOs2corl4Uc26zUq1Jyl6Bg'; diff --git a/test/unit/memory-account.ts b/test/unit/memory-account.ts index bb872b9f8c..4d4910ee7f 100644 --- a/test/unit/memory-account.ts +++ b/test/unit/memory-account.ts @@ -1,26 +1,19 @@ import '..'; import { describe, it } from 'mocha'; import { expect } from 'chai'; -import { - MemoryAccount, generateKeyPair, verifyMessage, ArgumentError, -} from '../../src'; +import { MemoryAccount, verifyMessage, InvalidChecksumError } from '../../src'; -const testAcc = generateKeyPair(); +const secretKey = 'sk_2CuofqWZHrABCrM7GY95YSQn8PyFvKQadnvFnpwhjUnDCFAWmf'; describe('MemoryAccount', () => { it('fails on invalid secret key', async () => { - expect(() => new MemoryAccount(' ')) - .to.throw(ArgumentError, 'should be 64 bytes, got 0 instead'); + expect(() => new MemoryAccount('ak_test' as any)) + .to.throw(InvalidChecksumError, 'Invalid checksum'); }); - it('Init with secretKey as hex string', async () => { - const acc = new MemoryAccount(testAcc.secretKey); - expect(acc.address).to.be.equal(testAcc.publicKey); - }); - - it('Init with secretKey as Buffer', async () => { - const acc = new MemoryAccount(Buffer.from(testAcc.secretKey, 'hex')); - expect(acc.address).to.be.equal(testAcc.publicKey); + it('Init with secretKey', async () => { + const acc = new MemoryAccount(secretKey); + expect(acc.address).to.be.equal('ak_21A27UVVt3hDkBE5J7rhhqnH5YNb4Y1dqo4PnSybrH85pnWo7E'); }); it('generates', async () => { @@ -30,8 +23,14 @@ describe('MemoryAccount', () => { it('Sign message', async () => { const message = 'test'; - const account = new MemoryAccount(testAcc.secretKey); + const account = new MemoryAccount(secretKey); const signature = await account.signMessage(message); - expect(verifyMessage(message, signature, testAcc.publicKey)).to.equal(true); + expect(signature).to.be.eql(Uint8Array.from([ + 0, 140, 249, 124, 66, 31, 147, 247, 203, 165, 188, 56, 230, 186, 154, 230, 113, 200, 189, + 113, 6, 140, 52, 219, 199, 130, 46, 121, 201, 45, 239, 59, 109, 139, 175, 243, 83, 186, 83, + 6, 87, 148, 163, 176, 118, 97, 26, 22, 209, 172, 47, 88, 13, 29, 56, 200, 155, 242, 104, 110, + 74, 51, 47, 0, + ])); + expect(verifyMessage(message, signature, account.address)).to.be.equal(true); }); }); From 3e390b35e3613d503b6dc64d825257d88d0a18cc Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Wed, 12 Jun 2024 18:58:03 +1000 Subject: [PATCH 055/149] docs: add an example page with tools based on sdk --- .eslintrc.js | 2 +- docs/build-assets.sh | 6 + examples/browser/tools/index.html | 13 ++ examples/browser/tools/package.json | 22 ++++ examples/browser/tools/public/preact.svg | 1 + examples/browser/tools/src/app.tsx | 13 ++ .../src/components/AccountsByMnemonic.tsx | 61 ++++++++++ .../tools/src/components/ConvertSk.tsx | 49 ++++++++ .../src/components/TransactionPacker.tsx | 111 ++++++++++++++++++ examples/browser/tools/src/index.css | 78 ++++++++++++ examples/browser/tools/src/main.tsx | 5 + examples/browser/tools/src/vite-env.d.ts | 1 + examples/browser/tools/tsconfig.json | 30 +++++ examples/browser/tools/tsconfig.node.json | 11 ++ examples/browser/tools/vite.config.ts | 8 ++ mkdocs.yml | 1 + 16 files changed, 411 insertions(+), 1 deletion(-) create mode 100644 examples/browser/tools/index.html create mode 100644 examples/browser/tools/package.json create mode 100644 examples/browser/tools/public/preact.svg create mode 100644 examples/browser/tools/src/app.tsx create mode 100644 examples/browser/tools/src/components/AccountsByMnemonic.tsx create mode 100644 examples/browser/tools/src/components/ConvertSk.tsx create mode 100644 examples/browser/tools/src/components/TransactionPacker.tsx create mode 100644 examples/browser/tools/src/index.css create mode 100644 examples/browser/tools/src/main.tsx create mode 100644 examples/browser/tools/src/vite-env.d.ts create mode 100644 examples/browser/tools/tsconfig.json create mode 100644 examples/browser/tools/tsconfig.node.json create mode 100644 examples/browser/tools/vite.config.ts diff --git a/.eslintrc.js b/.eslintrc.js index 1106acb49f..c468887fb0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,7 +23,7 @@ module.exports = { ], ignorePatterns: [ 'dist', 'es', 'src/apis', 'docs/api', 'test/environment/ledger/browser', 'types-legacy', - 'docs/examples', 'site', + 'docs/examples', 'site', 'examples/browser/tools', ], rules: { 'rulesdir/tsdoc-syntax': 'error', diff --git a/docs/build-assets.sh b/docs/build-assets.sh index ec3761b8cd..a7ee0af281 100755 --- a/docs/build-assets.sh +++ b/docs/build-assets.sh @@ -30,5 +30,11 @@ mkdir ../../../docs/examples/browser/wallet-web-extension/ mv artifacts/wallet-web-extension-v0.1.0-production.zip ../../../docs/examples/browser/wallet-web-extension/packed.zip mv dist/report.html ../../../docs/examples/browser/wallet-web-extension/report.html +echo Build example tools +cd ../tools +npm i +npm run build +mv dist/ ../../../docs/examples/browser/tools + cd ../../.. perl -i -pe 's/"rem-prepare"/"prepare"/g' package.json diff --git a/examples/browser/tools/index.html b/examples/browser/tools/index.html new file mode 100644 index 0000000000..53d2589435 --- /dev/null +++ b/examples/browser/tools/index.html @@ -0,0 +1,13 @@ + + + + + + + SDK tools + + +
+ + + diff --git a/examples/browser/tools/package.json b/examples/browser/tools/package.json new file mode 100644 index 0000000000..1aab108715 --- /dev/null +++ b/examples/browser/tools/package.json @@ -0,0 +1,22 @@ +{ + "name": "tools", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@aeternity/aepp-sdk": "file:../../..", + "@scure/bip39": "^1.3.0", + "buffer": "^6.0.3", + "preact": "^10.19.6" + }, + "devDependencies": { + "@preact/preset-vite": "^2.8.2", + "typescript": "^5.2.2", + "vite": "^5.2.0" + } +} diff --git a/examples/browser/tools/public/preact.svg b/examples/browser/tools/public/preact.svg new file mode 100644 index 0000000000..908f17def0 --- /dev/null +++ b/examples/browser/tools/public/preact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/browser/tools/src/app.tsx b/examples/browser/tools/src/app.tsx new file mode 100644 index 0000000000..359fd76db0 --- /dev/null +++ b/examples/browser/tools/src/app.tsx @@ -0,0 +1,13 @@ +import { ConvertSk } from './components/ConvertSk' +import { AccountsByMnemonic } from './components/AccountsByMnemonic' +import { TransactionPacker } from './components/TransactionPacker' + +export function App() { + return ( + <> + + + + + ) +} diff --git a/examples/browser/tools/src/components/AccountsByMnemonic.tsx b/examples/browser/tools/src/components/AccountsByMnemonic.tsx new file mode 100644 index 0000000000..6beae4f396 --- /dev/null +++ b/examples/browser/tools/src/components/AccountsByMnemonic.tsx @@ -0,0 +1,61 @@ +import { Buffer } from 'buffer' +import { useState } from 'preact/hooks' +import { + generateSaveHDWalletFromSeed, getSaveHDWalletAccounts, encode, Encoding, +} from '@aeternity/aepp-sdk'; +import { mnemonicToSeedSync, validateMnemonic } from '@scure/bip39'; +import { wordlist } from '@scure/bip39/wordlists/english'; + +export function AccountsByMnemonic() { + const [mnemonic, setMnemonic] = useState('') + const [count, setCount] = useState(1) + + let seed + try { + seed = mnemonicToSeedSync(mnemonic); + } catch (error) {} + let accounts + let validation = 'invalid' + if (seed) { + const wallet = generateSaveHDWalletFromSeed(seed, ''); + accounts = getSaveHDWalletAccounts(wallet, '', count) + // TODO: getSaveHDWalletAccounts should return encoded secret keys + .map(({ publicKey, secretKey }) => ({ + publicKey, + secretKey: encode(Buffer.from(secretKey, 'hex').subarray(0, 32), Encoding.AccountSecretKey), + })); + validation = (validateMnemonic(mnemonic, wordlist) ? '' : 'not ') + 'in english wordlist' + } + + return ( + <> +

Generate accounts by mnemonic phrase

+
+
Mnemonic phrase
+ setMnemonic(event.currentTarget.value)} + /> + +
+
Mnemonic {validation}
+ + {accounts && accounts.map(({ publicKey, secretKey }, idx) => <> +
Account #{idx}
+
+ {publicKey}
+ {secretKey} +
+ )} + + +
+ + ) +} diff --git a/examples/browser/tools/src/components/ConvertSk.tsx b/examples/browser/tools/src/components/ConvertSk.tsx new file mode 100644 index 0000000000..f4c44c24e4 --- /dev/null +++ b/examples/browser/tools/src/components/ConvertSk.tsx @@ -0,0 +1,49 @@ +import { Buffer } from 'buffer' +import { useState } from 'preact/hooks' +import { + isAddressValid, Encoding, Encoded, decode, encode, MemoryAccount, +} from '@aeternity/aepp-sdk' + +function parseSecretKey(secretKey: string): Encoded.AccountSecretKey | undefined { + if (isAddressValid(secretKey, Encoding.AccountSecretKey)) return secretKey + const buffer = Buffer.from(secretKey, 'hex') + if (buffer.length === 64) return encode(buffer.subarray(0, 32), Encoding.AccountSecretKey) +} + +export function ConvertSk() { + const [secretKeyRaw, setSecretKey] = useState('') + + const secretKey = parseSecretKey(secretKeyRaw) + let address + let secretKeyOtherFormat + let secretKeyOtherValue + if (secretKey) { + address = new MemoryAccount(secretKey).address; + [secretKeyOtherFormat, secretKeyOtherValue] = + isAddressValid(secretKeyRaw, Encoding.AccountSecretKey) + ? ['Secret key in hex', Buffer.concat([decode(secretKey), decode(address)]).toString('hex')] + : ['sk_-prefixed secret key', secretKey] + } + + return ( + <> +

Convert between hex secret key and sk_-prefixed

+
+
Secret key in any format
+ setSecretKey(event.currentTarget.value)} + /> + + {secretKeyOtherFormat && <> +
{secretKeyOtherFormat}
+
{secretKeyOtherValue}
+ } + +
Address
+
{address || 'Can\'t parse secret key'}
+
+ + ) +} diff --git a/examples/browser/tools/src/components/TransactionPacker.tsx b/examples/browser/tools/src/components/TransactionPacker.tsx new file mode 100644 index 0000000000..49b9b20bfc --- /dev/null +++ b/examples/browser/tools/src/components/TransactionPacker.tsx @@ -0,0 +1,111 @@ +import { Buffer } from 'buffer' +import { useState } from 'preact/hooks' +import { JSX } from 'preact/jsx-runtime' +import { unpackTx, buildTx, Tag, isAddressValid, Encoding } from '@aeternity/aepp-sdk' + +export function TransactionPacker() { + const [packError, setPackError] = useState('') + const [unpackError, setUnpackError] = useState('') + const [transaction, setTransaction] = useState('') + + let params: ReturnType | undefined + try { + if (isAddressValid(transaction, Encoding.Transaction)) { + params = unpackTx(transaction) + setUnpackError('') + } else setUnpackError(transaction ? 'Invalid encoding' : 'No transaction') + } catch (error) { + setUnpackError(String(error)) + } + + function repackTx(path: Array, value: unknown) { + try { + if (params == null) throw new Error('Transaction params not set') + const newParams = structuredClone(params) + path.reduce((pr: any, name, idx) => { + if (idx < path.length - 1) return pr[name] + pr[name] = value + }, newParams) + setTransaction(buildTx(newParams)) + setPackError('') + } catch (error) { + setPackError(String(error)) + } + } + + function addName(path: Array, el: JSX.Element): JSX.Element { + return <> +
{path.map((p, i) => <>{i ? . : ''}{p})}
+ {el} + + } + + function getEditor(path: Array, value: unknown): JSX.Element { + if (path.at(-1) === 'tag') { + const tag = value as Tag + return addName(path,
{tag} ({Tag[tag]})
) + } + if (path.at(-1) === 'version') return addName(path,
{String(value)}
) + if (typeof value === 'number') { + return addName(path, repackTx(path, +ev.currentTarget.value)} + />) + } + if (typeof value === 'bigint') { + return addName(path, repackTx(path, BigInt(ev.currentTarget.value))} + />) + } + if (typeof value === 'string') { + return addName(path, repackTx(path, ev.currentTarget.value)} + />) + } + if (Array.isArray(value)) { + return <> + {value.map((el, idx) => getEditor([...path, idx], el))} + + } + if (value instanceof Uint8Array) { + return addName(path, repackTx(path, Buffer.from(ev.currentTarget.value, 'hex'))} + />) + } + if (value != null && typeof value === 'object') { + return <> + {Object.entries(value).map(([key, el]) => getEditor([...path, key], el))} + + } + return addName(path,
{String(value)}
) + } + + return ( + <> +

Unpack transaction

+
+
Encoded transaction
+